Bądźmy w kontakcie
 Czas trwania 28 godzin

Plan Szkolenia

Wstęp

  • Czym jest OpenCL?
  • OpenCL w porównaniu z CUDA i SYCL
  • Przegląd funkcji i architektury OpenCL
  • Konfiguracja środowiska programistycznego

Pierwsze kroki

  • Tworzenie nowego projektu OpenCL w Visual Studio Code
  • Przeanalizowanie struktury projektu i plików
  • Kompilowanie i uruchamianie programu
  • Aktywność wyjściowa za pomocą printf i fprintf

API OpenCL

  • Zrozumienie roli API OpenCL w programie gospodarza
  • Wykorzystywanie API OpenCL do zapytywania o informacje i możliwości urządzenia
  • Wykorzystywanie API OpenCL do tworzenia kontekstów, kolejk komend, buforów, jąder i zdarzeń
  • Kolejonowanie komend za pomocą API OpenCL, takich jak odczyt, zapis, kopiowanie, mapowanie, odmapowanie, wykonywanie i czekanie
  • Obsługa błędów i wyjątków za pomocą API OpenCL

OpenCL C

  • Zrozumienie roli języka OpenCL C w programie urządzenia
  • Pisanie jąder wykonujących się na urządzeniu i manipulujących danymi w OpenCL C
  • Wykorzystywanie typów danych, modyfikatorów, operatorów i wyrażeń w OpenCL C
  • Wykorzystywanie wbudowanych funkcji OpenCL C, takich jak matematyczne, geometryczne, relacyjne itp.
  • Wykorzystywanie rozszerzeń i bibliotek OpenCL C, takich jak atomowe, obrazowe, cl_khr_fp16 itp.

Model pamięci OpenCL

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

Model wykonywania OpenCL

  • Zrozumienie różnic między modelem wykonywania gospodarza a urządzenia
  • Definiowanie paralelizmu za pomocą elementów pracy, grup pracy i zakresów ND w OpenCL
  • Wykorzystywanie funkcji elementów pracy OpenCL, takich jak get_global_id, get_local_id, get_group_id itp.
  • Wykorzystywanie funkcji grup pracy OpenCL, takich jak barrier, work_group_reduce, work_group_scan itp.
  • Wykorzystywanie funkcji urządzenia OpenCL, takich jak get_num_groups, get_global_size, get_local_size itp.

Debugowanie

  • Zrozumienie powszechnych błędów i usterek w programach OpenCL
  • Używanie debuggera Visual Studio Code do inspekcji zmiennych, punktów kontrolnych, stosu wywołań itp.
  • Debugowanie i analiza programów OpenCL na urządzeniach AMD za pomocą CodeXL
  • Debugowanie i analiza programów OpenCL na urządzeniach Intel za pomocą Intel VTune
  • Debugowanie i analiza programów OpenCL na urządzeniach NVIDIA za pomocą NVIDIA Nsight

Optymalizacja

  • Zrozumienie czynników wpływających na wydajność programów OpenCL
  • Poprawa przepustowości arytmetycznej za pomocą wektorowych typów danych i technik wektoryzacji OpenCL
  • Zmniejszenie nakładów na sterowanie i zwiększenie lokalności za pomocą rozwijania i kafelkowania pętli w OpenCL
  • Optymalizacja dostępu do pamięci i przepustowości za pomocą pamięci lokalnej i funkcji pamięci lokalnej OpenCL
  • Pomiar i poprawa czasu wykonania oraz wykorzystania zasobów za pomocą profilowania i narzędzi do profilowania OpenCL

Wymagania

  • Znajomość języka C/C++ i koncepcji programowania równoległego
  • Podstawowa wiedza z zakresu architektury komputerów i hierarchii pamięci
  • Doświadczenie w pracy z narzędziami wiersza poleceń i edytorami kodu

Grupa docelowa

  • Programiści, którzy chcą się nauczyć programowania heterogenicznych urządzeń z użyciem OpenCL i wykorzystywania ich paralelizmu
  • Programiści, którzy chcą pisać przenośny i skalowalny kod działający na różnych platformach i urządzeniach
  • Programiści, którzy chcą zgłębić niskopoziomowe aspekty programowania heterogenicznego i zoptymalizować wydajność swojego kodu

Liczba uczestników


Cena za uczestnika (netto)

Propozycje terminów

Powiązane Kategorie