Thank you for sending your enquiry! One of our team members will contact you shortly.
Thank you for sending your booking! One of our team members will contact you shortly.
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