Návrh Školení

Úvod

  • Co je OpenCL?
  • OpenCL vs CUDA vs SYCL
  • Přehled funkcí a architektury OpenCL
  • Nastavení vývojového prostředí

Začínáme

  • Vytvoření nového projektu OpenCL pomocí kódu Visual Studio
  • 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 hostitelském programu
  • Použití rozhraní API OpenCL k dotazování na informace a možnosti zařízení
  • Použití OpenCL API k vytváření kontextů, příkazových front, vyrovnávacích pamětí, jader a událostí
  • Použití rozhraní API OpenCL k zařazení příkazů do fronty, jako je čtení, zápis, kopírování, mapování, odmapování, provádění a čekání
  • Použití OpenCL API ke zpracování chyb a výjimek

OpenCL C

  • Pochopení role OpenCL C v programu zařízení
  • Použití OpenCL C k zápisu jader, která se spouštějí na zařízení a manipulují s daty
  • Použití OpenCL C datových typů, kvalifikátorů, operátorů a výrazů
  • Použití OpenCL C vestavěných funkcí, jako jsou matematické, geometrické, relační atd.
  • Použití OpenCL C rozšíření a knihoven, jako je atomic, image, cl_khr_fp16 atd.

OpenCL Paměťový model

  • Pochopení rozdílu mezi modely paměti hostitele a zařízení
  • Použití OpenCL paměťových prostorů, jako je globální, místní, konstantní a soukromý
  • Použití paměťových objektů OpenCL, jako jsou vyrovnávací paměti, obrázky a kanály
  • Použití režimů přístupu do paměti OpenCL, jako je pouze čtení, pouze zápis, čtení-zápis atd.
  • Použití modelu konzistence paměti OpenCL a mechanismů synchronizace

OpenCL Model provedení

  • Pochopení rozdílu mezi modely provádění hostitele a zařízení
  • Použití OpenCL pracovních položek, pracovních skupin a rozsahů ND k definování paralelismu
  • Používání funkcí pracovních položek OpenCL, jako je get_global_id, get_local_id, get_group_id atd.
  • Použití funkcí pracovní skupiny OpenCL, jako je bariéra, 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 chyb v programech OpenCL
  • Použití Visual Studio Code debugger ke kontrole proměnných, zarážek, 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 programů OpenCL
  • Použití OpenCL vektorových datových typů a vektorizačních technik ke zlepšení aritmetické propustnosti
  • Použití technik rozvinování smyček a skládání smyček OpenCL ke snížení režie řízení a zvýšení lokality
  • Použití funkce OpenCL místní paměti a místní paměti k optimalizaci přístupu k paměti a šířky pásma
  • Použití OpenCL profilovacích a profilovacích nástrojů k měření a zlepšení doby provádění a využití zdrojů

Shrnutí a další kroky

Požadavky

  • Pochopení jazyka C/C++ a konceptů paralelního programování
  • Základní znalosti architektury počítačů a hierarchie paměti
  • Zkušenosti s nástroji příkazového řádku a editory kódu

Publikum

  • Vývojáři, kteří se chtějí naučit používat OpenCL k programování heterogenních zařízení a využívat jejich paralelismus
  • Vývojáři, kteří chtějí psát přenosný a škálovatelný kód, který může běžet na různých platformách a zařízeních
  • Programátoři, kteří chtějí prozkoumat nízkoúrovňové aspekty heterogenního programování a optimalizovat výkon svého kódu
 28 hodiny

Počet účastníků



Price per participant

Reference (1)

Související kurzy

GPU Programming - OpenCL vs CUDA vs ROCm

28 hodiny

ROCm for Windows

21 hodiny

Související kategorie