Course Code: gpuprogopencl
Duration: 28 hours
Prerequisites:
  • 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
Overview:

OpenCL to otwarty standard dla programowania heterogenicznego, który pozwala na uruchamianie kodu na różnych platformach i urządzeniach, takich jak wielordzeniowe CPU, GPU, FPGA i inne. OpenCL udostępnia programistom szczegóły sprzętowe i daje pełną kontrolę nad procesem równoległości. Wymaga to jednak dobrego zrozumienia architektury urządzenia, modelu pamięci, modelu wykonania oraz technik optymalizacji.

To szkolenie prowadzone przez instruktora (online lub na miejscu) jest przeznaczone dla początkujących i średnio zaawansowanych programistów, którzy chcą używać OpenCL do programowania urządzeń heterogenicznych i wykorzystywania ich równoległości.

Po zakończeniu tego szkolenia uczestnicy będą w stanie:

  • Zainstalować środowisko programistyczne, które zawiera OpenCL SDK, urządzenie obsługujące OpenCL oraz Visual Studio Code.
  • Utworzyć podstawowy program OpenCL, który wykonuje dodawanie wektorów na urządzeniu i pobiera wyniki z pamięci urządzenia.
  • Używać API OpenCL do zapytywania informacji o urządzeniu, tworzenia kontekstów, kolejki poleceń, buforów, jąder i zdarzeń.
  • Używać języka C OpenCL do pisania jąder, które wykonują się na urządzeniu i manipulują danymi.
  • Używać wbudowanych funkcji, rozszerzeń i bibliotek OpenCL do wykonywania typowych zadań i operacji.
  • Używać modelu pamięci hosta i urządzenia OpenCL do optymalizacji transferu danych i dostępu do pamięci.
  • Używać modelu wykonania OpenCL do kontroli nad jednostkami pracy, grupami pracy i ND-zakresami.
  • Diagnostykować i testować programy OpenCL za pomocą narzędzi, takich jak CodeXL, Intel VTune i NVIDIA Nsight.
  • Optymalizować programy OpenCL za pomocą technik, takich jak wektoryzacja, rozwijanie pętli, lokalna pamięć oraz profilowanie.

Format kursu

  • Interaktywne wykłady i dyskusje.
  • Wiele ćwiczeń i praktyki.
  • Ręczne wdrożenie w żywym środowisku laboratoryjnym.

Opcje dostosowania kursu

  • Aby złożyć wniosek o dostosowane szkolenie dla tego kursu, skontaktuj się z nami w celu uzgodnienia szczegółów.
Course Outline:

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

Sites Published:

United Arab Emirates - GPU Programming with OpenCL

Qatar - GPU Programming with OpenCL

Egypt - GPU Programming with OpenCL

Saudi Arabia - GPU Programming with OpenCL

South Africa - GPU Programming with OpenCL

Brasil - GPU Programming with OpenCL

Canada - GPU Programming with OpenCL

中国 - GPU Programming with OpenCL

香港 - GPU Programming with OpenCL

澳門 - GPU Programming with OpenCL

台灣 - GPU Programming with OpenCL

USA - GPU Programming with OpenCL

Österreich - GPU Programming with OpenCL

Schweiz - GPU Programming with OpenCL

Deutschland - GPU Programming with OpenCL

Czech Republic - GPU Programming with OpenCL

Denmark - GPU Programming with OpenCL

Estonia - GPU Programming with OpenCL

Finland - GPU Programming with OpenCL

Greece - GPU Programming with OpenCL

Magyarország - GPU Programming with OpenCL

Ireland - GPU Programming with OpenCL

Luxembourg - GPU Programming with OpenCL

Latvia - GPU Programming with OpenCL

España - GPU Programming with OpenCL

Italia - GPU Programming with OpenCL

Lithuania - GPU Programming with OpenCL

Nederland - GPU Programming with OpenCL

Norway - GPU Programming with OpenCL

Portugal - GPU Programming with OpenCL

România - GPU Programming with OpenCL

Sverige - GPU Programming with OpenCL

Türkiye - GPU Programming with OpenCL

Malta - GPU Programming with OpenCL

Belgique - GPU Programming with OpenCL

France - GPU Programming with OpenCL

日本 - GPU Programming with OpenCL

Australia - GPU Programming with OpenCL

Malaysia - GPU Programming with OpenCL

New Zealand - GPU Programming with OpenCL

Philippines - GPU Programming with OpenCL

Singapore - GPU Programming with OpenCL

Thailand - GPU Programming with OpenCL

Vietnam - GPU Programming with OpenCL

India - GPU Programming with OpenCL

Argentina - GPU Programming with OpenCL

Chile - GPU Programming with OpenCL

Costa Rica - GPU Programming with OpenCL

Ecuador - GPU Programming with OpenCL

Guatemala - GPU Programming with OpenCL

Colombia - GPU Programming with OpenCL

México - GPU Programming with OpenCL

Panama - GPU Programming with OpenCL

Peru - GPU Programming with OpenCL

Uruguay - GPU Programming with OpenCL

Venezuela - GPU Programming with OpenCL

Polska - GPU Programming with OpenCL

United Kingdom - GPU Programming with OpenCL

South Korea - GPU Programming with OpenCL

Pakistan - GPU Programming with OpenCL

Sri Lanka - GPU Programming with OpenCL

Bulgaria - GPU Programming with OpenCL

Bolivia - GPU Programming with OpenCL

Indonesia - GPU Programming with OpenCL

Kazakhstan - GPU Programming with OpenCL

Moldova - GPU Programming with OpenCL

Morocco - GPU Programming with OpenCL

Tunisia - GPU Programming with OpenCL

Kuwait - GPU Programming with OpenCL

Oman - GPU Programming with OpenCL

Slovakia - GPU Programming with OpenCL

Kenya - GPU Programming with OpenCL

Nigeria - GPU Programming with OpenCL

Botswana - GPU Programming with OpenCL

Slovenia - GPU Programming with OpenCL

Croatia - GPU Programming with OpenCL

Serbia - GPU Programming with OpenCL

Bhutan - GPU Programming with OpenCL

Nepal - GPU Programming with OpenCL

Uzbekistan - GPU Programming with OpenCL