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.        
    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
        
        
