Struttura del corso

Introduzione

  • Cos'è la programmazione GPU?
  • Perché utilizzare la programmazione GPU?
  • Quali sono i problemi e i compromessi della programmazione GPU?
  • Quali sono i framework per la programmazione GPU?
  • Scegliere il giusto framework 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 base OpenCL che esegue l'addizione vettoriale
  • Utilizzare l'API OpenCL per interrogare le informazioni del dispositivo, allocare e deallocare la memoria del dispositivo, copiare i dati tra host e dispositivo, lanciare nuclei (kernels) e sincronizzare i thread
  • Scrivere nuclei con il linguaggio C/OpenCL che eseguono sul dispositivo e manipolano i dati
  • Utilizzare le funzioni, le variabili e le librerie integrate di OpenCL per eseguire operazioni comuni
  • Utilizzare gli spazi di memoria OpenCL, come globali, locali, costanti e privati, per ottimizzare i trasferimenti dei dati ed l'accesso alla memoria
  • Utilizzare il modello di esecuzione OpenCL per controllare gli elementi di lavoro (work-items), i gruppi di lavoro (work-groups) e le ND-ranges che definiscono la parallelizzazione
  • Debuggare ed eseguire test sui programmi OpenCL utilizzando strumenti come CodeXL
  • Ottimizzare i programmi OpenCL utilizzando tecniche di coalizzione, caching, prefetching e profilatura

CUDA

  • Cos'è CUDA?
  • Quali sono i vantaggi e gli svantaggi di CUDA?
  • Configurare l'ambiente di sviluppo per CUDA
  • Creare un programma base CUDA che esegue l'addizione vettoriale
  • Utilizzare l'API CUDA per interrogare le informazioni del dispositivo, allocare e deallocare la memoria del dispositivo, copiare i dati tra host e dispositivo, lanciare nuclei (kernels) e sincronizzare i thread
  • Scrivere nuclei con il linguaggio C/C++ che eseguono sul dispositivo e manipolano i dati
  • Utilizzare le funzioni, le variabili e le librerie integrate di CUDA per eseguire operazioni comuni
  • Utilizzare gli spazi di memoria CUDA, come globali, condivisi, costanti e locali, per ottimizzare i trasferimenti dei dati ed l'accesso alla memoria
  • Utilizzare il modello di esecuzione CUDA per controllare i thread, i blocchi e le griglie che definiscono la parallelizzazione
  • Debuggare ed eseguire test sui programmi CUDA utilizzando strumenti come CUDA-GDB, CUDA-MEMCHECK e NVIDIA Nsight
  • Ottimizzare i programmi CUDA utilizzando tecniche di coalizzione, caching, prefetching e profilatura

ROCm

  • Cos'è ROCm?
  • Quali sono i vantaggi e gli svantaggi di ROCm?
  • Configurare l'ambiente di sviluppo per ROCm
  • Creare un programma base ROCm che esegue l'addizione vettoriale
  • Utilizzare l'API ROCm per interrogare le informazioni del dispositivo, allocare e deallocare la memoria del dispositivo, copiare i dati tra host e dispositivo, lanciare nuclei (kernels) e sincronizzare i thread
  • Scrivere nuclei con il linguaggio C/C++ che eseguono sul dispositivo e manipolano i dati
  • Utilizzare le funzioni, le variabili e le librerie integrate di ROCm per eseguire operazioni comuni
  • Utilizzare gli spazi di memoria ROCm, come globali, locali, costanti e privati, per ottimizzare i trasferimenti dei dati ed l'accesso alla memoria
  • Utilizzare il modello di esecuzione ROCm per controllare i thread, i blocchi e le griglie che definiscono la parallelizzazione
  • Debuggare ed eseguire test sui programmi ROCm utilizzando strumenti come ROCm Debugger e ROCm Profiler
  • Ottimizzare i programmi ROCm utilizzando tecniche di coalizzione, caching, prefetching e profilatura

Confronto

  • Confrontare le caratteristiche, le prestazioni ed il compatibilità tra OpenCL, CUDA e ROCm
  • Valutare i programmi GPU utilizzando benchmark e metriche
  • Imparare le migliori pratiche e consigli per la programmazione GPU
  • Esplorare le tendenze e sfide attuali ed future della programmazione GPU

Riepilogo e prossimi passi

Requisiti

  • Comprendere il linguaggio C/C++ e i concetti della programmazione parallela
  • Conoscenze di base sull'architettura del computer e sulla gerarchia della memoria
  • Esperienza con strumenti a riga di comando e editor di codice

Pubblico Obiettivo

  • Sviluppatori che desiderano imparare come utilizzare differenti framework per la GPU programmazione e confrontarne le caratteristiche, prestazioni e compatibilità
  • Sviluppatori che desiderano scrivere codice portabile ed estensibile in grado di eseguirsi su diversi sistemi operativi e dispositivi
  • Programmatori interessati a esplorare i compromessi e le sfide della GPU programmazione e dell'ottimizzazione
 28 ore

Numero di Partecipanti


Prezzo per Partecipante

Corsi in Arrivo

Categorie relative