Děkujeme za vaši dotaz! Jeden z našich pracovníků vás brzy kontaktuje.
Děkujeme za rezervaci! Jeden z našich pracovníků vás brzy kontaktuje.
Doba trvání 28 hodiny
Návrh Školení
Úvod
- Co je OpenCL?
- OpenCL vs. CUDA vs. SYCL
- Přehled funkcí a architektury OpenCL
- Nastavení vývojového prostředí
Úvodní kroky
- Vytvoření nového OpenCL projektu pomocí Visual Studio Code
- Prozkoumání struktury projektu a souborů
- Kompilace a spuštění programu
- Zobrazení výstupu pomocí printf a fprintf
OpenCL API
- Pochopení role OpenCL API v programu hostitele
- Použití OpenCL API ke získání informací o schopnostech a vlastnostech zařízení
- Použití OpenCL API ke vytvoření kontextů, front příkazů, bufferů, jader a událostí
- Použití OpenCL API k zařazení příkazů, jako jsou čtení, zápis, kopírování, mapování, odmapování, spuštění a čekání
- Použití OpenCL API k zpracování chyb a výjimek
OpenCL C
- Pochopení role OpenCL C v programu zařízení
- Použití OpenCL C ke psaní jader, která se provádějí na zařízení a manipulují s daty
- Použití datových typů, kvalifikátorů, operátorů a výrazů v OpenCL C
- Použití vestavěných funkcí OpenCL C, jako jsou matematické, geometrické, relační atd.
- Použití rozšíření a knihoven OpenCL C, jako jsou atomické operace, obrázky, cl_khr_fp16 atd.
Model paměti OpenCL
- Pochopení rozdílu mezi modely paměti hostitele a zařízení
- Použití paměťových prostoru OpenCL, jako jsou globální, lokální, konstantní a soukromé
- Použití paměťových objektů OpenCL, jako jsou buffery, obrázky a roury (pipes)
- Použití režimů přístupu k paměti OpenCL, jako jsou pouze pro čtení, pouze pro zápis, čtení/zápis atd.
- Použití modelu konzistence paměti OpenCL a synchronizačních mechanismů
Model provedení OpenCL
- Pochopení rozdílu mezi modely provedení hostitele a zařízení
- Použití prvků práce, skupin práce a N-rozměrných rozsahů OpenCL k definování paralelismu
- Použití funkcí prvků práce OpenCL, jako jsou get_global_id, get_local_id, get_group_id atd.
- Použití funkcí skupin práce OpenCL, jako jsou barrier, work_group_reduce, work_group_scan atd.
- Použití funkcí zařízení OpenCL, jako jsou get_num_groups, get_global_size, get_local_size atd.
Ladění
- Pochopení běžných chyb a bugů v OpenCL programech
- Použití ladicího programu Visual Studio Code ke kontrole proměnných, breakpointů, zásobníku volání atd.
- Použití CodeXL k ladění a analýze OpenCL programů na zařízeních AMD
- Použití Intel VTune k ladění a analýze OpenCL programů na zařízeních Intel
- Použití NVIDIA Nsight k ladění a analýze OpenCL programů na zařízeních NVIDIA
Optimalizace
- Pochopení faktorů, které ovlivňují výkon OpenCL programů
- Použití vektorových datových typů OpenCL a technik vektorizace ke zvýšení aritmetické throughputu
- Použití technik rozmotávání smyček (loop unrolling) a kachlíkování smyček (loop tiling) OpenCL ke snížení řídicího přenosu a zvýšení lokalizace
- Použití lokální paměti OpenCL a funkcí lokální paměti k optimalizaci přístupu k paměti a propustnosti
- Použití profilování OpenCL a profilovacích nástrojů k měření a zlepšování času provedení a využití zdrojů
Požadavky
- Rozumění jazyku C/C++ a konceptům paralelního programování
- Základní znalosti počítačové architektury a hierarchie paměti
- Znalost příkazového řádku a kódovacích editorů
Cílová skupina
- Vývojáři, kteří se chtějí naučit používat OpenCL k programování heterogenních zařízení a využití jejich paralelismu
- Vývojáři, kteří chtějí psát přenosný a škálovatelný kód, který může běhat na různých platformách a zařízeních
- Programátoři, kteří chtějí prozkoumat nízkourové aspekty heterogenního programování a optimalizovat výkon svého kódu