Contattataci
 Durata 28 ore

Struttura del corso

Introduzione

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

Iniziare

  • Creare un nuovo progetto OpenCL utilizzando Visual Studio Code
  • Esplorare la struttura del progetto e i file
  • Compilare ed eseguire il programma
  • Visualizzare l'output utilizzando printf e fprintf

API OpenCL

  • Comprendere il ruolo dell'API OpenCL nel programma host
  • Usare l'API OpenCL per interrogare le informazioni e le capacità del dispositivo
  • Usare l'API OpenCL per creare contesti, code di comandi, buffer, kernel ed eventi
  • Usare l'API OpenCL per enqueue comandi, quali lettura, scrittura, copia, map, unmap, esecuzione e attesa
  • Usare l'API OpenCL per gestire errori ed eccezioni

OpenCL C

  • Comprendere il ruolo di OpenCL C nel programma device
  • Usare OpenCL C per scrivere kernel che si eseguono sul dispositivo e manipolano i dati
  • Usare tipi di dati, qualificatori, operatori ed espressioni di OpenCL C
  • Usare funzioni incorporate di OpenCL C, quali matematiche, geometriche, relazionali, ecc.
  • Usare estensioni e librerie di OpenCL C, quali atomic, image, cl_khr_fp16, ecc.

Modello di Memoria OpenCL

  • Comprendere la differenza tra i modelli di memoria host e device
  • Usare gli spazi di memoria OpenCL, quali global, local, constant e private
  • Usare gli oggetti di memoria OpenCL, quali buffer, immagini e pipe
  • Usare le modalità di accesso alla memoria OpenCL, quali sola lettura, sola scrittura, lettura/scrittura, ecc.
  • Usare il modello di coerenza della memoria e i meccanismi di sincronizzazione di OpenCL

Modello di Esecuzione OpenCL

  • Comprendere la differenza tra i modelli di esecuzione host e device
  • Usare work-items, work-groups e ND-ranges di OpenCL per definire il parallelismo
  • Usare le funzioni work-item di OpenCL, quali get_global_id, get_local_id, get_group_id, ecc.
  • Usare le funzioni work-group di OpenCL, quali barrier, work_group_reduce, work_group_scan, ecc.
  • Usare le funzioni device di OpenCL, quali get_num_groups, get_global_size, get_local_size, ecc.

Debug

  • Comprendere gli errori e i bug comuni nei programmi OpenCL
  • Usare il debugger di Visual Studio Code per ispezionare variabili, punti di interruzione, call stack, ecc.
  • Usare CodeXL per eseguire il debug e analizzare i programmi OpenCL su dispositivi AMD
  • Usare Intel VTune per eseguire il debug e analizzare i programmi OpenCL su dispositivi Intel
  • Usare NVIDIA Nsight per eseguire il debug e analizzare i programmi OpenCL su dispositivi NVIDIA

Ottimizzazione

  • Comprendere i fattori che influenzano le prestazioni dei programmi OpenCL
  • Usare tipi di dati vettoriali e tecniche di vettorizzazione OpenCL per migliorare la capacità di elaborazione aritmetica
  • Usare tecniche di loop unrolling e loop tiling OpenCL per ridurre l'overhead di controllo e aumentare la località
  • Usare memoria locale e funzioni di memoria locale OpenCL per ottimizzare gli accessi alla memoria e la banda passante
  • Usare profiling e strumenti di profiling OpenCL per misurare e migliorare il tempo di esecuzione e l'utilizzo delle risorse

Requisiti

  • Conoscenza del linguaggio C/C++ e dei concetti di programmazione parallela
  • Conoscenze base dell'architettura informatica e della gerarchia di memoria
  • Esperienza con strumenti a riga di comando ed editor di codice

Pubblico

  • Sviluppatori che desiderano imparare a usare OpenCL per programmare dispositivi eterogenei e sfruttarne il parallelismo
  • Sviluppatori che desiderano scrivere codice portatile e scalabile che possa essere eseguito su piattaforme e dispositivi diversi
  • Programmatore che desiderano esplorare gli aspetti a basso livello della programmazione eterogenea e ottimizzare le prestazioni del proprio codice

Numero di Partecipanti


Prezzo per partecipante

Corsi in Arrivo

Categorie relative