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
- Che cos’è la programmazione su GPU?
- Perché optare per la programmazione su GPU?
- Quali sono le principali problematiche e i compromessi nella programmazione su GPU?
- Quali sono i framework disponibili per la programmazione su GPU?
- Come scegliere il framework più adatto alla propria applicazione
OpenCL
- Cos’è OpenCL?
- Quali sono i vantaggi e gli svantaggi di OpenCL?
- Configurazione dell'ambiente di sviluppo per OpenCL
- Creazione di un programma base in grado di eseguire l'addizione vettoriale con OpenCL
- Utilizzo dell’API OpenCL per interrogare il dispositivo, allocare e liberare memoria, trasferire dati tra host e device, avviare i kernel e sincronizzare i thread
- Scrivere in modo corretto i kernel utilizzando il linguaggio OpenCL C per elaborare i dati sul dispositivo
- Utilizzo delle funzioni, variabili e librerie predefinite di OpenCL per svolgere le operazioni più comuni
- Impiego degli spazi di memoria (globale, locale, costante, privato) al fine di ottimizzare il trasferimento e l’accesso ai dati in memoria
- Controllo del parallelismo tramite i modelli di esecuzione di OpenCL, basati su elementi di lavoro, gruppi di lavoro e intervalli multidimensionali
- Esecuzione di operazioni di debug e test sui programmi tramite strumenti come CodeXL
- Tecniche per ottimizzare i programmi scritti in OpenCL: coesione dei dati, caching, prefetching e analisi delle prestazioni
CUDA
- Cos’è CUDA?
- Quali sono i punti di forza e le limitazioni legati a CUDA?
- Configurazione dell'ambiente di sviluppo per CUDA
- Sviluppo di un programma base in grado di eseguire l'addizione vettoriale utilizzando CUDA
- Impiego dell’API CUDA per interrogare il dispositivo, allocare e liberare memoria, trasferire dati tra host e device, avviare i kernel e sincronizzare i thread
- Scrivere in modo corretto i kernel mediante il linguaggio C/C++ per CUDA, necessario all’elaborazione dei dati sul dispositivo
- Utilizzo delle funzioni, variabili e librerie predefinite di CUDA per svolgere operazioni comuni nella programmazione su GPU
- Impiego dei diversi spazi di memoria (globale, condiviso, costante, locale) al fine di ottimizzare il trasferimento e l’accesso ai dati in memoria
- Controllo del parallelismo mediante i modelli di esecuzione tipici di CUDA: thread, blocchi e griglie di elaborazione
- Esecuzione di operazioni di debug e test tramite strumenti come CUDA-GDB, CUDA-MEMCHECK e NVIDIA Nsight
- Tecniche per ottimizzare i programmi scritti in CUDA: coesione dei dati, caching, prefetching e analisi delle prestazioni
ROCm
- Cos’è ROCm?
- Quali sono i vantaggi e gli svantaggi legati all'utilizzo di ROCm?
- Configurazione dell'ambiente di sviluppo per ROCm
- Creazione di un programma base in grado di eseguire l'addizione vettoriale con ROCm
- Utilizzo dell’API ROCm per interrogare il dispositivo, allocare e liberare memoria, trasferire dati tra host e device, avviare i kernel e sincronizzare i thread
- Scrivere in modo corretto i kernel mediante il linguaggio C/C++ per ROCm, indispensabile all’elaborazione dei dati sul dispositivo
- Utilizzo delle funzioni, variabili e librerie predefinite di ROCm per svolgere operazioni comuni nella programmazione su GPU
- Impiego degli spazi di memoria (globale, locale, costante, privato) al fine di ottimizzare il trasferimento e l’accesso ai dati in memoria
- Controllo del parallelismo tramite i modelli di esecuzione tipici di ROCm: thread, blocchi e griglie di elaborazione
- Esecuzione di operazioni di debug e test sui programmi con strumenti specifici come il debugger ROCm o lo strumento ROCm Profiler
- Tecniche per ottimizzare i programmi scritti in ROCm: coesione dei dati, caching, prefetching e analisi delle prestazioni
Confronto tra i framework
- Valutazione comparativa di OpenCL, CUDA e ROCm in termini di caratteristiche, rendimento e compatibilità
- Analisi delle prestazioni dei programmi sviluppati tramite benchmark e metriche specifiche
- Scoperta delle migliori pratiche, consigli utili e trucchi per una corretta programmazione su GPU
- Esplorazione delle tendenze attuali e future riguardanti la programmazione e l’ottimizzazione su GPU
Conclusioni e prossimi passi
Requisiti
- Conoscenza dei linguaggi C/C++ e delle nozioni fondamentali sulla programmazione parallela
- Nozioni di base sull'architettura dei computer e sulla gerarchia della memoria
- Esperienza nell’utilizzo di strumenti a riga di comando e editor di codice
Destinatari del corso
- Sviluppatori che desiderano imparare ad utilizzare diversi framework per la programmazione su GPU e confrontarne le caratteristiche, le prestazioni e la compatibilità
- Programmatori interessati a sviluppare codice portabile ed scalabile in grado di funzionare su molteplici piattaforme e dispositivi
- Professionisti del settore che intendono approfondire i vantaggi, gli svantaggi nonché le problematiche connesse alla programmazione e all'ottimizzazione su GPU
28 ore