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
- Che cos'è la programmazione GPU?
- Perché usare la programmazione GPU?
- Quali sono le sfide e i compromessi della programmazione GPU?
- Quali sono i framework e gli strumenti per GPU la programmazione?
- Scelta del framework e dello strumento giusti per l'applicazione
OpenCL
- Che cos'è OpenCL?
- Quali sono i vantaggi e gli svantaggi di OpenCL?
- Impostazione dell'ambiente di sviluppo per OpenCL
- Creazione di un programma di base OpenCL che esegua l'addizione vettoriale
- Utilizzo dell'API OpenCL per interrogare le informazioni sul dispositivo, allocare e deallocare la memoria del dispositivo, copiare i dati tra host e dispositivo, avviare i kernel e sincronizzare i thread
- Utilizzo del linguaggio OpenCL C per scrivere kernel che vengono eseguiti sul dispositivo e manipolano i dati
- Utilizzo di OpenCL funzioni, variabili e librerie integrate per eseguire attività e operazioni comuni
- Utilizzo di OpenCL spazi di memoria, come globale, locale, costante e privato, per ottimizzare i trasferimenti di dati e gli accessi alla memoria
- Utilizzo del modello di esecuzione OpenCL per controllare gli elementi di lavoro, i gruppi di lavoro e gli intervalli ND che definiscono il parallelismo
- Debug e test OpenCL di programmi utilizzando strumenti come CodeXL
- Ottimizzazione OpenCL dei programmi utilizzando tecniche quali la coalescenza, il caching, il prefetching e il profiling
CUDA
- Che cos'è CUDA?
- Quali sono i vantaggi e gli svantaggi di CUDA?
- Configurazione dell'ambiente di sviluppo per CUDA
- Creazione di un programma CUDA di base che esegue l'addizione vettoriale
- Utilizzo dell'API CUDA per interrogare le informazioni sul dispositivo, allocare e deallocare la memoria del dispositivo, copiare i dati tra host e dispositivo, avviare kernel e sincronizzare i thread
- Utilizzo del linguaggio CUDA C/C++ per scrivere kernel che vengono eseguiti sul dispositivo e manipolano i dati
- Utilizzo di funzioni, variabili e librerie predefinite di CUDA per eseguire attività e operazioni comuni
- Utilizzo degli spazi di memoria CUDA, ad esempio globale, condiviso, costante e locale, per ottimizzare i trasferimenti di dati e gli accessi alla memoria
- Utilizzo del modello di esecuzione CUDA per controllare i thread, i blocchi e le griglie che definiscono il parallelismo
- Debug e test di programmi CUDA utilizzando strumenti quali CUDA-GDB, CUDA-MEMCHECK e NVIDIA Nsight
- Ottimizzazione dei programmi CUDA utilizzando tecniche quali l'unione dei dati, la memorizzazione nella cache, il prefetching e la profilatura
ROCm
- Che cos'è ROCm?
- Quali sono i vantaggi e gli svantaggi del ROCm?
- Impostazione dell'ambiente di sviluppo per ROCm
- Creazione di un programma ROCm di base che esegue l'addizione vettoriale
- Utilizzo dell'API ROCm per interrogare le informazioni sul dispositivo, allocare e deallocare la memoria del dispositivo, copiare i dati tra host e dispositivo, avviare kernel e sincronizzare i thread
- Utilizzo del linguaggio ROCm C/C++ per scrivere kernel che vengono eseguiti sul dispositivo e manipolano i dati
- Utilizzo di funzioni, variabili e librerie predefinite di ROCm per eseguire attività e operazioni comuni
- Utilizzo degli spazi di memoria ROCm, ad esempio globale, locale, costante e privato, per ottimizzare i trasferimenti di dati e gli accessi alla memoria
- Utilizzo del modello di esecuzione ROCm per controllare i thread, i blocchi e le griglie che definiscono il parallelismo
- Debug e test di programmi ROCm utilizzando strumenti come ROCm Debugger e ROCm Profiler
- Ottimizzazione dei programmi ROCm utilizzando tecniche quali l'unione dei dati, la memorizzazione nella cache, il prefetching e la profilazione
ANCA
- Che cos'è l'HIP?
- Quali sono i vantaggi e gli svantaggi dell'HIP?
- Impostazione dell'ambiente di sviluppo per HIP
- Creazione di un programma HIP di base che esegue l'addizione vettoriale
- Utilizzo del linguaggio HIP per scrivere kernel che vengono eseguiti sul dispositivo e manipolano i dati
- Utilizzo di funzioni, variabili e librerie predefinite HIP per eseguire attività e operazioni comuni
- Utilizzo degli spazi di memoria HIP, ad esempio globale, condiviso, costante e locale, per ottimizzare i trasferimenti di dati e gli accessi alla memoria
- Utilizzo del modello di esecuzione HIP per controllare i thread, i blocchi e le griglie che definiscono il parallelismo
- Debug e test di programmi HIP utilizzando strumenti come ROCm Debugger e ROCm Profiler
- Ottimizzazione dei programmi HIP mediante tecniche quali l'unione dei dati, la memorizzazione nella cache, la prelettura e la profilatura
Paragone
- Confronto tra le caratteristiche, le prestazioni e la compatibilità di OpenCL, CUDA, ROCm e HIP
- Valutazione GPU dei programmi utilizzando benchmark e metriche
- Imparare le best practice e i suggerimenti per GPU la programmazione
- Esplorare le tendenze e le sfide attuali e future della programmazione GPU
Riepilogo e passo successivo
Requisiti
- Comprensione del linguaggio C/C++ e dei concetti di programmazione parallela
- Conoscenza di base dell'architettura dei calcolatori e della gerarchia della memoria
- Esperienza con gli strumenti da riga di comando e gli editor di codice
Pubblico
- Sviluppatori che desiderano apprendere le basi della programmazione GPU e i principali framework e strumenti per lo sviluppo di GPU applicazioni
- Sviluppatori che desiderano scrivere codice portatile e scalabile che può essere eseguito su diverse piattaforme e dispositivi
- Programmatori che desiderano esplorare i vantaggi e le sfide della programmazione e dell'ottimizzazione GPU
21 ore