Plan Szkolenia

Wprowadzenie

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

Rozpoczynanie pracy

  • Tworzenie nowego projektu OpenCL za pomocą Visual Studio Code
  • Przeglądanie struktury projektu i plików
  • Kompilowanie i uruchamianie programu
  • Wyświetlanie wyników za pomocą printf i fprintf

API OpenCL

  • Zrozumienie roli API OpenCL w programie hosta
  • Używanie API OpenCL do zapytania o informacje i możliwości urządzenia
  • Używanie API OpenCL do tworzenia kontekstów, kolejki poleceń, buforów, jądra i zdarzeń
  • Używanie API OpenCL do kolejkowania poleceń, takich jak odczyt, zapis, kopiowanie, mapowanie, odmapowywanie, wykonywanie i oczekiwanie
  • Używanie API OpenCL 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ądra, które wykonuje się na urządzeniu i manipuluje danymi
  • Używanie typów danych, kwalifikatorów, operatorów i wyrażeń OpenCL C
  • Używanie wbudowanych funkcji OpenCL C, takich jak matematyczne, geometryczne, relacyjne itd.
  • Używanie rozszerzeń i bibliotek OpenCL C, takich jak atomowe, obraz, cl_khr_fp16 itd.

Model pamięci OpenCL

  • Zrozumienie różnicy między modelami pamięci hosta i urządzenia
  • Używanie przestrzeni pamięci OpenCL, takich jak globalne, lokalne, stałe i prywatne
  • Używanie obiektów pamięci OpenCL, takich jak bufory, obrazki i rury
  • Używanie trybów dostępu do pamięci OpenCL, takich jak tylko do odczytu, tylko do zapisu, odczyt/zapis itd.
  • Używanie modelu zgodności pamięci OpenCL i mechanizmów synchronizacji

Model wykonania OpenCL

  • Zrozumienie różnicy między modelami wykonania hosta i urządzenia
  • Używanie elementów pracy, grup pracy i ND-range do zdefiniowania równoległości
  • Używanie funkcji elementów pracy, takich jak get_global_id, get_local_id, get_group_id itd.
  • Używanie funkcji grup pracy, takich jak bariera, work_group_reduce, work_group_scan itd.
  • Używanie funkcji urządzenia, takich jak get_num_groups, get_global_size, get_local_size itd.

Debugowanie

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

Optymalizacja

  • Zrozumienie czynników wpływających na wydajność programów OpenCL
  • Używanie typów danych wektorowych OpenCL i technik wektorizacji do poprawy przepustowości arytmetycznej
  • Używanie technik rozwijania pętli i układania pętli do zmniejszenia nadmiaru sterowania i zwiększenia lokalności
  • Używanie pamięci lokalnej i funkcji pamięci lokalnej OpenCL do optymalizacji dostępu do pamięci i przepustowości
  • Używanie profilowania i narzędzi profilowania OpenCL do pomiaru i poprawy czasu wykonania i wykorzystania zasobów

Podsumowanie i następne kroki

Wymagania

  • Zrozumienie języka C/C++ oraz koncepcji programowania równoległego
  • Podstawowa wiedza o architekturze komputerów i hierarchii pamięci
  • Doświadczenie w używaniu narzędzi wiersza polecenia i edytorów kodu

Grupa docelowa

  • Programiści chcący poznać sposobu używania OpenCL do programowania urządzeń heterogenicznych i wykorzystania ich równoległości
  • Programiści chcący pisać przenośny i skalowalny kod, który może działać na różnych platformach i urządzeniach
  • Programiści chcący zgłębić aspekty niskopoziomowe programowania heterogenicznego i optymalizować wydajność kodu
 28 godzin

Liczba uczestników


cena netto za uczestnika

Propozycje terminów

Powiązane Kategorie