Struttura del corso

Introduzione

  • Che cos'è OpenCL?
  • OpenCL contro CUDA contro SYCL
  • Panoramica delle funzionalità e dell'architettura di OpenCL
  • Impostazione dell'ambiente di sviluppo

Introduttiva

  • Creazione di un nuovo progetto OpenCL utilizzando il codice Visual Studio
  • Esplorazione della struttura e dei file del progetto
  • Compilazione ed esecuzione del programma
  • Visualizzazione dell'output con printf e fprintf

OpenCL API

  • Informazioni sul ruolo dell'API OpenCL nel programma host
  • Utilizzo dell'API OpenCL per eseguire query sulle informazioni e sulle funzionalità del dispositivo
  • Utilizzo dell'API OpenCL per creare contesti, code di comandi, buffer, kernel ed eventi
  • Utilizzo dell'API OpenCL per accodare i comandi, ad esempio lettura, scrittura, copia, mappatura, annullamento mappatura, esecuzione e attesa
  • Utilizzo dell'API OpenCL per gestire errori ed eccezioni

OpenCL C

  • Comprendere il ruolo di OpenCL C nel programma del dispositivo
  • Utilizzo di OpenCL C per scrivere kernel che vengono eseguiti sul dispositivo e manipolano i dati
  • Utilizzo di OpenCL tipi di dati, qualificatori, operatori ed espressioni C
  • Utilizzo di OpenCL funzioni integrate in C, come matematica, geometrica, relazionale, ecc.
  • Utilizzo di OpenCL estensioni e librerie C, come atomic, image, cl_khr_fp16, ecc.

OpenCL Modello di memoria

  • Comprendere la differenza tra i modelli di memoria host e dispositivo
  • Utilizzo di OpenCL spazi di memoria, ad esempio globale, locale, costante e privato
  • Utilizzo di oggetti di memoria OpenCL, ad esempio buffer, immagini e pipe
  • Utilizzo delle modalità di accesso alla memoria OpenCL, ad esempio sola lettura, sola scrittura, lettura/scrittura, ecc.
  • Uso del modello di coerenza della memoria OpenCL e dei meccanismi di sincronizzazione

OpenCL Modello di esecuzione

  • Comprendere la differenza tra i modelli di esecuzione host e dispositivo
  • Utilizzo di OpenCL elementi di lavoro, gruppi di lavoro e intervalli ND per definire il parallelismo
  • Utilizzo di OpenCL funzioni elemento di lavoro, ad esempio get_global_id, get_local_id, get_group_id e così via.
  • Utilizzo di OpenCL funzioni per gruppi di lavoro, come barriera, work_group_reduce, work_group_scan, ecc.
  • Utilizzo di OpenCL funzioni del dispositivo, come get_num_groups, get_global_size, get_local_size, ecc.

Debug

  • Comprendere gli errori e i bug più comuni nei programmi OpenCL
  • Utilizzo di Visual Studio Debugger di codice per ispezionare variabili, punti di interruzione, stack di chiamate e così via.
  • Utilizzo di CodeXL per eseguire il debug e l'analisi di OpenCL programmi su dispositivi AMD
  • Utilizzo di Intel VTune per eseguire il debug e l'analisi di OpenCL programmi su dispositivi Intel
  • Uso di NVIDIA Nsight per eseguire il debug e l'analisi di OpenCL programmi su dispositivi NVIDIA

Ottimizzazione

  • Comprendere i fattori che influenzano le prestazioni dei programmi OpenCL
  • Utilizzo di OpenCL tipi di dati vettoriali e tecniche di vettorizzazione per migliorare la velocità effettiva aritmetica
  • Utilizzo di tecniche di srotolamento e affiancamento di loop OpenCL per ridurre il sovraccarico di controllo e aumentare la località
  • Utilizzo della memoria locale OpenCL e delle funzioni di memoria locale per ottimizzare gli accessi alla memoria e la larghezza di banda
  • Utilizzo di OpenCL strumenti di profilatura e profilatura per misurare e migliorare il tempo di esecuzione e l'utilizzo delle risorse

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 ad usare OpenCL per programmare dispositivi eterogenei e sfruttarne il parallelismo
  • Sviluppatori che desiderano scrivere codice portatile e scalabile che può essere eseguito su diverse piattaforme e dispositivi
  • Programmatori che desiderano esplorare gli aspetti di basso livello della programmazione eterogenea e ottimizzare le prestazioni del codice
 28 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