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
Rozpoczęcie pracy
- Tworzenie nowego projektu CUDA w Visual Studio Code
- Eksploracja struktury i plików projektu
- Kompilowanie i uruchamianie programu
- Wyświetlanie wyników za pomocą printf i fprintf
CUDA API
- Zrozumienie roli CUDA API w programie hosta
- Użycie CUDA API do pobierania informacji i możliwości urządzenia
- Użycie CUDA API do alokowania i zwalniania pamięci urządzenia
- Użycie CUDA API do kopiowania danych między hostem a urządzeniem
- Użycie CUDA API do uruchamiania jąder i synchronizacji wątków
- Użycie 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życie CUDA C/C++ do pisania jąder wykonywanych na GPU i manipulowania danymi
- Użycie typów danych, kwalifikatorów, operatorów i wyrażeń CUDA C/C++
- Użycie wbudowanych funkcji CUDA C/C++, takich jak matematyczne, atomowe, warp itp.
- Użycie wbudowanych zmiennych CUDA C/C++, takich jak threadIdx, blockIdx, blockDim itp.
- Użycie 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
- Użycie przestrzeni pamięci CUDA, takich jak globalna, współdzielona, stała i lokalna
- Użycie obiektów pamięci CUDA, takich jak wskaźniki, tablice, tekstury i powierzchnie
- Użycie trybów dostępu do pamięci CUDA, takich jak tylko do odczytu, tylko do zapisu, odczyt-zapis itp.
- Użycie modelu spójności pamięci CUDA i mechanizmów synchronizacji
Model wykonania CUDA
- Zrozumienie różnicy między modelami wykonania hosta i urządzenia
- Użycie wątków, bloków i siatek CUDA do definiowania równoległości
- Użycie funkcji wątków CUDA, takich jak threadIdx, blockIdx, blockDim itp.
- Użycie funkcji bloków CUDA, takich jak __syncthreads, __threadfence_block itp.
- Użycie funkcji siatek CUDA, takich jak gridDim, gridSync, grupy współpracujące itp.
Debugowanie
- Zrozumienie typowych błędów i błędów w programach CUDA
- Użycie debuggera Visual Studio Code do inspekcji zmiennych, punktów przerwania, stosu wywołań itp.
- Użycie CUDA-GDB do debugowania programów CUDA na Linuxie
- Użycie CUDA-MEMCHECK do wykrywania błędów i wycieków pamięci
- Użycie NVIDIA Nsight do debugowania i analizy programów CUDA na Windowsie
Optymalizacja
- Zrozumienie czynników wpływających na wydajność programów CUDA
- Użycie technik łączenia CUDA w celu poprawy przepustowości pamięci
- Użycie technik buforowania i pobierania z wyprzedzeniem CUDA w celu zmniejszenia opóźnienia pamięci
- Użycie technik pamięci współdzielonej i lokalnej CUDA w celu optymalizacji dostępu do pamięci i przepustowości
- Użycie profilowania i narzędzi profilujących CUDA do mierzenia i poprawy czasu wykonania oraz wykorzystania zasobów
Podsumowanie i kolejne kroki
Wymagania
- Zrozumienie języka C/C++ oraz koncepcji programowania równoległego
- Podstawowa znajomość architektury komputera i hierarchii pamięci
- Doświadczenie w korzystaniu z narzędzi wiersza poleceń i edytorów kodu
Odbiorcy
- Programiści, którzy chcą nauczyć się korzystać z CUDA do programowania procesorów graficznych NVIDIA i wykorzystywać ich równoległość
- Programiści, którzy chcą pisać wydajny i skalowalny kod, który może działać na różnych urządzeniach CUDA
- Programiści, którzy chcą zgłębić niskopoziomowe aspekty programowania GPU i optymalizować wydajność swojego kodu
28 godzin