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.
Varaktighet 28 timmar
Kursplan
Introduktion
- Vad är OpenCL?
- OpenCL jämfört med CUDA och SYCL
- Översikt över OpenCL:s funktioner och arkitektur
- Inställning av utvecklingsmiljön
Att 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
- Att förstå rollen för OpenCL API i hostprogrammet
- Använda OpenCL API för att fråga efter enhetsinformation och funktioner
- 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, såsom läsa, skriva, kopiera, mappa, avmappa, exekvera och vänta
- Använda OpenCL API för att hantera fel och undantag
OpenCL C
- Att förstå rollen för OpenCL C i enhetsprogrammet
- Använda OpenCL C för att skriva kärnor som exekveras på enheten och manipulerar data
- Använda datatyper, kvalificerande, operatorer och uttryck i OpenCL C
- Använda inbyggda funktioner i OpenCL C, såsom matematik, geometri, relationer m.m.
- Använda extensioner och bibliotek i OpenCL C, såsom atomic, image, cl_khr_fp16 m.m.
OpenCL Minnesmodell
- Att förstå skillnaden mellan minnesmodeller för host och enhet
- Använda OpenCL-minnesutrymmen, såsom globalt, lokalt, konstant och privat
- Använda OpenCL-minnesobjekt, såsom buffertar, bilder och rören (pipes)
- Använda OpenCL-minnesåtkomstlägen, såsom läsläs (read-only), skrivskyddad (write-only), läs/skriv (read-write) m.m.
- Använda OpenCL:s minneskonsistensmodell och synkroniseringsmekanismer
OpenCL Exekveringsmodell
- Att förstå skillnaden mellan exekveringsmodeller för host och enhet
- Använda OpenCL work-items, work-groups och ND-intervall för att definiera parallelism
- Använda OpenCL work-item-funktioner, såsom get_global_id, get_local_id, get_group_id m.m.
- Använda OpenCL work-group-funktioner, såsom barrier, work_group_reduce, work_group_scan m.m.
- Använda OpenCL enhetsfunktioner, såsom get_num_groups, get_global_size, get_local_size m.m.
Felsökning
- Att förstå vanliga fel och buggar i OpenCL-program
- Använda Visual Studio Code-felsökaren för att inspektera variabler, brytpunkter, anropsstack m.m.
- 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
- Att förstå de faktorer som påverkar prestandan hos OpenCL-program
- Använda OpenCL-vektor Datatyper och vektoriseringstekniker för att förbättra aritmetisk genomsats
- Använda OpenCL loop unrolling och loop tiling-tekniker för att minska styroverhead och öka lokalitet
- Använda OpenCL lokalt minne och lokala minnesfunktioner för att optimera minnesåtkomst och bandbredd
- Använda OpenCL profilerande och profileringsverktyg för att mäta och förbättra exekveringstid och resursutnyttjande
Krav
- En förståelse för C/C++-språket och koncept inom parallell programmering
- Grundläggande kunskaper om datormaskinarkitektur och minneshierarki
- Erfarenhet av kommandoradsverktyg och kodredigerare
Targetgrupp
- Utvecklare som önskar lära sig att använda OpenCL för att programmera heterogena enheter och utnyttja deras parallelism
- Utvecklare som önskar skriva portabel och skalbar kod som kan köras på olika plattformar och enheter
- Programmerare som önskar utforska lågnivåaspekter av heterogen programmering och optimera kodens prestanda