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

Liczba uczestników


Cena za uczestnika (netto)

Propozycje terminów

Powiązane Kategorie