Thank you for sending your enquiry! One of our team members will contact you shortly.
Thank you for sending your booking! One of our team members will contact you shortly.
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