Návrh Školení
Úvod do výpočtů urychlovaných GPU
- Heterogenní výpočty a architektura CPU-GPU
- Prostorové provádění a paměť CUDA
- Kompilace kódu CUDA C++ pomocí nástroje nvcc a CMake
- Ověření vývojového prostředí GPU
Paralelní algoritmy s Thrustem a CUB
- Zrychlené řazení, redukce a transformace pomocí GPU
- Refaktorizace algoritmů STL pro spuštění na GPU
- Vektorová zařízení a politiky provádění Thrust
- Přírodní prvky pro široké rozsahy CUB pro vlastní potrubí
Architektura paměti GPU a její správa
- Typy globální, konstantní a texturované paměti
- Výslovné alokace přenosů na zařízení paměti
- Sjednocená paměť pro zjednodušený přístup k datům
- Optimalizace vzoru přístupu a koalescence paměti
Asynchronní provádění pomocí CUDA streamů
- Vytváření a správa proudů CUDA
- Překrytí výpočtu jádra s přenosem dat
- Události CUDA pro řízení závislostí
- Určení priorit streamu a ladění konkurence
Pisování vlastních jader CUDA
- Model programování SIMT a provedení smyčky vlákna
- Konfigurace spouštění jader a smyček sítě kroků
- Indexace vláken a vícedimenzionální mřížky
- Ošetření chyb a kontrola runtime API CUDA
Hierarchie vláken a model provedení
- Mřížky, bloky a vlákna v kódu zařízení
- Přírodní elementy úrovně smyček a operace s voláním
- Na úrovni bloku synchronizace a bariéry
- Využití zdroje a analýza obsazenosti
Kooperativní skupiny pro flexibilní paralelismus
- API cooperative_groups a typy skupin
- Tile zbloků a tiled_partition
- Spuštění na úrovni mřížky
- Vzory synchronizace mezi mřížkami
Techniky optimalizace sdílené paměti
- Banky sdílené paměti a vyhýbání se konfliktům banky
- Strategie dlaždic pro maticové operace
- Sdílená paměť jako řízená uživatelem mezipaměť
- cuda::shared_memory_mdspan pro vícedimenzionální pohledy
Fúze jader a pokročilé paralelní vzory
- Slučování více jader za účelem snížení nákladů na spuštění
- Skennování, redukce podle klíče a segmentované algoritmy
- Aktomické operace a struktury dat bez zámku
- Atomika agregovaná s vlnou pro zvýšení propustnosti
Profilování a optimalizace s Nsight Systems
- Analýza časové osy činnosti CPU a GPU
- Identifikace úzkých míst při přenosu paměti
- Profilování výkonu jádra a obsazenosti
- Iterativní optimalizace s Nsight Compute
Moderní funkce C++ v kódu zařízení CUDA
- Lambdy, constexpr a auto v jádrech
- Paralelní algoritmy C++17 a politiky provádění
- Koncepce a rozsahy C++20 na zařízení
- Podpora C++23 v nvcc a CCCL 3.x
Graphs CUDA a pokročilá asynchronnost
- Definování a spouštění grafů CUDA
- Zachycení z provedení streamu na graf
- Aktualizace grafu a uzly podmíněného provádění
- Snižování latence při spuštění u iterativních úloh
Integrační vzory pro existující aplikace
- Zakrývání kódu GPU rozhraními C++
- Správa systémů s více grafickými kartami a NUMA
- Integrace build systému s CMake a CUDA
- Debugging kódu zařízení pomocí cuda-gdb
Shrnutí a nejlepší praktiky
- Výběr mezi Thrust, CUB a vlastními jádry
- Perzistentní výkon across GPU architektury
- Organizace kódu a RAII pro zdroje CUDA
- Další kroky a pokročilé vzdělávací cesty CUDA
Požadavky
- Základní znalost jazyka C++, včetně lambda výrazů, šablon a STL (Standard Template Library)
- Seznámení se s standardními algoritmy, kontejnery a iterátory
- Znalost cyklů, podmínek a funkcí
- Předchozí znalosti CUDA nebo programování GPU nejsou vyžadovány.
Cílová skupina
- Vývojáři C++ hledající zrychlení výpočetně náročných aplikací pomocí GPU
- Softwaroví inženýři přecházející od programování pouze pro CPU k heterogennímu paralelnímu programování
- Inženýři zaměření na výkon a kvantitativní analytici pracující s velkými sadami dat
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