Thank you for sending your enquiry! One of our team members will contact you shortly.
Thank you for sending your booking! One of our team members will contact you shortly.
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