Contattataci

Struttura del corso

Introduzione al Calcolo Accelerato con GPU

  • Calcolo eterogeneo e architettura CPU-GPU.
  • Spazi di esecuzione e memoria di CUDA.
  • Compilazione del codice C++ CUDA con nvcc e CMake.
  • Verifica dell'ambiente di sviluppo GPU.

Algoritmi Paralleli con Thrust e CUB

  • Ordinamento, riduzione e trasformazione accelerati dalle GPU.
  • Rifattorizzazione degli algoritmi STL per l'esecuzione su GPU.
  • Vettori dispositivo Thrust e policy di esecuzione.
  • Primitivi device-wide CUB per pipeline personalizzate.

Architettura e Gestione della Memoria GPU

  • Tipi di memoria globale, costante e texture.
  • Allocazione esplicita e trasferimenti della memoria dispositivo.
  • Unified Memory per un accesso semplificato ai dati.
  • Mischiatura della memoria (memory coalescing) e ottimizzazione dei pattern di accesso.

Esecuzione Asincrona con Stream CUDA

  • Creazione e gestione degli stream CUDA.
  • Sovrapposizione dell'esecuzione dei kernel con i trasferimenti di dati.
  • Eventi CUDA per la gestione delle dipendenze.
  • Priorità degli stream e ottimizzazione della concorrenza.

Scrittura di Kernel CUDA Personalizzati

  • Il modello di programmazione SIMT e l'esecuzione dei warp.
  • Configurazione del lancio dei kernel e loop grid-stride.
  • Indicizzazione dei thread e griglie multidimensionali.
  • Gestione degli errori e verifiche dell'API runtime CUDA.

Gerarchia dei Thread e Modello di Esecuzione

  • Grid, blocchi e thread nel codice dispositivo.
  • Primitivi a livello di warp e operazioni di votazione (ballot operations).
  • Sincronizzazione a livello di blocco e barriere.
  • Analisi dell'occupazione e del utilizzo delle risorse.

Gruppi Cooperativi per Parallelismo Flessibile

  • L'API cooperative_groups e i tipi di gruppo.
  • Tiles dei thread-block e tiled_partition.
  • Lanci cooperativi a livello di grid.
  • Pattern di sincronizzazione multi-grid.

Tecniche di Ottimizzazione della Memoria Condivisa

  • Banche della memoria condivita ed evitare i conflitti tra banche.
  • Strategie di tiling per le operazioni sulle matrici.
  • Memoria condivisa come cache gestita dall'utente.
  • cuda::shared_memory_mdspan per visualizzazioni multidimensionali.

Fusione dei Kernel e Pattern Avanzati di Parallelismo

  • Fusione di più kernel per ridurre il sovraccarico di lancio.
  • Scan, reduce-by-key e algoritmi segmentati.
  • Operazioni atomiche e strutture dati senza lock.
  • Atomics aggregati a livello di warp per aumentare il throughput.

Profilazione e Ottimizzazione con Nsight Systems

  • Analisi cronologica dell'attività della CPU e della GPU.
  • Identificazione dei colli di bottiglia nei trasferimenti di memoria.
  • Profilazione delle prestazioni del kernel e dell'occupazione.
  • Ottimizzazione iterativa con Nsight Compute.

Caratteristiche C++ Moderne nel Codice Dispositivo CUDA

  • Lambda, constexpr e auto nei kernel.
  • Algoritmi paralleli C++17 e policy di esecuzione.
  • Concept e ranges C++20 sul dispositivo.
  • Supporto C++23 in nvcc e CCCL 3.x.

CUDA Graphs e Asincronia Avanzata

  • Definizione e lancio di CUDA Graphs.
  • Acquisizione delle graph dall'esecuzione degli stream.
  • Aggiornamento delle graph e nodi di esecuzione condizionale.
  • Riduzione della latenza di lancio per carichi di lavoro iterativi.

Pattern di Integrazione per Applicazioni Esistenti

  • Avvolgimento del codice GPU dietro interfacce C++.
  • Gestione di sistemi multi-GPU e NUMA.
  • Integrazione nel sistema di build con CMake e CUDA.
  • Debugging del codice dispositivo con cuda-gdb.

Riepilogo e Best Practices

  • Scegliere tra Thrust, CUB e kernel personalizzati.
  • Portabilità delle prestazioni tra diverse architetture GPU.
  • Organizzazione del codice e RAII per le risorse CUDA.
  • Prossimi passi e percorsi di apprendimento avanzati CUDA.

Requisiti

  • Competenza base in C++, incluse espressioni lambda, template e STL.
  • Conoscenza degli algoritmi standard, dei contenitori e degli iteratori.
  • Confidenza con cicli, condizioni e funzioni.
  • Nessuna conoscenza pregressa di CUDA o programmazione GPU richiesta.

Pubblico Target

  • Sviluppatori C++ che cercano di accelerare applicazioni intensive con le GPU.
  • Ingegneri del software che passano da una programmazione solo su CPU a una parallela eterogenea.
  • Ingegneri delle prestazioni e sviluppatori quantitativi che lavorano con grandi set di dati.
 8 ore

Numero di Partecipanti


Prezzo per partecipante

Recensioni (3)

Corsi in Arrivo

Categorie relative