Zkuste nás kontaktovat

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

Počet účastníků


Cena za účastníka

Nadcházející kurzy

Související kategorie