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