Dziękujemy za wysłanie zapytania! Jeden z członków naszego zespołu skontaktuje się z Państwem wkrótce.
Dziękujemy za wysłanie rezerwacji! Jeden z członków naszego zespołu skontaktuje się z Państwem wkrótce.
Plan Szkolenia
Obliczenia GPU i architektura CUDA
- Różnice architektoniczne między CPU a GPU
- Model strumieniowego multiprocesora (streaming multiprocessor) w procesorach NVIDIA GPU
- Wprowadzenie do modelu programowania CUDA
- Obliczenia heterogeniczne oraz model host-device
Konfigurowanie środowiska programistycznego CUDA
- Instalacja pakietu narzędziowego CUDA 13.x
- Kompilator NVCC oraz proces budowania projektu
- Weryfikacja środowiska przy użyciu zapytań dotyczących urządzenia (device queries)
- Integracja z IDE oraz narzędzia developerskie
Pisanie i wywoływanie funkcji jądrowych CUDA
- Składnia funkcji jądrowych (kernelów) i kwalifikatory
- Konfiguracja wywołania oraz wykonanie
- Dodawanie wektorów oraz podstawowe wzorce równoległości danych
- Makra do sprawdzania błędów w CUDA
Hierarchia wątków i model wykonania CUDA
- Organizacja siatki (grid), bloku (block) i wątku (thread)
- Indeksowanie wątków oraz obliczanie globalnego ID
- Wykonywanie wewnątrz warp'a oraz model SIMT
- Zajętość (occupancy) i wykorzystanie zasobów
Architektura pamięci GPU i zarządzanie nią
- Typy pamięci: globalna, współdzielona (shared), stała oraz rejestry
- Rezerwowanie i zwalnianie pamięci urządzenia
- Transfer danych z hosta na urządzenie i odwrotnie
- Pamięć współdzielona dla współpracy wewnątrz bloku
Ujednolicona pamięć (Unified Memory) i migracja danych
- Model ujednoliconej pamięci oraz alokacje zarządzane
- Migracja stron (page migration) oraz paging na żądanie
- Asynchroniczna prefetcja za pomocą cudaMemPrefetchAsync
- Wskazówki dotyczące zachowań pamięci (memory advice) w zależności od wzorców dostępu
Profilowanie systemowe z użyciem Nsight Systems
- Analiza osi czasu w Nsight Systems
- Identyfikacja punktów synchronizacji CPU-GPU
- Wizualizacja wykonania funkcji jądrowych oraz transferów pamięci
- Interpretacja danych wydajnościowych na poziomie systemu
Optymalizacja funkcji jądrowych z użyciem Nsight Compute
- Interaktywne profilowanie kernelów w Nsight Compute
- Analiza przepustowości i szerokości pasma pamięci
- Wykorzystanie mocy obliczeniowej oraz statystyki stanów warp'a
- Wodze analizy oraz zasady optymalizacji
Sterowniki strumieniowe i operacje asynchroniczne (Concurrent Streams)
- Sterowniki strumieniowe CUDA oraz domyślny strumień
- Nakładanie wykonania kernelów na transfer danych
- Synchronizacja strumieni i zdarzenia CUDA
- Wzorce projektowe dla wielostrumieniowego potoku
Obsługa błędów i narzędzia debugowania
- Kody błędów interfejsu API CUDA oraz strategie radzenia sobie z nimi
- Compute-sanitizer do sprawdzania dostępu do pamięci
- cuda-gdb do debugowania funkcji jądrowych
- Asertie i wykrywanie błędów synchronicznych
Kierowany profilowaniem cykl optymalizacji
- Iteracyjna metoda profilowania
- Identyfikacja wąskich gardeł i ich priorytetyzacja
- Testowanie regresji wydajności
- Dokumentowanie decyzji optymalizacyjnych
Kompleksowy projekt aplikacji przyspieszanej (End-to-End)
- Projektowanie kompletnej rozwiązania przyspieszanego przez GPU
- Integracja profilowania na każdym etapie rozwoju
- Pomiar wydajności i sporządzanie raportów
- Rozważania wdrożeniowe dla środowiska produkcyjnego
Wymagania
- Podstawowa wiedza i umiejętności programowania w C/C++, obejmujące typy zmiennych, pętle, instrukcje warunkowe, funkcje oraz manipulację tablicami
- Znajomość procesu kompilacji i uruchamiania programów z poziomu linii poleceń
- Wiedza na temat procesorów GPU ani wcześniejsze doświadczenie w programowaniu CUDA nie są wymagane
Grupa docelowa
- Programiści i inżynierowie dążący do przyspieszenia aplikacji C/C++ przy użyciu GPU
- Badacze naukowy oraz specjalistci zajmujący się obliczeniami wysoką wydajności (HPC), przechodzący z architektur wyłącznie CPU na architektury heterogeniczne
- Kierownicy techniczni oceniający możliwość przyspieszenia procesów przy użyciu GPU w środowisku produkcyjnym
8 godzin