Kursplan

Införandet

  • Vad är OpenACC?
  • OpenACC jämfört med OpenCL jämfört med CUDA jämfört med SYCL
  • Översikt över funktioner och arkitektur i OpenACC
  • Konfigurera utvecklingsmiljön

Komma igång

  • Skapa ett nytt OpenACC-projekt med hjälp av Visual Studio Code
  • Utforska projektstrukturen och filerna
  • Kompilera och köra programmet
  • Visa utdata med printf och fprintf

OpenACC-direktiv och klausuler

  • Förstå rollen för OpenACC-direktiv och -klausuler i värd- och enhetskoden
  • Använda OpenACC:s parallella direktiv och satser för att skapa parallella regioner och ange antalet gäng, arbetare och vektorer
  • Använda OpenACC-kärndirektiv och -satser för att skapa kernelregioner och låta kompilatorn bestämma parallelliteten
  • Använda OpenACC-loopdirektiv och -satser för att parallellisera loopar och specificera loopdistribution, kollaps, reduktion och kakel
  • Använda OpenACC-datadirektiv och -klausuler för att hantera dataflytt och dataregioner
  • Använda OpenACC-uppdateringsdirektiv och -klausuler för att synkronisera data mellan värden och enheten
  • Använda OpenACC-cachedirektiv och -klausuler för att förbättra återanvändning av data och lokalitet
  • Använda OpenACC-rutindirektiv och -satser för att skapa enhetsfunktioner och ange funktionstyp och vektorlängd
  • Använda OpenACC:s väntedirektiv och -satser för att synkronisera händelser och beroenden

OpenACC API

  • Förstå OpenACC API:s roll i värdprogrammet
  • Använda OpenACC API för att fråga efter enhetsinformation och funktioner
  • Använda OpenACC API för att ställa in enhetsnummer och enhetstyp
  • Använda OpenACC API för att hantera fel och undantag
  • Använda OpenACC API för att skapa och synkronisera händelser

OpenACC-bibliotek och interoperabilitet

  • Förstå rollen för OpenACC-bibliotek och interoperabilitetsfunktioner i enhetsprogrammet
  • Använda OpenACC-bibliotek, t.ex. matematik, slumpmässig och komplex, för att utföra vanliga uppgifter och operationer
  • Använda OpenACC-interoperabilitetsfunktioner, såsom deviceptr, use_device och acc_memcpy, för att integrera OpenACC med andra programmeringsmodeller, såsom CUDA, OpenMP och MPI
  • Använda OpenACC-interoperabilitetsfunktioner, såsom host_data och declare, för att integrera OpenACC med GPU-bibliotek, såsom cuBLAS och cuFFT

OpenACC-verktyg

  • Förstå OpenACC-verktygens roll i utvecklingsprocessen
  • Använda OpenACC-verktyg för att profilera och felsöka OpenACC-program och identifiera flaskhalsar och möjligheter i prestanda
  • Använda OpenACC-verktyg, såsom PGI Compiler, NVIDIA Nsight Systems och Allinea Forge, för att mäta och förbättra exekveringstiden och resursutnyttjandet

Optimering

  • Förstå de faktorer som påverkar prestandan hos OpenACC-program
  • Använda OpenACC-direktiv och -klausuler för att optimera datalokalitet och minska dataöverföringar
  • Använda OpenACC-direktiv och -klausuler för att optimera loopparallellitet och fusion
  • Använda OpenACC-direktiv och -satser för att optimera kärnparallellitet och fusion
  • Använda OpenACC-direktiv och -klausuler för att optimera vektorisering och automatisk justering

Sammanfattning och nästa steg

Krav

  • En förståelse för C/C++ eller Fortran-språk och parallella programmeringskoncept
  • Grundläggande kunskaper om datorarkitektur och minneshierarki
  • Erfarenhet av kommandoradsverktyg och kodredigerare

Publik

  • Utvecklare som vill lära sig att använda OpenACC för att programmera heterogena enheter och utnyttja deras parallellitet
  • Utvecklare som vill skriva portabel och skalbar kod som kan köras på olika plattformar och enheter
  • Programmerare som vill utforska de övergripande aspekterna av heterogen programmering och optimera sin kodproduktivitet
 28 timmar

Antal deltagare



Price per participant

Vittnesmål (1)

Relaterade Kurser

GPU Programming - OpenCL vs CUDA vs ROCm

28 timmar

Relaterade Kategorier