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'è CUDA?
- CUDA contro OpenCL contro SYCL
- Panoramica delle funzionalità e dell'architettura di CUDA
- Impostazione dell'ambiente di sviluppo
Introduttiva
- Creazione di un nuovo progetto CUDA utilizzando Visual Studio Code
- Esplorazione della struttura e dei file del progetto
- Compilazione ed esecuzione del programma
- Visualizzazione dell'output con printf e fprintf
CUDA API
- Comprendere il ruolo dell'API CUDA nel programma host
- Utilizzo dell'API CUDA per eseguire query sulle informazioni e sulle funzionalità del dispositivo
- Utilizzo dell'API CUDA per allocare e deallocare la memoria del dispositivo
- Utilizzo dell'API CUDA per copiare i dati tra host e dispositivo
- Utilizzo dell'API CUDA per avviare kernel e sincronizzare i thread
- Utilizzo dell'API CUDA per gestire errori ed eccezioni
CUDA C/C++
- Informazioni sul ruolo di CUDA C/C++ nel programma del dispositivo
- Utilizzo di CUDA C/C++ per scrivere kernel che vengono eseguiti su GPU e manipolano i dati
- Utilizzo di tipi di dati, qualificatori, operatori ed espressioni CUDA C/C++
- Utilizzo delle funzioni integrate CUDA C/C++, ad esempio math, atomic, warp, ecc.
- Utilizzo di variabili predefinite CUDA C/C++, ad esempio threadIdx, blockIdx, blockDim e così via.
- Utilizzo di librerie CUDA C/C++, ad esempio cuBLAS, cuFFT, cuRAND, ecc.
Modello di memoria CUDA
- Comprendere la differenza tra i modelli di memoria host e dispositivo
- Utilizzo degli spazi di memoria CUDA, ad esempio globale, condivisa, costante e locale
- Utilizzo di oggetti di memoria CUDA, ad esempio puntatori, matrici, trame e superfici
- Utilizzo delle modalità di accesso alla memoria CUDA, ad esempio sola lettura, sola scrittura, lettura/scrittura, ecc.
- Utilizzo del modello di coerenza della memoria CUDA e dei meccanismi di sincronizzazione
Modello di esecuzione CUDA
- Comprendere la differenza tra i modelli di esecuzione host e dispositivo
- Utilizzo di thread, blocchi e griglie CUDA per definire il parallelismo
- Utilizzo delle funzioni di thread CUDA, ad esempio threadIdx, blockIdx, blockDim e così via.
- Utilizzo di funzioni di blocco CUDA, ad esempio __syncthreads, __threadfence_block, ecc.
- Utilizzo delle funzioni di griglia CUDA, ad esempio gridDim, gridSync, gruppi cooperativi, ecc.
Debug
- Comprendere gli errori e i bug più comuni nei programmi CUDA
- Utilizzo di Visual Studio Debugger di codice per ispezionare variabili, punti di interruzione, stack di chiamate e così via.
- Utilizzo di CUDA-GDB per eseguire il debug dei programmi CUDA su Linux
- Utilizzo di CUDA-MEMCHECK per rilevare errori e perdite di memoria
- Uso di NVIDIA Nsight per eseguire il debug e l'analisi dei programmi CUDA in Windows
Ottimizzazione
- Comprendere i fattori che influenzano le prestazioni dei programmi CUDA
- Utilizzo di tecniche di coalescenza CUDA per migliorare il throughput della memoria
- Utilizzo di tecniche di caching e prefetching CUDA per ridurre la latenza della memoria
- Utilizzo della memoria condivisa CUDA e delle tecniche di memoria locale per ottimizzare gli accessi alla memoria e la larghezza di banda
- Utilizzo di strumenti di profilatura e profilatura CUDA per misurare e migliorare il tempo di esecuzione e l'utilizzo delle risorse
Riepilogo e prossime tappe
Requisiti
- Comprensione del linguaggio C/C++ e dei concetti di programmazione parallela
- Conoscenza di base dell'architettura dei calcolatori e della gerarchia della memoria
- Esperienza con gli strumenti da riga di comando e gli editor di codice
Pubblico
- Sviluppatori che desiderano imparare a usare CUDA per programmare NVIDIA GPU e sfruttarne il parallelismo
- Sviluppatori che desiderano scrivere codice scalabile e ad alte prestazioni che può essere eseguito su diversi dispositivi CUDA
- Programmatori che desiderano esplorare gli aspetti di basso livello della programmazione GPU e ottimizzare le prestazioni del codice
28 Ore