Contattataci

Struttura del corso

Introduzione

  • Cos’è OpenCL?
  • OpenCL vs CUDA vs SYCL
  • Panoramica sulle funzionalità e sull’architettura di OpenCL
  • Configurazione dell’ambiente di sviluppo

Primi passi

  • Creazione di un nuovo progetto OpenCL con Visual Studio Code
  • Analisi della struttura del progetto e dei file contenuti
  • Compilazione ed esecuzione del programma
  • Visualizzazione dell’output tramite printf e fprintf

API OpenCL

  • Comprensione del ruolo dell’API OpenCL all’interno del programma host
  • Utilizzo dell’API per ottenere informazioni e capacità dei dispositivi
  • Creazione di contesti, code di comando, buffer, kernel ed eventi tramite l’API OpenCL
  • Inserimento in coda di comandi quali lettura, scrittura, copia, mappatura, smappatura, esecuzione e attesa mediante l’API
  • Gestione degli errori ed eccezioni tramite le funzionalità fornite dall’API

Linguaggio OpenCL C

  • Ruolo del linguaggio OpenCL C nel contesto dei programmi eseguiti sui dispositivi
  • Scrivere kernel in OpenCL C che operino sul dispositivo e manipolino i dati
  • Utilizzo dei tipi di dati, qualificatori, operatori ed espressioni previsti da OpenCL C
  • Impiego delle funzioni integrate di OpenCL C, come quelle matematiche e relazionali
  • Integrazione di estensioni e librerie come atomic, image e cl_khr_fp16 all’interno del codice OpenCL C

Modello di memoria in OpenCL

  • Differenze tra i modelli di memoria host e dispositivo
  • Utilizzo degli spazi di memorizzazione forniti da OpenCL, come global, local, constant e private
  • Lavorare con oggetti di memoria quali buffer, immagini e pipe
  • Impostazione delle modalità di accesso alla memoria: solo lettura, solo scrittura, lettura-scrittura, ecc.
  • Gestione del modello di coerenza della memoria e dei meccanismi di sincronizzazione previsti da OpenCL

Modello esecutivo in OpenCL

  • Distinzioni tra modelli esecutivi host e dispositivo
  • Definizione del parallelismo tramite elementi di lavoro, gruppi di lavoro ed intervalli ND
  • Impiego delle funzioni dedicate agli elementi e ai gruppi di lavoro, come get_global_id, get_local_id, get_group_id, ecc.
  • Utilizzo di funzioni specifiche per i dispositivi, quali get_num_groups, get_global_size e get_local_size
  • Uso delle funzioni di gruppo lavoro come barrier, work_group_reduce e work_group_scan

Debugging

  • Riconoscimento degli errori e dei bug più comuni nei programmi OpenCL
  • Ispezione delle variabili, impostazione di punti di interruzione e analisi dello stack di chiamata tramite il debugger di Visual Studio Code
  • Utilizzo di CodeXL per eseguire debug e analisi dei programmi OpenCL su dispositivi AMD
  • Analisi approfondita dei programmi OpenCL tramite Intel VTune, strumento dedicato ai dispositivi Intel
  • Debug e analisi di programmi OpenCL sui sistemi dotati di hardware NVIDIA grazie a NVIDIA Nsight

Ottimizzazione

  • Identificazione dei fattori che influenzano le prestazioni dei programmi OpenCL
  • Sfruttare i tipi di dati vettoriali e le tecniche di vettorizzazione per aumentare la velocità di elaborazione aritmetica
  • Ridurre l’overhead legato al controllo dei cicli ricorrendo allo srotolamento e alla suddivisione in blocchi dello stesso
  • Ottimizzare gli accessi alla memoria e la larghezza di banda utilizzando la memoria locale prevista da OpenCL
  • Analisi approfondita delle prestazioni del programma tramite strumenti specifici per profilare il codice ed evidenziarne i colli di bottiglia

Conclusione e prossimi passi

Requisiti

  • Buona padronanza del linguaggio C/C++ e dei concetti fondamentali della programmazione parallela
  • Conoscenza di base dell’architettura dei computer e della gerarchia della memoria
  • Esperienza nell’utilizzo di strumenti a riga di comando e editor di codice

Destinatari del corso

  • Sviluppatori intenzionati ad apprendere l’utilizzo di OpenCL per programmare dispositivi eterogenei e sfruttarne il parallelismo
  • Sviluppatori desiderosi di creare codice portabile e scalabile in grado di funzionare su molteplici piattaforme e dispositivi
  • Programmatori interessati a esplorare gli aspetti più avanzati della programmazione eterogenea e ad ottimizzarne le prestazioni del codice
 28 ore

Numero di Partecipanti


Prezzo per partecipante

Corsi in Arrivo

Categorie relative