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
- Cos’è OpenACC?
- OpenACC rispetto a OpenCL, CUDA e SYCL
- Panoramica delle caratteristiche e dell’architettura di OpenACC
- Configurazione dell’ambiente di sviluppo
Primi passi
- Creazione di un progetto OpenACC in Visual Studio Code
- Analisi della struttura e dei file del progetto
- Compilazione ed esecuzione del programma
- Visualizzazione dei risultati mediante printf e fprintf
Direttive e clausole di OpenACC
- Comprensione delle direttive e delle clausole previste da OpenACC
- Utilizzo delle direttive parallele per creare aree di esecuzione concorrente
- Adozione delle direttive kernel affinché il compilatore gestisca autonomamente il parallelismo
- Sfruttamento delle direttive ciclo per rendere i loop eseguibili in parallelo
- Gestione dei trasferimenti di dati grazie alle direttive dedicate
- Sincronizzazione dei dati mediante le direttive update
- Massimizzazione del riutilizzo dei dati tramite le direttive legate alla cache
- Realizzazione di funzioni specifiche per dispositivo grazie alle direttive routine
- Sincronizzazione degli eventi tramite le direttive wait
API di OpenACC
- Ruolo svolto dall’API di OpenACC nel contesto dello sviluppo
- Ottenimento informazioni sui dispositivi e sulle loro capacità
- Impostazione del numero e del tipo di dispositivo da utilizzare
- Gestione degli errori e delle eccezioni emerse durante l’esecuzione
- Creazione e sincronizzazione di eventi specifici
Librerie e interoperabilità di OpenACC
- Nozioni fondamentali sulle librerie proposte da OpenACC nonché sulla loro interoperabilità
- Impiego delle librerie matematiche, per la generazione casuale di dati e quelle relative ai numeri complessi
- Integrazione con altri modelli di sviluppo quali CUDA, OpenMP e MPI
- Integrazione con le librerie specifiche per GPU, come ad esempio cuBLAS e cuFFT
Strumenti di supporto per OpenACC
- Nozioni generali sugli strumenti a disposizione per lo sviluppo in ambiente OpenACC
- Funzionalità legate alla profilatura e al debug dei programmi prodotti
- Analisi delle prestazioni mediante l’utilizzo di PGI Compiler, NVIDIA Nsight Systems ed Allinea Forge
Ottimizzazione
- Fattori determinanti per le performance dei programmi OpenACC
- Tecniche utili ad ottimizzare la località dei dati e a ridurre i trasferimenti indesiderati
- Strategie volte ad ottimizzare il parallelismo a livello di ciclo, nonché l’unione di più cicli in un’unica operazione parallela
- Riferimenti per migliorare il parallelismo e la fusione dei kernel elaborati dal programma
- Metodologie utili a incrementare il livello di vettorizzazione e a procedere all’auto-tuning del codice
Riepilogo ed indicazioni per proseguire lo studio
Requisiti
- Conoscenza dei linguaggi C/C++ o Fortran e dei concetti fondamentali della programmazione parallela
- Nozioni di base sull’architettura dei computer e sulla gerarchia della memoria
- Esperienza nell’utilizzo di strumenti da riga di comando e editor di codice
Destinatari del corso
- Sviluppatori desiderosi di imparare a utilizzare OpenACC per programmare dispositivi eterogenei ed esprimere al meglio il loro parallelismo
- Sviluppatori interessati a scrivere codice portabile e scalabile in grado di funzionare su svariate piattaforme e dispositivi
- Programmatori che desiderano approfondire gli aspetti più elevati della programmazione eterogenea e migliorare la produttività nel proprio lavoro