Grazie per aver inviato la tua richiesta! Uno dei nostri team membri ti contatterà a breve.
Grazie per aver inviato il tuo prenotazione! Uno dei nostri team membri ti contatterà a breve.
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