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.
Reference (3)
Podrobné vysvětlení a jemné opakování klíčových bodů, což skutečně velmi efektivně předávalo znalosti. Rodovo ochotu k podstatné kontrole neobvyklých otázek, které jsme zvedli, aby se ujistil, že jeho odpovědi byly 100 % správné. Rovněž jeho zájem o diskusi o výhodách a nevýhodách alternativních stylů kódu, takže jsme se naučili nejen, jak používat C++ na naši zamýšlenou cestu, ale i proč by to mělo být děláno právě tímto způsobem.
Nick Dillon - cellxica Ltd
Kurz - Using C++ in Embedded Systems - Applying C++11/C++14
Přeloženo strojem
Sdílení zkušeností, učitelova odbornost a hodnoty.
Carey Fan - Logitech
Kurz - C/C++ Secure Coding
Přeloženo strojem
Online formát nám umožnil ušetřit spoustu času. Bylo to velmi oceňováno. Kromě toho bylo skvělé, že instruktor ovládal jak C#, tak C++. Díky tomu mohl všechno vysvětlovat s ohledem na znalosti, které již máme.
Gabor - Rheinmetall Electronics Hungary Kft
Kurz - Advanced C++
Přeloženo strojem