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
Wprowadzenie
- Czym jest CUDA?
- CUDA vs OpenCL vs SYCL
- Przegląd funkcji i architektury CUDA
- Konfiguracja środowiska programistycznego
Pierwsze kroki
- Tworzenie nowego projektu CUDA przy użyciu kodu Visual Studio
- Przeglądanie struktury projektu i plików
- Kompilowanie i uruchamianie programu
- Wyświetlanie danych wyjściowych przy użyciu printf i fprintf
API CUDA
- Zrozumienie roli interfejsu API CUDA w programie hosta
- Używanie CUDA API do wyszukiwania informacji o urządzeniu i jego możliwościach
- Używanie CUDA API do przydzielania i zwalniania pamięci urządzenia
- Używanie CUDA API do kopiowania danych między hostem a urządzeniem
- Używanie CUDA API do uruchamiania jądra i synchronizowania wątków
- Używanie CUDA API do obsługi błędów i wyjątków
CUDA C/C++
- Zrozumienie roli CUDA C/C++ w programie urządzenia
- Używanie CUDA C/C++ do pisania jąder, które wykonują się na GPU i manipulują danymi
- Korzystanie z typów danych, kwalifikatorów, operatorów i wyrażeń CUDA C/C++
- Korzystanie z wbudowanych funkcji CUDA C/C++, takich jak matematyczne, atomowe, osnowy itp.
- Korzystanie z wbudowanych zmiennych CUDA C/C++, takich jak threadIdx, blockIdx, blockDim itp.
- Korzystanie z bibliotek CUDA C/C++, takich jak cuBLAS, cuFFT, cuRAND itp.
Model pamięci CUDA
- Zrozumienie różnicy między modelami pamięci hosta i urządzenia
- Korzystanie z przestrzeni pamięci CUDA, takich jak globalna, współdzielona, stała i lokalna
- Korzystanie z obiektów pamięci CUDA, takich jak wskaźniki, tablice, tekstury i powierzchnie
- Korzystanie z trybów dostępu do pamięci CUDA, takich jak tylko do odczytu, tylko do zapisu, odczyt-zapis itp.
- Korzystanie z modelu spójności pamięci CUDA i mechanizmów synchronizacji
Model wykonania CUDA
- Zrozumienie różnicy między modelem wykonania hosta i urządzenia
- Używanie wątków, bloków i siatek CUDA do definiowania równoległości
- Korzystanie z funkcji wątków CUDA, takich jak threadIdx, blockIdx, blockDim itp.
- Korzystanie z funkcji blokowych CUDA, takich jak __syncthreads, __threadfence_block itp.
- Korzystanie z funkcji siatki CUDA, takich jak gridDim, gridSync, grupy kooperacyjne itp.
Debugowanie
- Zrozumienie typowych błędów i usterek w programach CUDA
- Używanie Visual Studio debuggera kodu do sprawdzania zmiennych, punktów przerwania, stosu wywołań itp.
- Używanie CUDA-GDB do debugowania programów CUDA na Linux
- Używanie CUDA-MEMCHECK do wykrywania błędów i wycieków pamięci
- Używanie NVIDIA Nsight do debugowania i analizowania programów CUDA w systemie Windows
Optymalizacja
- Zrozumienie czynników wpływających na wydajność programów CUDA
- Korzystanie z technik koalescencji CUDA w celu poprawy przepustowości pamięci
- Korzystanie z technik buforowania i pobierania wstępnego CUDA w celu zmniejszenia opóźnień pamięci
- Korzystanie z pamięci współdzielonej CUDA i technik pamięci lokalnej w celu optymalizacji dostępu do pamięci i przepustowości
- Korzystanie z profilowania CUDA i narzędzi do profilowania w celu pomiaru i poprawy czasu wykonywania i wykorzystania zasobów.
Podsumowanie i kolejne kroki
Wymagania
- Zrozumienie języka C/C++ i koncepcji programowania równoległego
- Podstawowa znajomość architektury komputera i hierarchii pamięci
- Doświadczenie z narzędziami wiersza poleceń i edytorami kodu
Odbiorcy
- Programiści, którzy chcą dowiedzieć się, jak używać CUDA do programowania układów NVIDIA GPU i wykorzystywania ich równoległości.
- Programiści, którzy chcą pisać wysokowydajny i skalowalny kod, który może być uruchamiany na różnych urządzeniach CUDA
- Programiści, którzy chcą poznać niskopoziomowe aspekty programowania GPU i zoptymalizować wydajność swojego kodu
28 godzin