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

Numero di Partecipanti



Prezzo per Partecipante

Recensioni (1)

Corsi relativi

GPU Programming with CUDA

28 ore

GPU Programming - OpenCL vs CUDA vs ROCm

28 ore

AMD GPU Programming

28 ore

ROCm for Windows

21 ore

Categorie relative