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.
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