Struttura del corso

Introduzione

  • Cos'è la programmazione GPU?
  • Perché usare la programmazione GPU?
  • Quali sono le sfide e i compromessi della programmazione GPU?
  • Quali sono i framework per la programmazione GPU?
  • Scegliere il framework giusto per l'applicazione

OpenCL

  • Cos'è OpenCL?
  • Quali sono i vantaggi e gli svantaggi di OpenCL?
  • Configurare l'ambiente di sviluppo per OpenCL
  • Creare un programma OpenCL di base che esegue l'addizione vettoriale
  • Utilizzare le API di OpenCL per query informazioni sul dispositivo, allocare e deallocare memoria del dispositivo, copiare dati tra host e dispositivo, lanciare kernel e sincronizzare thread
  • Utilizzare il linguaggio C di OpenCL per scrivere kernel che si eseguono sul dispositivo e manipolano i dati
  • Utilizzare le funzioni, variabili e librerie integrate di OpenCL per eseguire attività e operazioni comuni
  • Utilizzare gli spazi di memoria di OpenCL, come globale, locale, costante e privato, per ottimizzare i trasferimenti di dati e le accessi alla memoria
  • Utilizzare il modello di esecuzione di OpenCL per controllare i work-items, i work-groups e gli ND-ranges che definiscono il parallelismo
  • Debuggare e testare programmi OpenCL utilizzando strumenti come CodeXL
  • Ottimizzare i programmi OpenCL utilizzando tecniche come la coalescenza, il caching, il prefetching e il profiling

CUDA

  • Cos'è CUDA?
  • Quali sono i vantaggi e gli svantaggi di CUDA?
  • Configurare l'ambiente di sviluppo per CUDA
  • Creare un programma CUDA di base che esegue l'addizione vettoriale
  • Utilizzare le API di CUDA per query informazioni sul dispositivo, allocare e deallocare memoria del dispositivo, copiare dati tra host e dispositivo, lanciare kernel e sincronizzare thread
  • Utilizzare il linguaggio C/C++ di CUDA per scrivere kernel che si eseguono sul dispositivo e manipolano i dati
  • Utilizzare le funzioni, variabili e librerie integrate di CUDA per eseguire attività e operazioni comuni
  • Utilizzare gli spazi di memoria di CUDA, come globale, shared, costante e locale, per ottimizzare i trasferimenti di dati e le accessi alla memoria
  • Utilizzare il modello di esecuzione di CUDA per controllare i thread, i blocchi e le griglie che definiscono il parallelismo
  • Debuggare e testare programmi CUDA utilizzando strumenti come CUDA-GDB, CUDA-MEMCHECK e NVIDIA Nsight
  • Ottimizzare i programmi CUDA utilizzando tecniche come la coalescenza, il caching, il prefetching e il profiling

ROCm

  • Cos'è ROCm?
  • Quali sono i vantaggi e gli svantaggi di ROCm?
  • Configurare l'ambiente di sviluppo per ROCm
  • Creare un programma ROCm di base che esegue l'addizione vettoriale
  • Utilizzare le API di ROCm per query informazioni sul dispositivo, allocare e deallocare memoria del dispositivo, copiare dati tra host e dispositivo, lanciare kernel e sincronizzare thread
  • Utilizzare il linguaggio C/C++ di ROCm per scrivere kernel che si eseguono sul dispositivo e manipolano i dati
  • Utilizzare le funzioni, variabili e librerie integrate di ROCm per eseguire attività e operazioni comuni
  • Utilizzare gli spazi di memoria di ROCm, come globale, locale, costante e privato, per ottimizzare i trasferimenti di dati e le accessi alla memoria
  • Utilizzare il modello di esecuzione di ROCm per controllare i thread, i blocchi e le griglie che definiscono il parallelismo
  • Debuggare e testare programmi ROCm utilizzando strumenti come ROCm Debugger e ROCm Profiler
  • Ottimizzare i programmi ROCm utilizzando tecniche come la coalescenza, il caching, il prefetching e il profiling

Confronto

  • Confrontare le caratteristiche, le prestazioni e la compatibilità di OpenCL, CUDA e ROCm
  • Valutare i programmi GPU utilizzando benchmark e metriche
  • Imparare le best practice e consigli per la programmazione GPU
  • Esplorare le tendenze attuali e future e le sfide della programmazione GPU

Riepilogo e Prossimi Passi

Requisiti

  • Comprensione del linguaggio C/C++ e dei concetti di programmazione parallela
  • Conoscenze basilari di architettura dei computer e gerarchia della memoria
  • Esperienza con strumenti da riga di comando e editor di codice

Pubblico Obiettivo

  • Sviluppatori che desiderano imparare come utilizzare diversi framework per la programmazione GPU e confrontarne le caratteristiche, le prestazioni e la compatibilità
  • Sviluppatori che desiderano scrivere codice portatile e scalabile che può essere eseguito su diverse piattaforme e dispositivi
  • Programmatori che desiderano esplorare i compromessi e le sfide della programmazione GPU e dell'ottimizzazione
 28 Ore

Numero di Partecipanti


Prezzo per Partecipante

Corsi in Arrivo

Categorie relative