Plan Szkolenia

Wprowadzenie

  • Czym jest OpenCL?
  • OpenCL vs CUDA vs SYCL
  • Przegląd funkcji i architektury OpenCL
  • Konfiguracja środowiska programistycznego

Pierwsze kroki

  • Tworzenie nowego projektu OpenCL 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 OpenCL

  • Zrozumienie roli OpenCL API w programie hosta
  • Używanie OpenCL API do wyszukiwania informacji o urządzeniu i jego możliwościach
  • Używanie OpenCL API do tworzenia kontekstów, kolejek poleceń, buforów, jąder i zdarzeń
  • Używanie OpenCL API do kolejkowania poleceń, takich jak odczyt, zapis, kopiowanie, mapowanie, odmapowywanie, wykonywanie i oczekiwanie.
  • Używanie OpenCL API do obsługi błędów i wyjątków

OpenCL C

  • Zrozumienie roli OpenCL C w programie urządzenia
  • Używanie OpenCL C do pisania jąder, które wykonują się na urządzeniu i manipulują danymi
  • Używanie OpenCL C typów danych, kwalifikatorów, operatorów i wyrażeń
  • Korzystanie z wbudowanych funkcji języka OpenCL C, takich jak funkcje matematyczne, geometryczne, relacyjne itp.
  • Korzystanie z OpenCL rozszerzeń i bibliotek języka C, takich jak atomic, image, cl_khr_fp16 itp.

Model pamięci OpenCL

  • Zrozumienie różnicy między modelami pamięci hosta i urządzenia
  • Korzystanie z OpenCL przestrzeni pamięci, takich jak globalna, lokalna, stała i prywatna
  • Korzystanie z obiektów pamięci OpenCL, takich jak bufory, obrazy i potoki
  • Korzystanie z trybów dostępu do pamięci OpenCL, takich jak tylko do odczytu, tylko do zapisu, odczyt-zapis itp.
  • Korzystanie z OpenCL modelu spójności pamięci i mechanizmów synchronizacji

Model wykonania OpenCL

  • Zrozumienie różnicy między modelami wykonania hosta i urządzenia
  • Używanie OpenCL elementów roboczych, grup roboczych i zakresów ND do definiowania równoległości
  • Korzystanie z OpenCL funkcji elementów roboczych, takich jak get_global_id, get_local_id, get_group_id itp.
  • Używanie OpenCL funkcji grupy roboczej, takich jak barrier, work_group_reduce, work_group_scan itp.
  • Używanie OpenCL funkcji urządzenia, takich jak get_num_groups, get_global_size, get_local_size itp.

Debugowanie

  • Zrozumienie typowych błędów i usterek w OpenCL programach
  • Używanie debuggera Visual Studio Code do sprawdzania zmiennych, punktów przerwania, stosu wywołań itp.
  • Używanie CodeXL do debugowania i analizowania OpenCL programów na urządzeniach AMD
  • Używanie Intel VTune do debugowania i analizowania OpenCL programów na urządzeniach Intel
  • Używanie NVIDIA Nsight do debugowania i analizowania OpenCL programów na urządzeniach NVIDIA

Optymalizacja

  • Zrozumienie czynników wpływających na wydajność programów OpenCL
  • Korzystanie z OpenCL wektorowych typów danych i technik wektoryzacji w celu poprawy przepustowości arytmetycznej
  • Korzystanie z technik rozwijania i kafelkowania pętli OpenCL w celu zmniejszenia narzutu sterowania i zwiększenia lokalności
  • Korzystanie z OpenCL pamięci lokalnej i funkcji pamięci lokalnej w celu optymalizacji dostępu do pamięci i przepustowości
  • Korzystanie z OpenCL profilowania i narzędzi do profilowania w celu pomiaru i poprawy czasu wykonania 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ć OpenCL do programowania heterogenicznych urządzeń i wykorzystywania ich równoległości.
  • Programiści, którzy chcą pisać przenośny i skalowalny kod, który może działać na różnych platformach i urządzeniach
  • Programiści, którzy chcą poznać niskopoziomowe aspekty programowania heterogenicznego i zoptymalizować wydajność swojego kodu
 28 godzin

Liczba uczestników


cena netto za uczestnika

Opinie uczestników (3)

Propozycje terminów