Zkuste nás kontaktovat

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
 8 Hodiny

Počet účastníků


Cena za účastníka

Reference (3)

Nadcházející kurzy

Související kategorie