Zkuste nás kontaktovat

Návrh Školení

Úvod do akcelerovaných výpočtů na GPU

  • Heterogenní výpočty a architektura CPU–GPU.
  • Principy provádění kódu v CUDA a typy pamětí.
  • Kompilace kódu C++ určeného k běhu na GPU pomocí nástrojů nvcc a CMake.
  • Ověření funkčnosti vývojového prostředí pro práci s GPU.

Paralelní algoritmy v nástrojích Thrust a CUB

  • Akcelerované operace třídění, redukování a transformování na GPU.
  • Převod běžných algoritmů STL tak, aby mohly běžet na GPU.
  • Vektory určené k použití v zařízeních a strategie jejich provádění.
  • Primitivní operace pro celý rozsah paměti v knihovně CUB sloužící k tvorbě vlastních algoritmů.

Architektura a správa paměti na GPU

  • Rozdíly mezi globální, konstantní a texturovanou pamětí.
  • Přímé alokování a přenosy dat do zařízení.
  • Jednotná paměť zjednodušující přístup k datům napříč procesory.
  • Optimalizace vzorců přístupu a shlukování operací na paměť.

Asynchronní provádění s využitím CUDA streamů

  • Vytváření a řízení jednotlivých streamů.
  • Současné spouštění výpočtů a přenosů dat pomocí streamů.
  • Použití událostí k řízení závislostí mezi operacemi.
  • Nastavení priorit jednotlivých streamů a vyladění jejich souběžnosti.

Vytváření vlastních CUDA kernelů

  • Model SIMT a způsob provádění vláken na GPU.
  • Nastavení parametrů spouštění kernelu a konstrukce cyklů přes celý rozsah dat.
  • Přiřazování indexů vláknům v rámci vícerozměrných mřížek.
  • Ochrana proti chybám a kontrola návratových hodnot rozhraní CUDA.

Hierarchie vláken a principy provádění kódu

  • Struktura mřížek, bloků a jednotlivých vláken.
  • Primitivné operace na úrovni warpu a metody pro sdílení informací mezi vlákny.
  • Mechanismy synchronizace mezi bloky a jejich využití při organizaci výpočtů.
  • Analýza vytěžování zdrojů procesoru a možnosti jejich optimalizace.

Kooperativní skupiny jako nástroje pro flexibilní paralelismus

  • Rozhraní cooperative_groups a typy skupin, které lze vytvořit.
  • Použití konceptu čtvercových segmentů dat při jejich zpracování na více vláknách.
  • Společné spouštění operací nad celými mřížkami pomocí kooperativních skupin.
  • Metody synchronizace mezi různými úrovněmi paralelismu v GPU prostředí.

Techniky optimalizace sdílené paměti

  • Ochrana proti konfliktům při čtení z bank paměti.
  • Praktické postupy pro rozdělování dat do „dlaždic“ a jejich následnou optimalizaci.
  • Využití sdílené paměti jako vlastní mezipaměti při zpracování velkých objemů dat.
  • Pomocí konstrukce cuda::shared_memory_mdspan lze efektivně pracovat s vícerozměrnými strukturami dat v této paměti.

Fúzní techniky kernelů a pokročilé modely paralelismu

  • Spojování více kernelů do jednoho pro snížení režijních nákladů na jejich spouštění.
  • Aplikace algoritmů typu scan, redukování podle klíče a segmentované operace.
  • Pracovní postupy s atomy a konstrukcemi dat bez nutnosti zamykání přístupů k paměti.
  • Využití agregovaných atomických operací na úrovni warpu pro maximalizaci propustnosti výpočtů.

Profilování a optimalizace s využitím Nsight Systems

  • Analýza časových řad aktivit procesoru i GPU.
  • Identifikace úzkých míst při přenosech dat mezi paměťemi.
  • Hodnocení výkonu jednotlivých kernelů a využití jejich zdrojů.
  • Pokračující optimalizace pomocí nástroje Nsight Compute.

Využití moderních konstrukcí jazyka C++ v kódu pro GPU

  • Používání lambda výrazů, klíčového slova constexpr a typu auto uvnitř kernelů.
  • Využití paralelních algoritmů z verzí C++17 v kombinaci s nastavenými strategiemi provádění.
  • Pracovní postupy s koncepty a rozsahy definovanými v jazyce C++20 pro výpočty na GPU.
  • Podpora standardů C++23 dostupná v kompilátoru nvcc a knihovně CCCL 3.x.

CUDA grafy a pokročilé techniky asynchronního provádění

  • Tvorba a spouštění akcelerovaných grafů pomocí CUDA.
  • Zaznamenávání jednotlivých kroků výpočtu do struktury grafu z běžících streamů.
  • Aktualizace parametrů a vytváření podmíněných rozvětvení v rámci těchto grafů.
  • Snižování režijních nákladů na spouštění sériových výpočtů díky využití dynamických grafů.

Praktické postupy pro integraci akcelerace do stávajících aplikací

  • Obalování funkcí pracujících s GPU za rozhraními definovanými v C++.
  • Správa prostředí vícegrafických systémů a NUMA architektur při použití GPU.
  • Integrace vývojového cyklu s nástrojem CMake včetně práce s knihovnami CUDA.
  • Ladění kódu prováděného na grafickém procesoru pomocí debuggeru cuda-gdb.

Shrnutí a osvědčené postupy v praxi

  • Výběr mezi použitím knihoven Thrust, CUB nebo samostatných kernelů.
  • Dosažení dostatečné přenositelnosti výkonu napříč různými typy GPU procesorů.
  • Odvážné organizování kódu a využití principů RAII při práci s prostředky vyhrazenými pro GPU.
  • Možnosti dalšího vzdělávání se v akcelerovaném programování na GPU.

Požadavky

  • Základní znalosti jazyka C++ včetně lambda výrazů, šablon a STL knihovny
  • Orientace ve standardních algoritmech, kontejnerech a iterátorech
  • Schopnost práce s cykly, podmínkami a funkcemi
  • Předchozí znalosti CUDA nebo programování na GPU nejsou vyžadovány

Cílová skupina

  • Vývojáři C++, kteří chtějí využít výpočetní sílu GPU k urychlení náročných aplikací.
  • Inženýři softwaru přecházející z konceptů CPU na heterogenní paralelní programování.
  • Výkonnostní inženýři a kvantitativní vývojáři pracující s rozsáhlými datovými sadami.
 8 Hodiny

Počet účastníků


Cena za účastníka

Reference (3)

Nadcházející kurzy

Související kategorie