Contattataci

Struttura del corso

Introduzione

  • Cosa si intende per programmazione su GPU?
  • Perché ricorrere alla programmazione su GPU?
  • Quali sono le principali difficoltà e i compromessi da considerare in questo ambito?
  • Quali sono i framework e gli strumenti attualmente disponibili per la programmazione su GPU?
  • Modalità di scelta del framework e dello strumento ottimali per la propria applicazione.

OpenCL

  • Cos’è OpenCL?
  • Quali sono i punti di forza e le limitazioni associate a OpenCL?
  • Configurazione dell’ambiente di sviluppo specifico per OpenCL.
  • Sviluppare un programma base in OpenCL che esegua l’addizione di vettori.
  • Utilizzare le API OpenCL per recuperare informazioni sul dispositivo, allocare e deallocare memoria, trasferire dati tra host e dispositivo, avviare kernel e sincronizzare i thread.
  • Scrivere kernel destinati a funzionare su GPU adoperando il linguaggio OpenCL C.
  • Adottare le funzioni, le variabili e le librerie predefinite da OpenCL al fine di ottimizzare operazioni standard.
  • Utilizzare gli spazi di memoria previsti da OpenCL – globale, locale, costante e privata – per migliorare il flusso dei dati e l’accesso alla memoria.
  • Gestire il parallelismo sfruttando modelli operativi quali work-items, work-groups e ND-ranges.
  • Rilevare errori e verificare correttamente i programmi OpenCL tramite strumenti dedicati come CodeXL.
  • Ottimizzare l’efficienza dei programmi adottando strategie quali la coalescenza, il caching, il prefetching nonché il profilaggio delle prestazioni.

CUDA

  • Cos’è CUDA?
  • Vantaggi e svantaggi principali offerti da CUDA rispetto ad altri framework.
  • Preparazione dell’ambiente di lavoro per la programmazione con CUDA.
  • Creare un primo progetto CUDA che esemplifichi l’addizione di vettori.
  • Utilizzare le API fornite da NVIDIA per recuperare dati sulle specifiche del dispositivo, allocare e liberare spazio in memoria, trasferire informazioni tra host e GPU, lanciare kernel e coordinare i thread.
  • Scrivere kernel operativi su GPU adoperando il linguaggio CUDA C/C++.
  • Impiegare le funzioni, le variabili e le librerie appositamente implementate per risolvere in modo efficiente compiti comuni.
  • Riflettere sull’impiego di differenti aree della memoria – globale, condivisa, costante e locale – al fine di aumentare la velocità d’esecuzione.
  • Gestire il parallelismo in modo rigoroso attraverso thread, blocks e grids.
  • Rilevare errori e verificare correttamente i programmi mediante strumenti come CUDA-GDB, CUDA-MEMCHECK e NVIDIA Nsight.
  • Ottimizzare l’efficienza delle applicazioni adottando strategie quali la coalescenza, il caching, il prefetching nonché il profilaggio delle prestazioni.

ROCm

  • Cos’è ROCm?
  • Vantaggi e svantaggi derivanti dall’utilizzo di ROCm nell’ambito della programmazione parallela.
  • Preparazione dell’ambiente di lavoro per l’utilizzo di ROCm.
  • Creare un primo esempio pratico in ROCm che illustri l’addizione di vettori.
  • Utilizzare le API offerte da ROCm per recuperare informazioni sul dispositivo, allocare e deallocare memoria, trasferire dati tra host e dispositivo, avviare kernel e sincronizzare i thread.
  • Scrivere kernel operativi su GPU adoperando il linguaggio ROCm C/C++.
  • Utilizzare le funzioni predefinite, le variabili e le librerie di sistema per ottimizzare compiti standard.
  • Riflettere sull’impiego di diverse aree della memoria – globale, locale, costante e privata – al fine di migliorare il flusso dei dati tra CPU e GPU.
  • Gestire il parallelismo in modo rigoroso attraverso thread, blocks e grids.
  • Rilevare errori e verificare correttamente i programmi mediante strumenti specializzati quali ROCm Debugger e ROCm Profiler.
  • Ottimizzare l’efficienza delle applicazioni adottando strategie quali la coalescenza, il caching, il prefetching nonché il profilaggio delle prestazioni.

HIP

  • Cos’è HIP?
  • Vantaggi e svantaggi principali offerti da HIP rispetto ad altri framework per la programmazione su GPU.
  • Preparazione dell’ambiente di lavoro specifico per lo sviluppo con HIP.
  • Sviluppare un esempio pratico che illustri l’addizione di vettori tramite HIP.
  • Utilizzare il linguaggio fornito da HIP per scrivere kernel destinati a funzionare sulla GPU.
  • Impiegare le funzioni predefinite, le variabili e le librerie specifiche per risolvere compiti standard in modo efficiente.
  • Riflettere sull’impiego di diverse aree della memoria – globale, condivisa, costante e locale – al fine di aumentare la velocità d’esecuzione delle applicazioni.
  • Gestire il parallelismo in modo rigoroso attraverso thread, blocks e grids.
  • Rilevare errori e verificare correttamente i programmi mediante strumenti specializzati quali ROCm Debugger e ROCm Profiler.
  • Ottimizzare l’efficienza delle applicazioni adottando strategie quali la coalescenza, il caching, il prefetching nonché il profilaggio delle prestazioni.

Confronto tra i diversi framework

  • Riflettere comparativamente su caratteristiche distintive, velocità operativa e compatibilità di OpenCL, CUDA, ROCm e HIP.
  • Valutare il comportamento effettivo dei programmi GPU attraverso benchmark standardizzati ed indicatori numerici.
  • Riconoscere le migliori prassi consolidate nel corso della programmazione su GPU.
  • Sondare le tendenze emergenti e i possibili ostacoli futuri che riguardano questo ramo del calcolo parallelo.

Riepilogo e prossimi passi

Requisiti

  • Conoscenza di base dei linguaggi C/C++ e dei concetti fondamentali della programmazione parallela
  • Nozioni elementari riguardanti l’architettura informatica e la gerarchia della memoria
  • Esperienza pratica nell’utilizzo di strumenti a riga di comando e editor di codice

Destinatari del corso

  • Sviluppatori che desiderano acquisire le nozioni fondamentali sulla programmazione su GPU e sui rispettivi framework e strumenti utilizzabili.
  • Sviluppatori interessati a creare codice portabile e scalabile in grado di funzionare su più piattaforme e dispositivi.
  • Programmatori desiderosi di comprendere appieno i vantaggi, ma anche le criticità connesse all’ottimizzazione delle applicazioni GPU.
 21 ore

Numero di Partecipanti


Prezzo per partecipante

Corsi in Arrivo

Categorie relative