Bądźmy w kontakcie
 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

Liczba uczestników


Cena za uczestnika (netto)

Propozycje terminów

Powiązane Kategorie