Contattataci

Struttura del corso

Introduzione

  • Cos’è CUDA?
  • CUDA rispetto a OpenCL e SYCL
  • Panoramica delle caratteristiche e dell'architettura di CUDA
  • Configurazione dell'ambiente di sviluppo

Primi passi

  • Crea un nuovo progetto CUDA utilizzando Visual Studio Code.
  • Esplora la struttura e i file del progetto.
  • Compila ed esegui il programma.
  • Visualizza l'output tramite printf e fprintf.

API di CUDA

  • Ruolo dell’API CUDA nel codice host.
  • Ottenere informazioni sul dispositivo tramite l’API CUDA.
  • Allocare e liberare memoria del device usando l’API.
  • Trasferire dati tra host e device tramite l’API.
  • Avviare i kernel e sincronizzare i thread con l’API.
  • Gestione degli errori ed eccezioni tramite l’API.

Linguaggio CUDA C/C++

  • Ruolo di CUDA C/C++ nel codice device.
  • Scrivere kernel in CUDA C/C++ da eseguire sulla GPU e manipolare i dati.
  • Utilizzare tipi di dati, qualificatori, operatori ed espressioni previsti dal linguaggio.
  • Impiegare funzioni integrate come math, atomiche o relative ai warp.
  • Sfruttare le variabili predefinite – threadIdx, blockIdx, blockDim ecc. – per il controllo dei dati.
  • Integrare librerie specifiche come cuBLAS, cuFFT e cuRAND nel codice.

Modello di memoria di CUDA

  • Differenze tra i modelli di memoria host e device.
  • Impiego degli spazi di memoria – globale, condivisa, costante e locale – per l’ottimizzazione delle operazioni.
  • Gestione di oggetti come puntatori, array, texture e superfici in contesto di memoria.
  • Impostare modalità d'accesso predefinite (lettura solo, scrittura sola ecc.).
  • Rispettare il modello di coerenza della memoria e i meccanismi sincronizzanti previsti da CUDA.

Modello di esecuzione di CUDA

  • Differenze tra l'esecuzione su host e device.
  • Definire la parallelizzazione tramite thread, blocchi e griglie.
  • Gestire le funzioni relative ai thread – threadIdx, blockIdx ecc. – per il coordinamento dei dati.
  • Riconoscere funzioni di blocco quali __syncthreads e __threadfence_block.
  • Utilizzare elementi di tipo griglia come gridDim o cooperative groups nel programma.

Debugging

  • Identificare errori tipici e problemi comuni nei codici CUDA.
  • Usare il debugger integrato in Visual Studio Code per analizzare variabili, impostare breakpoint ed esaminare lo stack delle chiamate.
  • Sfruttare CUDA-GDB per diagnosticare i problemi dei programmi su Linux.
  • Utilizzare CUDA-MEMCHECK al fine di individuare errori e perdite di memoria indesiderate.
  • Impiegare NVIDIA Nsight durante l'analisi e il debug di applicazioni Windows.

Ottimizzazione

  • Comprendere i fattori che influenzano le prestazioni dei programmi scritti in CUDA.
  • Sfruttare la coalescing per incrementare il flusso dati verso la memoria.
  • Migliorare le prestazioni tramite l’impiego di tecniche di caching e prefetching che riducano i tempi di latenza.
  • Impiegare in modo mirato la memoria condivisa e locale per ottimizzare accessi e larghezza di banda disponibile.
  • Valutare e migliorare il comportamento runtime e l’impiego delle risorse tramite profiler dedicati.

Sintesi finale e prossimi passi

Requisiti

  • Conoscenza del linguaggio C/C++ e dei concetti fondamentali della programmazione parallela
  • Nozioni di base sull'architettura informatica e sulla gerarchia della memoria
  • Esperienza nell'utilizzo di strumenti a riga di comando e editor di codice

Destinatari del corso

  • Sviluppatori interessati ad apprendere come impiegare CUDA per programmare le GPU NVIDIA e sfruttarne il parallelismo.
  • Programmatori che desiderano realizzare codice ad alte prestazioni e scalabile, idoneo all'esecuzione su diversi dispositivi compatibili con CUDA.
  • Persone interessate a approfondire gli aspetti più tecnici della programmazione delle GPU e ad ottimizzare le prestazioni dei propri programmi.
 28 ore

Numero di Partecipanti


Prezzo per partecipante

Corsi in Arrivo

Categorie relative