Contattataci

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
 28 ore

Numero di Partecipanti


Prezzo per partecipante

Corsi in Arrivo

Categorie relative