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

Liczba uczestników


cena netto za uczestnika

Opinie uczestników (2)

Propozycje terminów

Powiązane Kategorie