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

Numero di Partecipanti



Prezzo per Partecipante

Recensioni (1)

Corsi relativi

GPU Programming - OpenCL vs CUDA vs ROCm

28 ore

AMD GPU Programming

28 ore

ROCm for Windows

21 ore

Categorie relative