Bądźmy w kontakcie

Plan Szkolenia

Wprowadzenie

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

Rozpoczęcie pracy

  • Tworzenie nowego projektu OpenCL przy użyciu Visual Studio Code
  • Eksploracja struktury i plików projektu
  • Kompilacja i uruchamianie programu
  • Wyświetlanie wyników za pomocą printf i fprintf

OpenCL API

  • Zrozumienie roli OpenCL API w programie hosta
  • Wykorzystanie OpenCL API do pobierania informacji i możliwości urządzenia
  • Wykorzystanie OpenCL API do tworzenia kontekstów, kolejek poleceń, buforów, kernelów i zdarzeń
  • Wykorzystanie OpenCL API do kolejkowania poleceń, takich jak odczyt, zapis, kopiowanie, mapowanie, odmapowanie, wykonanie i oczekiwanie
  • Wykorzystanie OpenCL API do obsługi błędów i wyjątków

OpenCL C

  • Zrozumienie roli OpenCL C w programie urządzenia
  • Wykorzystanie OpenCL C do pisania kernelów, które wykonują się na urządzeniu i manipulują danymi
  • Wykorzystanie typów danych, kwalifikatorów, operatorów i wyrażeń OpenCL C
  • Wykorzystanie wbudowanych funkcji OpenCL C, takich jak matematyczne, geometryczne, relacyjne itp.
  • Wykorzystanie rozszerzeń i bibliotek OpenCL 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
  • Wykorzystanie przestrzeni pamięci OpenCL, takich jak globalna, lokalna, stała i prywatna
  • Wykorzystanie obiektów pamięci OpenCL, takich jak bufory, obrazy i potoki
  • Wykorzystanie trybów dostępu do pamięci OpenCL, takich jak tylko do odczytu, tylko do zapisu, odczyt-zapis itp.
  • Wykorzystanie modelu spójności pamięci i mechanizmów synchronizacji OpenCL

Model wykonania OpenCL

  • Zrozumienie różnicy między modelami wykonania hosta i urządzenia
  • Wykorzystanie work-items, work-groups i ND-ranges do definiowania równoległości
  • Wykorzystanie funkcji work-item, takich jak get_global_id, get_local_id, get_group_id itp.
  • Wykorzystanie funkcji work-group, takich jak barrier, work_group_reduce, work_group_scan itp.
  • Wykorzystanie funkcji urządzenia, takich jak get_num_groups, get_global_size, get_local_size itp.

Debugowanie

  • Zrozumienie typowych błędów i problemów w programach OpenCL
  • Wykorzystanie debuggera Visual Studio Code do inspekcji zmiennych, punktów przerwania, stosu wywołań itp.
  • Wykorzystanie CodeXL do debugowania i analizy programów OpenCL na urządzeniach AMD
  • Wykorzystanie Intel VTune do debugowania i analizy programów OpenCL na urządzeniach Intel
  • Wykorzystanie NVIDIA Nsight do debugowania i analizy programów OpenCL na urządzeniach NVIDIA

Optymalizacja

  • Zrozumienie czynników wpływających na wydajność programów OpenCL
  • Wykorzystanie typów danych wektorowych i technik wektoryzacji do poprawy przepustowości arytmetycznej
  • Wykorzystanie technik rozwinięcia pętli i kafelkowania pętli do redukcji narzutu sterowania i zwiększenia lokalności
  • Wykorzystanie pamięci lokalnej i funkcji pamięci lokalnej do optymalizacji dostępu do pamięci i przepustowości
  • Wykorzystanie profilowania i narzędzi profilujących do mierzenia i poprawy czasu wykonania oraz wykorzystania zasobów

Podsumowanie i kolejne kroki

Wymagania

  • Znajomość języka C/C++ oraz pojęć programowania równoległego
  • Podstawowa wiedza na temat architektury komputerów i hierarchii pamięci
  • Doświadczenie w korzystaniu z narzędzi wiersza poleceń i edytorów kodu

Grupa docelowa

  • Programiści, którzy chcą nauczyć się korzystać z OpenCL do programowania urządzeń heterogenicznych i wykorzystania 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ą zgłębić niskopoziomowe aspekty programowania heterogenicznego i optymalizować wydajność swojego kodu
 28 godzin

Liczba uczestników


Cena za uczestnika (netto)

Propozycje terminów

Powiązane Kategorie