Grazie per aver inviato la tua richiesta! Uno dei nostri team membri ti contatterà a breve.
Grazie per aver inviato il tuo prenotazione! Uno dei nostri team membri ti contatterà a breve.
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