Kursplan

Introduktion

  • Vad är OpenCL?
  • OpenCL vs CUDA vs SYCL
  • Översikt över OpenCLs funktioner och arkitektur
  • Inställning av utvecklingsmiljö

Komma igång

  • Skapa ett nytt OpenCL projekt med Visual Studio Code
  • Utforska projektstrukturen och filerna
  • Kompilera och köra programmet
  • Visa utdata med printf och fprintf

OpenCL API

  • Förstå rollen för OpenCL API i värdprogrammet
  • Använda OpenCL API för att fråga efter enhetens information och kapacitet
  • Använda OpenCL API för att skapa kontexter, kommandoköer, buffertar, kärnor och händelser
  • Använda OpenCL API för att köa kommandon, som läsa, skriva, kopiera, mappa, avmappa, köra och vänta
  • Använda OpenCL API för att hantera fel och undantag

OpenCL C

  • Förstå rollen för OpenCL C i enhetsprogrammet
  • Använda OpenCL C för att skriva kärnor som körs på enheten och hanterar data
  • Använda OpenCL C datatyper, kvalificerare, operatörer och uttryck
  • Använda inbyggda funktioner i OpenCL C, som matematiska, geometriska, relationella, etc.
  • Använda OpenCL C-utökningar och bibliotek, som atomiska, bild, cl_khr_fp16, etc.

OpenCL minnesmodell

  • Förstå skillnaderna mellan värd- och enhetsminnesmodeller
  • Använda OpenCL minnesutrymmen, som globalt, lokalt, konstant och privat
  • Använda OpenCL minnesobjekt, som buffertar, bilder och rör
  • Använda OpenCL minnesåtkomstlägen, som läsbart, skrivbart, läs- och skrivbart, etc.
  • Använda OpenCL minneskonsistensmodell och synkroniseringsmekanismer

OpenCL exekveringsmodell

  • Förstå skillnaderna mellan värd- och enhets exekveringsmodeller
  • Använda OpenCL arbetsobjekt, arbetsgrupper och ND-ranges för att definiera parallellism
  • Använda OpenCL arbetsobjektsfunktioner, som get_global_id, get_local_id, get_group_id, etc.
  • Använda OpenCL arbetsgruppsfunktioner, som barrier, work_group_reduce, work_group_scan, etc.
  • Använda OpenCL enhetsfunktioner, som get_num_groups, get_global_size, get_local_size, etc.

Felsökning

  • Förstå vanliga fel och buggar i OpenCL program
  • Använda Visual Studio Code debugger för att inspektera variabler, brytpunkter, anropsstacken, etc.
  • Använda CodeXL för att felsöka och analysera OpenCL program på AMD-enheter
  • Använda Intel VTune för att felsöka och analysera OpenCL program på Intel-enheter
  • Använda NVIDIA Nsight för att felsöka och analysera OpenCL program på NVIDIA-enheter

Optimering

  • Förstå faktorer som påverkar prestandan hos OpenCL program
  • Använda OpenCL vektordatatyper och vektoriseringstekniker för att förbättra aritmetisk prestanda
  • Använda OpenCL loop omlåsning och loop kachning för att minska kontrollöverhuvud och öka lokalitet
  • Använda OpenCL lokalminne och lokalminnesfunktioner för att optimera minnesåtkomst och bandbredd
  • Använda OpenCL profilering och profileringverktyg för att mäta och förbättra exekveringstid och resursanvändning

Sammanfattning och nästa steg

Krav

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

Målgrupp

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

Antal deltagare


Price per participant

Upcoming Courses

Relaterade Kategorier