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
- 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