Tack för att du skickade din fråga! En av våra teammedlemmar kontaktar dig snart.
Tack för att du skickade din bokning! En av våra teammedlemmar kontaktar dig snart.
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