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.
Návrh Školení
Úvod
- Co je to OpenCL?
- OpenCL oproti CUDA a SYCL
- Přehled funkcí a architektury OpenCL
- Nastavení vývojového prostředí
Začínáme
- Vytvoření nového projektu v OpenCL s použitím Visual Studio Code
- Prozkoumání struktury a souborů projektu
- Kompilace a spuštění programu
- Zobrazení výstupu pomocí funkcí printf a fprintf
OpenCL API
- Úloha rozhraní OpenCL API v hostitelském kódu
- Zjišťování informací a schopností zařízení pomocí rozhraní OpenCL API
- Vytváření kontextů, front příkazů, vyrovnávacích pamětí, jader a událostí prostřednictvím API
- Uplatňování příkazů typu čtení, zápis, kopírování, mapování, odmapování, spouštění a čekání pomocí OpenCL API
- Zvládání chyb a výjimek v rámci rozhraní OpenCL API
Jazyk OpenCL C
- Role jazyka OpenCL C při tvorbě kódu spouštěného na zařízení
- Psaní jader pomocí jazyka OpenCL C, které manipulují s daty a provádějí výpočty
- Práce s datovými typy, kvalifikátory, operátory a výrazy v rámci OpenCL C
- Využívání vestavěných funkcí jazyka OpenCL C – např. matematické, geometrické či relační funkce
- Použití rozšíření a knihoven OpenCL C jako například atomic, image nebo cl_khr_fp16
Model paměti v OpenCL
- Rozdíly mezi hostitelským a zařízením modelem paměti
- Používání jednotlivých oblastí paměti v OpenCL – globální, lokální, konstantní a privátní
- Práce s objekty typu vyrovnávacích pamětí, obrázků či trubek v OpenCL
- Určování režimů přístupu k paměti – pouze pro čtení, zápis, nebo kombinovaný přístup
- Synchronizace a konzistence dat v rámci modelu paměti OpenCL
Model provádění instrukcí v OpenCL
- Porovnání mezi modelem provádění na hostiteli a na zařízení
- Definice paralelismu pomocí prvků, skupin úloh a ND-rozsahů v OpenCL
- Využití funkcí určených pro jednotlivé prvky – např. get_global_id, get_local_id, get_group_id
- Používání funkcí určených pro skupiny úloh jako barrier, work_group_reduce nebo work_group_scan
- Ovládání parametrů typu počtu skupin či velikosti rozsahu – get_num_groups, get_global_size, get_local_size
Ladění programů na OpenCL
- Identifikace běžných chyb a problémů v kódu na OpenCL
- Použití ladicího nástroje ve Visual Studio Code k kontrole proměnných, nastavení breakpointů a analýze zásobníku volání
- Odstraňování chyb v programech na zařízeních AMD pomocí nástroje CodeXL
- Analýza a ladění kódu pro procesory Intel s využitím nástroje Intel VTune
- Ladění a kontrola výkonu programů na zařízeních NVIDIA pomocí nástroje NVIDIA Nsight
Optimalizace kódu na OpenCL
- Faktory ovlivňující výkonnost a efektivitu programů na OpenCL
- Využití vektorových datových typů a techniky vektorizace ke zvýšení propustnosti aritmetických operací
- Používání rozbalování cyklů a jejich rozdělení za účelem omezení přepočtu instrukcí a zlepšení lokality dat
- Optimizace přístupu k paměti využitím lokální paměti a s ní spojených funkcí
- Měření výkonu programů pomocí profilovacích nástrojů a jeho další zlepšování
Závěr a další kroky
Požadavky
- Základní znalost jazyka C/C++ a principů paralelního programování
- Orientaci v architektuře počítačů a hierarchii pamětí
- Praxi s nástroji příkazového řádku a editory kódu
Cílová skupina
- Vývojáři, kteří se chtějí naučit využívat OpenCL k programování heterogenních zařízení a optimalizaci paralelního běhu programů
- Programátoři, kteří chtějí vytvářet přenosný a škálovatelný kód fungující na různých platformách
- Osoby se zájmem o hlubší porozumění heterogennímu programování a metodám pro zvýšení výkonu vlastních aplikací
28 Hodiny