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
- Che cos'è OpenACC?
- OpenACC vs OpenCL vs CUDA vs SYCL
- Panoramica delle funzionalità e dell'architettura di OpenACC
- Impostazione dell'ambiente di sviluppo
Introduttiva
- Creazione di un nuovo progetto OpenACC utilizzando Visual Studio Code
- Esplorazione della struttura e dei file del progetto
- Compilazione ed esecuzione del programma
- Visualizzazione dell'output con printf e fprintf
Direttive e clausole OpenACC
- Comprendere il ruolo delle direttive e delle clausole OpenACC nel codice dell'host e del dispositivo
- Utilizzo della direttiva e delle clausole parallele OpenACC per creare aree parallele e specificare il numero di gang, worker e vettori
- Utilizzo della direttiva e delle clausole del kernel OpenACC per creare regioni del kernel e lasciare che sia il compilatore a decidere il parallelismo
- Utilizzo della direttiva e delle clausole del ciclo OpenACC per parallelizzare i cicli e specificare la distribuzione, la compressione, la riduzione e il riquadro del ciclo
- Utilizzo della direttiva e delle clausole dati OpenACC per gestire lo spostamento dei dati e le aree dati
- Utilizzo della direttiva e delle clausole di aggiornamento OpenACC per sincronizzare i dati tra l'host e il dispositivo
- Utilizzo della direttiva e delle clausole della cache OpenACC per migliorare il riutilizzo dei dati e la località
- Utilizzo della direttiva e delle clausole di routine OpenACC per creare funzioni del dispositivo e specificare il tipo di funzione e la lunghezza del vettore
- Utilizzo della direttiva e delle clausole di attesa OpenACC per sincronizzare eventi e dipendenze
OpenACC API
- Comprendere il ruolo dell'API OpenACC nel programma host
- Utilizzo dell'API OpenACC per interrogare le informazioni e le funzionalità del dispositivo
- Utilizzo dell'API OpenACC per impostare il numero e il tipo di dispositivo
- Utilizzo dell'API OpenACC per gestire errori ed eccezioni
- Utilizzo dell'API OpenACC per creare e sincronizzare eventi
Librerie OpenACC e interoperabilità
- Comprendere il ruolo delle librerie OpenACC e delle funzionalità di interoperabilità nel programma del dispositivo
- Utilizzo di librerie OpenACC, ad esempio matematiche, casuali e complesse, per eseguire attività e operazioni comuni
- Utilizzo delle funzionalità di interoperabilità di OpenACC, come deviceptr, use_device e acc_memcpy, per integrare OpenACC con altri modelli di programmazione, come CUDA, OpenMP e MPI
- Utilizzo delle funzionalità di interoperabilità OpenACC, come host_data e declare, per integrare OpenACC con le librerie GPU, come cuBLAS e cuFFT
Strumenti OpenACC
- Comprendere il ruolo degli strumenti OpenACC nel processo di sviluppo
- Utilizzo degli strumenti OpenACC per profilare ed eseguire il debug dei programmi OpenACC e identificare i colli di bottiglia e le opportunità delle prestazioni
- Utilizzo di strumenti OpenACC, come PGI Compiler, NVIDIA Nsight Systems e Allinea Forge, per misurare e migliorare il tempo di esecuzione e l'utilizzo delle risorse
Ottimizzazione
- Comprendere i fattori che influenzano le prestazioni dei programmi OpenACC
- Utilizzo delle direttive e delle clausole OpenACC per ottimizzare la località dei dati e ridurre i trasferimenti di dati
- Utilizzo delle direttive e delle clausole OpenACC per ottimizzare il parallelismo e la fusione dei cicli
- Utilizzo delle direttive e delle clausole OpenACC per ottimizzare il parallelismo e la fusione del kernel
- Utilizzo di direttive e clausole OpenACC per ottimizzare la vettorializzazione e l'auto-tuning
Riepilogo e prossime tappe
Requisiti
- Comprensione del linguaggio C/C++ o Fortran e dei concetti di programmazione parallela
- Conoscenza di base dell'architettura dei calcolatori e della gerarchia della memoria
- Esperienza con gli strumenti da riga di comando e gli editor di codice
Pubblico
- Sviluppatori che desiderano imparare a utilizzare OpenACC per programmare dispositivi eterogenei e sfruttarne il parallelismo
- Sviluppatori che desiderano scrivere codice portatile e scalabile che può essere eseguito su diverse piattaforme e dispositivi
- Programmatori che desiderano esplorare gli aspetti di alto livello della programmazione eterogenea e ottimizzare la produttività del codice
28 ore