Thank you for sending your enquiry! One of our team members will contact you shortly.
Thank you for sending your booking! One of our team members will contact you shortly.
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