Köszönjük, hogy elküldte érdeklődését! Csapatunk egyik tagja hamarosan felveszi Önnel a kapcsolatot.
Köszönjük, hogy elküldte foglalását! Csapatunk egyik tagja hamarosan felveszi Önnel a kapcsolatot.
Időtartalma 28 órák
Kurzusleírás
Bevezetés
- Mi az OpenCL?
- OpenCL vs. CUDA vs. SYCL
- Áttekintés az OpenCL funkcióiról és architektúrájáról
- Fejlesztői környezet beállítása
Előkészületek
- Új OpenCL projekt létrehozása Visual Studio Code segítségével
- A projekt szerkezetének és fájljainak felfedezése
- A program fordítása és futtatása
- A kimenet megjelenítése printf és fprintf segítségével
OpenCL API
- Az OpenCL API szerepének megértése a host programban
- Az OpenCL API használata az eszközinformációk és képességek lekérdezésére
- Az OpenCL API használata kontextusok, parancskörök, puferek, kernel-függvények és események létrehozására
- Az OpenCL API használata parancsok sorbaállítására, mint például olvasás, írás, másolás, térkép, leképezés, végrehajtás és várakozás
- Az OpenCL API használata hibák és kivételek kezelésére
OpenCL C
- Az OpenCL C szerepének megértése az eszközprogramban
- Az OpenCL C használata olyan kernel-függvények írására, amelyek az eszközön futnak és adatokat manipulálnak
- Az OpenCL C adattípusok, minősítők, operátorok és kifejezések használata
- Az OpenCL C beépített függvények használata, például matematikai, geometriai, relációs stb.
- Az OpenCL C kiterjesztések és könyvtárak használata, például atomi, kép, cl_khr_fp16 stb.
OpenCL memória modell
- A host és az eszköz memória modellek közötti különbségek megértése
- OpenCL memória területek használata, például globális, lokális, konstans és privát
- OpenCL memóriatárgyak használata, például puferek, képek és csövek
- OpenCL memória hozzáférési módok használata, például csak-olvasás, csak-írás, olvasás-írás stb.
- OpenCL memória koherencia modell és szinkronizációs mechanizmusok használata
OpenCL végrehajtási modell
- A host és az eszköz végrehajtási modellek közötti különbségek megértése
- OpenCL munkaelemek, munkacsoportok és ND-tartományok használata a párhuzamosítás meghatározásához
- OpenCL munkaelem-függvények használata, például get_global_id, get_local_id, get_group_id stb.
- OpenCL munkacsoport-függvények használata, például barrier, work_group_reduce, work_group_scan stb.
- OpenCL eszközfüggvények használata, például get_num_groups, get_global_size, get_local_size stb.
Hibakeresés
- Az OpenCL programokban előforduló gyakori hibák és bugok megértése
- Visual Studio Code hibakereső használata változók, tördelési pontok, hívási pila stb. vizsgálatára
- CodeXL használata OpenCL programok hibakerésére és elemzésére AMD eszközökön
- Intel VTune használata OpenCL programok hibakerésére és elemzésére Intel eszközökön
- NVIDIA Nsight használata OpenCL programok hibakerésére és elemzésére NVIDIA eszközökön
Optimalizálás
- Tényezők megértése, amelyek befolyásolják az OpenCL programok teljesítményét
- OpenCL vektoros adattípusok és vektörizációs technikák használata az aritmetikai sávszélesség javításához
- OpenCL ciklus bontás és ciklus csempézés technikák használata a vezérlési overhead csökkentésére és a lokalitás növelésére
- OpenCL lokális memória és lokális memória függvények használata a memória-hozzáférések és a sávszélesség optimalizálásához
- OpenCL profilozás és profilozási eszközök használata a futási idő és az erőforrás-kihasználás mérésére és javítására
Követelmények
- A C/C++ nyelv és a párhuzamos programozás alapjai ismerete
- Alapszintű tudás a számítógép-architektúráról és a memória-hirarchiáról
- Tapasztalat parancssori eszközök és kódszerkesztők használatában
Célcsoport
- Fejlesztők, akik meg szeretnék tanulni, hogyan használják az OpenCL-t a heterogén eszközök programozásához és párhuzamoságuk kiaknázásához
- Fejlesztők, akik hordozható és skálázható kódot szeretnének írni, amely különböző platformokon és eszközökön fut
- Programozók, akik felfedezni szeretnék a heterogén programozás alacsony szintű aspektusait és optimalizálni kívánják kódjuk teljesítményét