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.
Durata 28 ore
Struttura del corso
Introduzione
- Che cos'è CUDA?
- CUDA vs OpenCL vs SYCL
- Panoramica delle funzionalità e dell'architettura di CUDA
- Configurazione dell'ambiente di sviluppo
Primi Passi
- Creazione di un nuovo progetto CUDA utilizzando Visual Studio Code
- Esplorazione della struttura del progetto e dei file
- Compilazione ed esecuzione del programma
- Visualizzazione dell'output utilizzando printf e fprintf
API CUDA
- Comprensione del ruolo dell'API CUDA nel programma host
- Utilizzo dell'API CUDA per interrogare informazioni e capacità del dispositivo
- Utilizzo dell'API CUDA per allocare e disallocare la memoria del dispositivo
- Utilizzo dell'API CUDA per copiare dati tra host e dispositivo
- Utilizzo dell'API CUDA per avviare i kernel e sincronizzare i thread
- Utilizzo dell'API CUDA per gestire errori ed eccezioni
CUDA C/C++
- Comprensione del ruolo del CUDA C/C++ nel programma dispositivo
- Utilizzo del CUDA C/C++ per scrivere kernel che si eseguono sulla GPU e manipolano i dati
- Utilizzo dei tipi di dati, qualificatori, operatori ed espressioni di CUDA C/C++
- Utilizzo delle funzioni incorporate di CUDA C/C++, come matematica, atomiche, warp, ecc.
- Utilizzo delle variabili incorporate di CUDA C/C++, come threadIdx, blockIdx, blockDim, ecc.
- Utilizzo delle librerie di CUDA C/C++, come cuBLAS, cuFFT, cuRAND, ecc.
Modello di Memoria CUDA
- Comprensione della differenza tra i modelli di memoria host e dispositivo
- Utilizzo degli spazi di memoria CUDA, come globale, condivisa, costante e locale
- Utilizzo degli oggetti di memoria CUDA, come puntatori, array, texture e superfici
- Utilizzo delle modalità di accesso alla memoria CUDA, come sola lettura, sola scrittura, lettura-scrittura, ecc.
- Utilizzo del modello di coerenza della memoria CUDA e dei meccanismi di sincronizzazione
Modello di Esecuzione CUDA
- Comprensione della differenza tra i modelli di esecuzione host e dispositivo
- Utilizzo dei thread, dei blocchi e delle griglie CUDA per definire la parallelità
- Utilizzo delle funzioni di thread CUDA, come threadIdx, blockIdx, blockDim, ecc.
- Utilizzo delle funzioni di blocco CUDA, come __syncthreads, __threadfence_block, ecc.
- Utilizzo delle funzioni di griglia CUDA, come gridDim, gridSync, cooperative groups, ecc.
Debug
- Comprensione degli errori e dei bug comuni nei programmi CUDA
- Utilizzo del debugger di Visual Studio Code per ispezionare variabili, breakpoint, call stack, ecc.
- Utilizzo di CUDA-GDB per debuggare programmi CUDA su Linux
- Utilizzo di CUDA-MEMCHECK per rilevare errori di memoria e perdite
- Utilizzo di NVIDIA Nsight per debuggare e analizzare programmi CUDA su Windows
Ottimizzazione
- Comprensione dei fattori che influenzano le prestazioni dei programmi CUDA
- Utilizzo delle tecniche di coalescing CUDA per migliorare la larghezza di banda della memoria
- Utilizzo delle tecniche di caching e prefetching CUDA per ridurre la latenza della memoria
- Utilizzo delle tecniche di memoria condivisa e memoria locale CUDA per ottimizzare gli accessi alla memoria e la larghezza di banda
- Utilizzo del profiling e degli strumenti di profiling CUDA per misurare e migliorare il tempo di esecuzione e l'utilizzo delle risorse
Requisiti
- Conoscenza del linguaggio C/C++ e dei concetti di programmazione parallela
- Nozioni di base sull'architettura del computer e sulla gerarchia di memoria
- Esperienza con strumenti a riga di comando ed editor di codice
Pubblico
- Sviluppatori che desiderano imparare a utilizzare CUDA per programmare le GPU NVIDIA e sfruttare la loro parallelità
- Sviluppatori che desiderano scrivere codice ad alte prestazioni e scalabile che possa essere eseguito su diversi dispositivi CUDA
- Programmati che desiderano esplorare gli aspetti a basso livello della programmazione GPU e ottimizzare le prestazioni del proprio codice