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 per la programmazione GPU?
  • Scelta del framework giusto 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

Paragone

  • Confronto tra le caratteristiche, le prestazioni e la compatibilità di OpenCL, CUDA e ROCm
  • 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 prossime tappe

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 imparare a utilizzare diversi framework per la programmazione GPU e confrontarne le funzionalità, 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 e dell'ottimizzazione GPU
 28 ore

Numero di Partecipanti



Prezzo per Partecipante

Recensioni (1)

Corsi relativi

GPU Programming with CUDA

28 ore

AMD GPU Programming

28 ore

ROCm for Windows

21 ore

Categorie relative