Struttura del corso

Introduzione

  • Cos'è OpenCL?
  • OpenCL vs CUDA vs SYCL
  • Panoramica sulle caratteristiche e sull'architettura di OpenCL
  • Configurazione dell'Ambiente di Sviluppo

Inizio Pratico

  • Creare un nuovo progetto OpenCL usando Visual Studio Code
  • Esplorazione della struttura e dei file del progetto
  • Compilare ed eseguire il programma
  • Visualizzare l'output utilizzando printf e fprintf

API OpenCL

  • Comprendere il ruolo dell'API OpenCL nel programma host
  • Utilizzare l'API OpenCL per ottenere informazioni e capacità del dispositivo
  • Utilizzare l'API OpenCL per creare contesti, code di comandi, buffer, kernel e eventi
  • Utilizzare l'API OpenCL per inserire comandi come lettura, scrittura, copia, mapping, unmapping, esecuzione e attesa
  • Utilizzare l'API OpenCL per gestire errori e eccezioni

C OpenCL

  • Comprendere il ruolo di OpenCL C nel programma del dispositivo
  • Utilizzare OpenCL C per scrivere kernel che eseguono sul dispositivo e manipolano i dati
  • Utilizzare tipi, qualificatori, operatori ed espressioni di OpenCL C
  • Utilizzare funzioni predefinite di OpenCL C come quelle matematiche, geometriche, relazionali ecc.
  • Utilizzare estensioni e librerie di OpenCL C come atomico, immagine, cl_khr_fp16 ecc.

Modello Memoria OpenCL

  • Comprendere la differenza tra il modello di memoria host e dispositivo
  • Utilizzare spazi di memoria di OpenCL come globali, locali, costanti e privati
  • Utilizzare oggetti di memoria di OpenCL come buffer, immagini e pipe
  • Utilizzare modalità di accesso alla memoria di OpenCL come solo lettura, solo scrittura, lettura/scrivi ecc.
  • Utilizzare il modello di coerenza della memoria di OpenCL e meccanismi di sincronizzazione

Modello Esecuzione OpenCL

  • Comprendere la differenza tra i modelli di esecuzione host e dispositivo
  • Utilizzare unità di lavoro, gruppi di lavoro e ND-ranges per definire la parallelizzazione
  • Utilizzare funzioni di unità di lavoro come get_global_id, get_local_id, get_group_id ecc.
  • Utilizzare funzioni di gruppo di lavoro come barrier, work_group_reduce, work_group_scan ecc.
  • Utilizzare funzioni del dispositivo come get_num_groups, get_global_size, get_local_size ecc.

Debugging

  • Comprendere gli errori e i bug comuni nei programmi OpenCL
  • Utilizzare il debugger di Visual Studio Code per esaminare variabili, punti di interruzione, stack delle chiamate ecc.
  • Utilizzare CodeXL per debuggare e analizzare programmi OpenCL sui dispositivi AMD
  • Utilizzare Intel VTune per debuggare e analizzare programmi OpenCL sui dispositivi Intel
  • Utilizzare NVIDIA Nsight per debuggare e analizzare programmi OpenCL sui dispositivi NVIDIA

Ottimizzazione

  • Comprendere i fattori che influenzano le prestazioni dei programmi OpenCL
  • Utilizzare tipi di dati vettoriali e tecniche di vettorizzazione per migliorare la throughput aritmetico
  • Utilizzare tecniche di espansione del ciclo e suddivisione del ciclo per ridurre il sovraccarico di controllo ed aumentare la località
  • Utilizzare memoria locale e funzioni di memoria locale per ottimizzare gli accessi alla memoria e la larghezza di banda
  • Utilizzare strumenti di profilatura per misurare e migliorare il tempo di esecuzione e l'utilizzo delle risorse

Riepilogo ed Eseguire Passaggi Successivi

Requisiti

  • Comprendere il linguaggio C/C++ e i concetti di programmazione parallela
  • Conoscenza base dell'architettura del computer e della gerarchia della memoria
  • Esperienza con strumenti a riga di comando e editor di codice

Target

  • Sviluppatori che desiderano imparare come utilizzare OpenCL per programmare dispositivi eterogenei ed exploitare la loro parallelizzazione
  • Sviluppatori che desiderano scrivere codice portabile e scalabile in grado di funzionare su diverse piattaforme e dispositivi
  • Programmatore che desiderano esplorare gli aspetti a basso livello della programmazione eterogenea ed ottimizzare le prestazioni del codice
 28 ore

Numero di Partecipanti


Prezzo per Partecipante

Corsi in Arrivo

Categorie relative