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.
Czas trwania 28 godzin
Plan Szkolenia
Wprowadzenie
- Czym jest CUDA?
- CUDA vs OpenCL vs SYCL
- Przegląd funkcji i architektury CUDA
- Konfiguracja środowiska deweloperskiego
Pierwsze kroki
- Tworzenie nowego projektu CUDA za pomocą Visual Studio Code
- Przegląd struktury projektu i plików
- Kompilowanie i uruchamianie programu
- Wyświetlanie wyników za pomocą printf i fprintf
API CUDA
- Rola API CUDA w programie hosta
- Używanie API CUDA do zapytywania informacji o urządzeniu i jego możliwościach
- Używanie API CUDA do alokowania i zwalniania pamięci urządzenia
- Używanie API CUDA do kopiowania danych między hostem a urządzeniem
- Używanie API CUDA do uruchamiania kerneli i synchronizacji wątków
- Używanie API CUDA do obsługi błędów i wyjątków
CUDA C/C++
- Rola CUDA C/C++ w programie urządzenia
- Pisanie kerneli wykonywanych na GPU i manipulacja danymi przy użyciu CUDA C/C++
- Typy danych, kwalifikatory, operatory i wyrażenia w CUDA C/C++
- Wbudowane funkcje CUDA C/C++, takie jak matematyczne, atomowe, warp itp.
- Wbudowane zmienne CUDA C/C++, takie jak threadIdx, blockIdx, blockDim itp.
- Biblioteki CUDA C/C++, takie jak cuBLAS, cuFFT, cuRAND itp.
Model pamięci CUDA
- Różnice między modelem pamięci hosta a urządzenia
- Przestrzenie pamięci CUDA: globalna, współdzielona, stała i lokalna
- Obiekty pamięci CUDA, takie jak wskaźniki, tablice, tekstury i powierzchnie
- Tryby dostępu do pamięci CUDA, takie jak tylko do odczytu, tylko do zapisu, odczyt-zapis itp.
- Model spójności pamięci CUDA i mechanizmy synchronizacji
Model wykonania CUDA
- Różnice między modelem wykonania hosta a urządzenia
- Używanie wątków, bloków i siatek CUDA do definiowania równoległości
- Funkcje wątków CUDA, takie jak threadIdx, blockIdx, blockDim itp.
- Funkcje bloków CUDA, takie jak __syncthreads, __threadfence_block itp.
- Funkcje siatek CUDA, takie jak gridDim, gridSync, cooperative groups itp.
Debugowanie
- Powszechne błędy i problemy w programach CUDA
- Korzystanie z debuggera Visual Studio Code do inspekcji zmiennych, punktów przerywania, stosu wywołań itp.
- Debugowanie programów CUDA na Linuxie za pomocą CUDA-GDB
- Detection błędów i wycieków pamięci za pomocą CUDA-MEMCHECK
- Debugowanie i analiza programów CUDA na Windowsie za pomocą NVIDIA Nsight
Optymalizacja
- Czynniki wpływające na wydajność programów CUDA
- Techniki koalescencji CUDA w celu poprawy przepustowości pamięci
- Techniki cache i prefetching w CUDA w celu zmniejszenia opóźnień pamięci
- Techniki pamięci współdzielonej i lokalnej w CUDA w celu optymalizacji dostępu do pamięci i przepustowości
- Profilowanie w CUDA i narzędzia do profilowania w celu pomiaru i poprawy czasu wykonania oraz wykorzystania zasobów
Wymagania
- Znajomość języka C/C++ i koncepcji programowania równoległego
- Podstawowa wiedza o architekturze komputerów i hierarchii pamięci
- Doświadczenie w korzystaniu z narzędzi wiersza poleceń i edytorów kodu
Grupa docelowa
- Programiści chcący nauczyć się programowania kart NVIDIA za pomocą CUDA i wykorzystywania ich równoległości
- Programiści chcący tworzyć wydajny i skalowalny kod, który można uruchamiać na różnych urządzeniach CUDA
- Programiści chcący zgłębić niskopoziomowe aspekty programowania GPU i zoptymalizować wydajność swojego kodu