Contattataci
 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

Numero di Partecipanti


Prezzo per partecipante

Corsi in Arrivo

Categorie relative