Guida alla programmazione AMD HIP
Una guida tecnica completa sull'Interfaccia per l'elaborazione eterogenea portabile (HIP). Fornisce un'API di runtime C++ e un linguaggio kernel che permette agli sviluppatori di creare applicazioni portabili per GPU AMD e NVIDIA da un singolo codice sorgente. La guida copre l'installazione, la configurazione dell'ambiente, i modelli di programmazione, l'allocazione della memoria e gli strumenti per il passaggio del codice CUDA a HIP.
Lezioni
Lesson
Panoramica del corso
📚 Riepilogo del contenuto
Un manuale tecnico completo per l'interfaccia Heterogeneous-compute per la portabilità (HIP). Fornisce un'API di runtime C++ e un linguaggio kernel che permette agli sviluppatori di creare applicazioni portabili per GPU AMD e NVIDIA da un'unica base di codice. La guida copre l'installazione, la configurazione dell'ambiente, i modelli di programmazione, l'allocazione della memoria e gli strumenti per convertire il codice CUDA in HIP.
Padroneggia la programmazione GPU portabile: una sola base di codice per entrambe le piattaforme AMD e NVIDIA.
Autore: Advanced Micro Devices, Inc. (AMD)
Ringraziamenti: AMD, il logo AMD Arrow, AMD Instinct, Radeon, ROCm e le loro combinazioni sono marchi registrati di Advanced Micro Devices, Inc. Linux è un marchio registrato di Linus Torvalds. PCIe è un marchio registrato della PCI-SIG Corporation.
🎯 Obiettivi didattici
- Definire le caratteristiche principali e i vantaggi offerti dal framework HIP.
- Dimostrare come accedere e interrogare l'ambiente HIP tramite strumenti di sistema.
- Spiegare il rapporto architetturale tra la portabilità HIP e la sua tecnologia compilatore.
- Eseguire installazioni specifiche della piattaforma per ambienti NVIDIA e AMD.
- Coordinare il processo di build multi-repository per compilare HIP da codice sorgente.
- Verificare un'installazione corretta utilizzando strumenti di configurazione e verifica del sistema.
- Configurare e gestire la memoria GPU usando l'allocazione HIP, controlli di coerenza e visibilità della memoria host zero-copy.
- Sviluppare kernel ad alte prestazioni usando qualificatori, tipi vettoriali e primitive di sincronizzazione specifiche di HIP.
- Implementare algoritmi paralleli avanzati utilizzando funzioni di shuffle, vote, ballot e gruppi cooperativi.
- Automatizzare la traduzione del codice CUDA in HIP usando strumenti HIPIFY e gestire conversioni progetto in loco.
🔹 Lezione 1: Introduzione alla portabilità e all'architettura HIP
Panoramica: Questa lezione tratta gli aspetti fondamentali dell'interfaccia Heterogeneous-compute per la portabilità (HIP). Si concentra sulle caratteristiche principali che definiscono HIP, sui metodi principali per accedere all'ambiente HIP e sulla tecnologia del compilatore sottostante che consente una portabilità senza interruzioni tra diverse architetture GPU (AMD e NVIDIA).
Risultati apprendimento:
- Definire le caratteristiche principali e i vantaggi offerti dal framework HIP.
- Dimostrare come accedere e interrogare l'ambiente HIP tramite strumenti di sistema.
- Spiegare il rapporto architetturale tra la portabilità HIP e la sua tecnologia compilatore.
🔹 Lezione 2: Installazione e verifica dell'ambiente HIP
Panoramica: Questa lezione fornisce una guida tecnica per configurare l'ambiente HIP (Heterogeneous-compute Interface for Portability) su diverse piattaforme hardware. Copre i passaggi specifici di installazione per i backend AMD e NVIDIA, il complesso processo di compilazione del runtime HIP da repository sorgente e le procedure finali di verifica per garantire la prontezza del sistema allo sviluppo GPU.
Risultati apprendimento:
- Eseguire installazioni specifiche della piattaforma per ambienti NVIDIA e AMD.
- Coordinare il processo di build multi-repository per compilare HIP da codice sorgente.
- Verificare un'installazione corretta utilizzando strumenti di configurazione e verifica del sistema.
🔹 Lezione 3: Modello di programmazione HIP e approfondimento API
Panoramica: Questa lezione offre un'approfondita esplorazione del modello di programmazione Heterogeneous-Compute Interface for Portability (HIP). Copre l'API fondamentale per la gestione della memoria e l'esecuzione dei kernel, le sfumature del linguaggio kernel HIP (compresi qualificatori e variabili incorporate), e funzionalità avanzate come primitive a livello di warp, gruppi cooperativi e intrinseci matematici specializzati.
Risultati apprendimento:
- Configurare e gestire la memoria GPU usando l'allocazione HIP, controlli di coerenza e visibilità della memoria host zero-copy.
- Sviluppare kernel ad alte prestazioni usando qualificatori, tipi vettoriali e primitive di sincronizzazione specifiche di HIP.
- Implementare algoritmi paralleli avanzati utilizzando funzioni di shuffle, vote, ballot e gruppi cooperativi.
🔹 Lezione 4: Trasferimento e migrazione di applicazioni CUDA in HIP
Panoramica: Questa lezione descrive il processo sistematico di migrazione del codice sorgente CUDA verso il framework HIP (Heterogeneous-Compute Interface for Portability). Dettaglia l'uso di strumenti automatizzati come HIPIFY, strategie per la conversione di progetti, l'identificazione dei comportamenti specifici del compilatore tra piattaforme (HIP-Clang vs. NVIDIA) e la gestione delle differenze architetturali.
Risultati apprendimento:
- Automatizzare la traduzione del codice CUDA in HIP usando strumenti HIPIFY e gestire conversioni progetto in loco.
- Differenziare tra piattaforme di destinazione AMD e NVIDIA e tra compilatori usando macro preprocessor e query di ambiente.
- Implementare controlli per caratteristiche architetturali (HIP_ARCH) e applicare workaround per funzioni CUDA specializzate come
memcpyToSymbol.