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