Grazie per aver inviato la tua richiesta! Uno dei nostri team membri ti contatterà a breve.
Grazie per aver inviato il tuo prenotazione! Uno dei nostri team membri ti contatterà a breve.
Struttura del corso
Introduzione
- Cos’è ROCm?
- Cos’è HIP?
- ROCm, CUDA ed OpenCL: differenze e relazioni reciproche
- Panoramica sulle caratteristiche architetturali di ROCm e HIP
- Configurazione dell’ambiente di sviluppo
Prime mosse
- Creazione di un nuovo progetto ROCm utilizzando Visual Studio Code.
- Analisi della struttura e dei file del progetto.
- Compilazione ed esecuzione del programma sviluppato.
- Visualizzazione degli output tramite le funzioni printf e fprintf.
L’API di ROCm
- Funzione svolta dall’API di ROCm all’interno dei programmi scritti in ambiente host.
- Utilizzo dell’API per interrogare le specifiche e i requisiti del dispositivo GPU.
- Allocazione e deallocazione della memoria mediante tali strumenti.
- Trasferimento dei dati tra la CPU e la GPU, operato tramite l’API stessa.
- Lancio dei kernel nonché sincronizzazione tra i thread grazie all’API.
- Gestione degli errori e delle eccezioni attraverso le procedure previste da ROCm.
Il linguaggio HIP
- Ruolo ricoperto dal linguaggio HIP nei programmi che si eseguono sui device GPU.
- Scrivere, utilizzando il linguaggio HIP, dei kernel capaci di funzionare sulla GPU e modificarne i dati interni.
- Conoscenza dei tipi di dato, qualificatori, operatori ed espressioni previsti da questo linguaggio.
- Impiego delle funzioni predefinite, delle variabili e delle librerie disponibili in HIP per gestire attività comuni.
Modelli di memoria con ROCm e HIP
- Distinguere tra i modelli di memoria utilizzati su host e su device.
- Utilizzare gli spazi di memoria messi a disposizione da entrambi i sistemi – globale, condiviso, costante e locale – per gestire correttamente l’allocazione dei dati.
- Manipolare i tipi specifici di oggetti memorizzati in tali aree, come puntatori, array, texture ed altre strutture simili.
- Scegliere le modalità di accesso appropriato – in lettura, scrittura o anche lettura/scrittura – ai dati immagazzinati nella memoria.
- Comprendere i meccanismi di coerenza della memoria e le procedure necessarie per la relativa sincronizzazione.
Modelli esecutivi con ROCm e HIP
- Distinguere chiaramente tra l’esecuzione su host e quella su device nel contesto di questi ambienti di sviluppo.
- Controllare il comportamento dei thread, blocchi e griglie definiti in modo da ottenere la massima parallelizzazione.
- Sfruttare le funzioni tipiche per l’identificazione e la gestione dei singoli thread – ad esempio hipThreadIdx_x, hipBlockIdx_x, hipBlockDim_x – disponibili tramite ROCm ed HIP.
- Impiegare specifiche funzioni destinate ai blocchi di calcolo – quali __syncthreads e __threadfence_block – per garantire la corretta progressione temporale dei thread stessi.
- Riconoscere le principali strutture della griglia di calcolo (definite da hipGridDim_x, hipGridSync) nonché le tecniche basate su cooperative groups che permettono una comunicazione più stretta tra le parti interconnesse del codice.
Debugging
- Riconoscere i tipi di errori e problemi ricorrenti in codici sviluppati con ROCm ed HIP.
- Servirsi del debugger presente in Visual Studio Code per esaminare variabili, impostare breakpoint o analizzare il call stack.
- Debuggare direttamente i programmi su piattaforme AMD utilizzando appositi strumenti come il Debugger di ROCm stesso.
- Analisi approfondita delle prestazioni e della distribuzione del carico di lavoro tramite lo strumento specifico Profiler di ROCm.
Ottimizzazione
- Identificare i fattori principali che incidono sulle performance complessive dei programmi sviluppati con questi ambienti.
- Sfruttare le tecniche di coalescenza fornite da ROCm e HIP per migliorare il throughput complessivo della memoria stessa.
- Impiegare procedure di caching o prefetching per ridurre significativamente i tempi di attesa legati agli accessi alla memoria.
- Sperimentare la gestione ottimale delle aree condivise e locali della memoria allo scopo di contenere le latenze operative e sfruttare al meglio le loro capacità.
- Utilizzare opportunamente il profiler integrato per misurare le prestazioni, rilevando così dove possano esserci margini di miglioramento in termini temporali ed efficiente impiego delle risorse hardware.
Sintesi finale e prossimi passi
Requisiti
- Conoscenza di base del linguaggio C/C++ e dei concetti fondamentali della programmazione parallela
- Competenze elementari in materia di architettura dei computer e gerarchia della memoria
- Esperienza nell’utilizzo di strumenti a riga di comando e editor di codice
Destinatari del corso
- Sviluppatori interessati ad apprendere l’uso di ROCm e HIP per programmare le GPU AMD sfruttandone il potenziale parallelo.
- Programmatori intenzionati a creare codice ad alte prestazioni ed estensibile, in grado di funzionare su diversi dispositivi basati su tecnologia AMD.
- Ingegneri del software desiderosi di approfondire gli aspetti più tecnici della programmazione delle GPU e di migliorarne le prestazioni attraverso ottimizzazioni specifiche.
28 ore