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

Numero di Partecipanti



Prezzo per Partecipante

Recensioni (1)

Corsi relativi

GPU Programming with CUDA

28 ore

GPU Programming - OpenCL vs CUDA vs ROCm

28 ore

AMD GPU Programming

28 ore

ROCm for Windows

21 ore

Categorie relative