Contattataci

Struttura del corso

Introduzione

  • Che cos’è la programmazione su GPU?
  • Perché optare per la programmazione su GPU?
  • Quali sono le principali problematiche e i compromessi nella programmazione su GPU?
  • Quali sono i framework disponibili per la programmazione su GPU?
  • Come scegliere il framework più adatto alla propria applicazione

OpenCL

  • Cos’è OpenCL?
  • Quali sono i vantaggi e gli svantaggi di OpenCL?
  • Configurazione dell'ambiente di sviluppo per OpenCL
  • Creazione di un programma base in grado di eseguire l'addizione vettoriale con OpenCL
  • Utilizzo dell’API OpenCL per interrogare il dispositivo, allocare e liberare memoria, trasferire dati tra host e device, avviare i kernel e sincronizzare i thread
  • Scrivere in modo corretto i kernel utilizzando il linguaggio OpenCL C per elaborare i dati sul dispositivo
  • Utilizzo delle funzioni, variabili e librerie predefinite di OpenCL per svolgere le operazioni più comuni
  • Impiego degli spazi di memoria (globale, locale, costante, privato) al fine di ottimizzare il trasferimento e l’accesso ai dati in memoria
  • Controllo del parallelismo tramite i modelli di esecuzione di OpenCL, basati su elementi di lavoro, gruppi di lavoro e intervalli multidimensionali
  • Esecuzione di operazioni di debug e test sui programmi tramite strumenti come CodeXL
  • Tecniche per ottimizzare i programmi scritti in OpenCL: coesione dei dati, caching, prefetching e analisi delle prestazioni

CUDA

  • Cos’è CUDA?
  • Quali sono i punti di forza e le limitazioni legati a CUDA?
  • Configurazione dell'ambiente di sviluppo per CUDA
  • Sviluppo di un programma base in grado di eseguire l'addizione vettoriale utilizzando CUDA
  • Impiego dell’API CUDA per interrogare il dispositivo, allocare e liberare memoria, trasferire dati tra host e device, avviare i kernel e sincronizzare i thread
  • Scrivere in modo corretto i kernel mediante il linguaggio C/C++ per CUDA, necessario all’elaborazione dei dati sul dispositivo
  • Utilizzo delle funzioni, variabili e librerie predefinite di CUDA per svolgere operazioni comuni nella programmazione su GPU
  • Impiego dei diversi spazi di memoria (globale, condiviso, costante, locale) al fine di ottimizzare il trasferimento e l’accesso ai dati in memoria
  • Controllo del parallelismo mediante i modelli di esecuzione tipici di CUDA: thread, blocchi e griglie di elaborazione
  • Esecuzione di operazioni di debug e test tramite strumenti come CUDA-GDB, CUDA-MEMCHECK e NVIDIA Nsight
  • Tecniche per ottimizzare i programmi scritti in CUDA: coesione dei dati, caching, prefetching e analisi delle prestazioni

ROCm

  • Cos’è ROCm?
  • Quali sono i vantaggi e gli svantaggi legati all'utilizzo di ROCm?
  • Configurazione dell'ambiente di sviluppo per ROCm
  • Creazione di un programma base in grado di eseguire l'addizione vettoriale con ROCm
  • Utilizzo dell’API ROCm per interrogare il dispositivo, allocare e liberare memoria, trasferire dati tra host e device, avviare i kernel e sincronizzare i thread
  • Scrivere in modo corretto i kernel mediante il linguaggio C/C++ per ROCm, indispensabile all’elaborazione dei dati sul dispositivo
  • Utilizzo delle funzioni, variabili e librerie predefinite di ROCm per svolgere operazioni comuni nella programmazione su GPU
  • Impiego degli spazi di memoria (globale, locale, costante, privato) al fine di ottimizzare il trasferimento e l’accesso ai dati in memoria
  • Controllo del parallelismo tramite i modelli di esecuzione tipici di ROCm: thread, blocchi e griglie di elaborazione
  • Esecuzione di operazioni di debug e test sui programmi con strumenti specifici come il debugger ROCm o lo strumento ROCm Profiler
  • Tecniche per ottimizzare i programmi scritti in ROCm: coesione dei dati, caching, prefetching e analisi delle prestazioni

Confronto tra i framework

  • Valutazione comparativa di OpenCL, CUDA e ROCm in termini di caratteristiche, rendimento e compatibilità
  • Analisi delle prestazioni dei programmi sviluppati tramite benchmark e metriche specifiche
  • Scoperta delle migliori pratiche, consigli utili e trucchi per una corretta programmazione su GPU
  • Esplorazione delle tendenze attuali e future riguardanti la programmazione e l’ottimizzazione su GPU

Conclusioni e prossimi passi

Requisiti

  • Conoscenza dei linguaggi C/C++ e delle nozioni fondamentali sulla programmazione parallela
  • Nozioni di base sull'architettura dei computer e sulla gerarchia della memoria
  • Esperienza nell’utilizzo di strumenti a riga di comando e editor di codice

Destinatari del corso

  • Sviluppatori che desiderano imparare ad utilizzare diversi framework per la programmazione su GPU e confrontarne le caratteristiche, le prestazioni e la compatibilità
  • Programmatori interessati a sviluppare codice portabile ed scalabile in grado di funzionare su molteplici piattaforme e dispositivi
  • Professionisti del settore che intendono approfondire i vantaggi, gli svantaggi nonché le problematiche connesse alla programmazione e all'ottimizzazione su GPU
 28 ore

Numero di Partecipanti


Prezzo per partecipante

Corsi in Arrivo

Categorie relative