Dziękujemy za wysłanie zapytania! Jeden z członków naszego zespołu skontaktuje się z Państwem wkrótce.
Dziękujemy za wysłanie rezerwacji! Jeden z członków naszego zespołu skontaktuje się z Państwem wkrótce.
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