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
Computazione su GPU e architettura CUDA
- Differenze strutturali tra CPU e GPU
- Modello dei multiprocessori di flusso delle GPU NVIDIA
- Panoramica sul modello di programmazione CUDA
- Elaborazione eterogenea e paradigma host-device
Configurazione dell’ambiente di sviluppo CUDA
- Installazione dello strumento CUDA Toolkit 13.x
- Il compilatore NVCC e il flusso operativo di build
- Verifica dell’ambiente mediante richieste informazioni sul dispositivo
- Integrazione con ambienti IDE e strumenti di sviluppo
Scrivere ed avviare i kernel CUDA
- Sintassi e qualificatori delle funzioni kernel
- Configurazione e lancio dell’esecuzione dei kernel
- Esempi di somma vettoriale e schemi paralleli base
- Macro per il controllo degli errori CUDA
Gerarchia dei thread e modello d’esecuzione in CUDA
- Organizzazione di griglie, blocchi e thread
- Indicizzamento dei thread e calcolo degli ID globali
- Esecuzione a livello di warp e modello SIMT
- Occupancy e sfruttamento delle risorse hardware
Architettura della memoria GPU e gestione delle risorse
- Tipi di memoria: globale, condivisa, costante e registri
- Assegnazione e liberazione della memoria sul dispositivo
- Trasferimento dei dati tra host e device
- Utilizzo della memoria condivisa per la collaborazione all’interno di un blocco
Memoria Unificata e migrazione dinamica dei dati
- Il modello della memoria unificata e le allocazioni gestite
- Migrazione automatica delle pagine e paging on-demand
- Utilizzo del prefetching asincrono tramite cudaMemPrefetchAsync
- Suggerimenti per la gestione della memoria in base ai pattern di accesso<
Profilazione a livello di sistema con Nsight Systems
- Analisi temporale delle attività tramite Nsight Systems
- Rilevamento dei punti di sincronizzazione tra CPU e GPU
- Visualizzazione dell’esecuzione kernel e dei trasferimenti dati
- Interpretazione dei dati relativi alle prestazioni complessive del sistema<
Ottimizzazione dei kernel con Nsight Compute
- Analisi interattiva dei kernel tramite Nsight Compute
- Valutazione della velocità di trasferimento dati e larghezza di banda<
- Utilizzo computazionale e statistiche relative allo stato dei warp<
- Consigli guidati per l’analisi e l’ottimizzazione delle prestazioni<
Flussi di esecuzione concorrenti e operazioni asincrone
- I flussi di esecuzione CUDA e il loro utilizzo principale<
- Sovrapposizione tra l’esecuzione di kernel e i trasferimenti dei dati<
- Sincronizzazione dei flussi e gestione degli eventi CUDA<
- Schema progettuali per pipeline che sfruttano più flussi concorrenti<
Gestione degli errori e strumenti di debug<
- Codici di errore dell’API CUDA e strategie per la correzione<
- L’utilizzo di Compute-sanitizer per il controllo dell’accesso alla memoria<
- Utilizzo di cuda-gdb per il debug a livello di kernel<
- Affermazioni condizionali e rilevamento sincrono degli errori<
Metodologia basata sulla profilazione per l’ottimizzazione<
- Approccio iterativo all’analisi delle prestazioni<
- Riconoscimento e prioritarizzazione dei colli di bottiglia<
- Test di regressione per monitorare eventuali peggioramenti nelle prestazioni<
- Documentazione completa delle decisioni ottimizzative adottate<
Progetto finale: realizzazione di un’applicazione accelerata<
- Progettazione completa di una soluzione basata sull’utilizzo della GPU<
- Integrazione costante degli strumenti di profilazione nel processo di sviluppo<
- Valutazione delle prestazioni e redazione di report dettagliati<
- Aspetti pratici per il rilascio in ambiente produttivo<
Requisiti
- Conoscenze di base nella programmazione C\/C++: tipi di dati, cicli, strutture condizionali, funzioni e manipolazione degli array
- Familiarità con la compilazione ed esecuzione dei programmi da riga di comando
- Non è richiesta alcuna esperienza precedente nello sviluppo per GPU o in programmazione CUDA
Destinatari del corso
- Sviluppatori e ingegneri software intenzionati ad accelerare le proprie applicazioni C\/C++ sfruttando le GPU
- Ricercatori scientifici e professionisti dell’HPC in fase di transizione dall’elaborazione esclusivamente su CPU a sistemi eterogenei
- Responsabili tecnici interessati a valutare l’utilizzo delle GPU per applicazioni operative
8 ore