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é usare la programmazione GPU?
- Quali sono le sfide e i compromessi della programmazione GPU?
- Quali sono i framework per la programmazione GPU?
- Scegliere il framework giusto 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 OpenCL di base che esegue l'addizione vettoriale
- Utilizzare le API di OpenCL per query informazioni sul dispositivo, allocare e deallocare memoria del dispositivo, copiare dati tra host e dispositivo, lanciare kernel e sincronizzare thread
- Utilizzare il linguaggio C di OpenCL per scrivere kernel che si eseguono sul dispositivo e manipolano i dati
- Utilizzare le funzioni, variabili e librerie integrate di OpenCL per eseguire attività e operazioni comuni
- Utilizzare gli spazi di memoria di OpenCL, come globale, locale, costante e privato, per ottimizzare i trasferimenti di dati e le accessi alla memoria
- Utilizzare il modello di esecuzione di OpenCL per controllare i work-items, i work-groups e gli ND-ranges che definiscono il parallelismo
- Debuggare e testare programmi OpenCL utilizzando strumenti come CodeXL
- Ottimizzare i programmi OpenCL utilizzando tecniche come la coalescenza, il caching, il prefetching e il profiling
CUDA
- Cos'è CUDA?
- Quali sono i vantaggi e gli svantaggi di CUDA?
- Configurare l'ambiente di sviluppo per CUDA
- Creare un programma CUDA di base che esegue l'addizione vettoriale
- Utilizzare le API di CUDA per query informazioni sul dispositivo, allocare e deallocare memoria del dispositivo, copiare dati tra host e dispositivo, lanciare kernel e sincronizzare thread
- Utilizzare il linguaggio C/C++ di CUDA per scrivere kernel che si eseguono sul dispositivo e manipolano i dati
- Utilizzare le funzioni, variabili e librerie integrate di CUDA per eseguire attività e operazioni comuni
- Utilizzare gli spazi di memoria di CUDA, come globale, shared, costante e locale, per ottimizzare i trasferimenti di dati e le accessi alla memoria
- Utilizzare il modello di esecuzione di CUDA per controllare i thread, i blocchi e le griglie che definiscono il parallelismo
- Debuggare e testare programmi CUDA utilizzando strumenti come CUDA-GDB, CUDA-MEMCHECK e NVIDIA Nsight
- Ottimizzare i programmi CUDA utilizzando tecniche come la coalescenza, il caching, il prefetching e il profiling
ROCm
- Cos'è ROCm?
- Quali sono i vantaggi e gli svantaggi di ROCm?
- Configurare l'ambiente di sviluppo per ROCm
- Creare un programma ROCm di base che esegue l'addizione vettoriale
- Utilizzare le API di ROCm per query informazioni sul dispositivo, allocare e deallocare memoria del dispositivo, copiare dati tra host e dispositivo, lanciare kernel e sincronizzare thread
- Utilizzare il linguaggio C/C++ di ROCm per scrivere kernel che si eseguono sul dispositivo e manipolano i dati
- Utilizzare le funzioni, variabili e librerie integrate di ROCm per eseguire attività e operazioni comuni
- Utilizzare gli spazi di memoria di ROCm, come globale, locale, costante e privato, per ottimizzare i trasferimenti di dati e le accessi alla memoria
- Utilizzare il modello di esecuzione di ROCm per controllare i thread, i blocchi e le griglie che definiscono il parallelismo
- Debuggare e testare programmi ROCm utilizzando strumenti come ROCm Debugger e ROCm Profiler
- Ottimizzare i programmi ROCm utilizzando tecniche come la coalescenza, il caching, il prefetching e il profiling
Confronto
- Confrontare le caratteristiche, le prestazioni e la compatibilità di OpenCL, CUDA e ROCm
- Valutare i programmi GPU utilizzando benchmark e metriche
- Imparare le best practice e consigli per la programmazione GPU
- Esplorare le tendenze attuali e future e le sfide della programmazione GPU
Riepilogo e Prossimi Passi
Requisiti
- Comprensione del linguaggio C/C++ e dei concetti di programmazione parallela
- Conoscenze basilari di architettura dei computer e gerarchia della memoria
- Esperienza con strumenti da riga di comando e editor di codice
Pubblico Obiettivo
- Sviluppatori che desiderano imparare come utilizzare diversi framework per la programmazione GPU e confrontarne le caratteristiche, le prestazioni e la compatibilità
- Sviluppatori che desiderano scrivere codice portatile e scalabile che può essere eseguito su diverse piattaforme e dispositivi
- Programmatori che desiderano esplorare i compromessi e le sfide della programmazione GPU e dell'ottimizzazione
28 Ore