- Znajomość języka C/C++ i koncepcji programowania równoległego
- Podstawowa wiedza o architekturze komputera i hierarchii pamięci
- Doświadczenie w korzystaniu z narzędzi wiersza polecenia i edytorów kodu
Grupa docelowa
- Programiści, którzy chcą nauczyć się korzystania z różnych frameworków do programowania GPU i porównywania ich funkcji, wydajności i kompatybilnoś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ą eksplorować kompromisy i wyzwania związane z programowaniem GPU i optymalizacją
GPU programming to technika, która wykorzystuje moc równoległego przetwarzania GPUs w celu przyspieszenia aplikacji wymagających wysokowydajnego obliczeń, takich jak sztuczna inteligencja, gry, grafika i obliczenia naukowe. Istnieje kilka frameworków, które umożliwiają programowanie GPU, każdy z własnymi zaletami i wadami. OpenCL jest otwartym standardem, który można użyć do programowania CPU, GPUs oraz innych urządzeń od różnych producentów, podczas gdy CUDA jest specyficzne dla GPUs NVIDIA. ROCm jest platformą, która wspiera programowanie GPU na GPUs AMD, a także zapewnia kompatybilność z CUDA i OpenCL.
To szkolenie prowadzone przez instruktora (online lub stacjonarnie) skierowane jest do developerów na poziomie początkującego do średniozaawansowanego, którzy chcą używać różnych frameworków do programowania GPU i porównywać ich funkcje, wydajność i kompatybilność.
Po ukończeniu tego szkolenia uczestnicy będą w stanie:
- Zainstalować środowisko rozwojowe, które zawiera OpenCL SDK, CUDA Toolkit, platformę ROCm, urządzenie obsługujące OpenCL, CUDA lub ROCm oraz Visual Studio Code.
- Utworzyć podstawowy program GPU, który wykonuje dodawanie wektorów za pomocą OpenCL, CUDA i ROCm, a następnie porównać składnię, strukturę i wykonywanie każdego z frameworków.
- Użyć odpowiednich API do zapytań informacji o urządzeniach, alokacji i dealokacji pamięci urządzenia, kopiowania danych między hostem a urządzeniem, uruchamiania jąder i synchronizacji wątków.
- Napisać jądra, które działają na urządzeniu i manipulują danymi za pomocą odpowiednich języków.
- Użyć wbudowanych funkcji, zmiennych i bibliotek, aby wykonywać typowe zadania i operacje.
- Użyć odpowiednich przestrzeni pamięci, takich jak globalna, lokalna, stałe i prywatne, aby optymalizować transfery danych i dostępy do pamięci.
- Użyć odpowiednich modeli wykonywania do kontrolowania wątków, bloków i siatek, które definiują równoległość.
- Debugować i testować programy GPU za pomocą narzędzi takich jak CodeXL, CUDA-GDB, CUDA-MEMCHECK i NVIDIA Nsight.
- Optymalizować programy GPU za pomocą technik takich jak koalescencja, buforowanie, prefetching i profilowanie.
Format kursu
- Interaktywne wykłady i dyskusje.
- Wiele ćwiczeń i praktyki.
- Ręczna implementacja w środowisku live-lab.
Opcje dostosowania kursu
- Aby poprosić o dostosowanie tego kursu, prosimy o kontakt w celu ustalenia szczegółów.
Wprowadzenie
- Co to jest programowanie GPU?
- Dlaczego używać programowania GPU?
- Jakie są wyzwania i kompromisy związane z programowaniem GPU?
- Jakie są ramy programowania GPU?
- Wybór odpowiedniej ramy dla aplikacji
OpenCL
- Co to jest OpenCL?
- Jakie są zalety i wady OpenCL?
- Konfiguracja środowiska rozwoju dla OpenCL
- Tworzenie podstawowego programu OpenCL, który wykonuje dodawanie wektorów
- Używanie API OpenCL do zapytania o informacje urządzenia, alokacji i dealokacji pamięci urządzenia, kopiowania danych między hostem a urządzeniem, uruchamiania jądra i synchronizacji wątków
- Używanie języka C OpenCL do pisania jądra, które wykonuje się na urządzeniu i manipuluje danymi
- Używanie wbudowanych funkcji, zmiennych i bibliotek OpenCL do wykonywania typowych zadań i operacji
- Używanie przestrzeni pamięci OpenCL, takich jak globalna, lokalna, stała i prywatna, aby optymalizować transfery danych i dostęp do pamięci
- Używanie modelu wykonania OpenCL do kontrolowania jednostek pracy, grup pracy i zakresów ND, które definiują równoległość
- Debugowanie i testowanie programów OpenCL za pomocą narzędzi, takich jak CodeXL
- Optymalizacja programów OpenCL za pomocą technik, takich jak scalenie, buforowanie, pobieranie z wyprzedzeniem i profilowanie
CUDA
- Co to jest CUDA?
- Jakie są zalety i wady CUDA?
- Konfiguracja środowiska rozwoju dla CUDA
- Tworzenie podstawowego programu CUDA, który wykonuje dodawanie wektorów
- Używanie API CUDA do zapytania o informacje urządzenia, alokacji i dealokacji pamięci urządzenia, kopiowania danych między hostem a urządzeniem, uruchamiania jądra i synchronizacji wątków
- Używanie języka C/C++ CUDA do pisania jądra, które wykonuje się na urządzeniu i manipuluje danymi
- Używanie wbudowanych funkcji, zmiennych i bibliotek CUDA do wykonywania typowych zadań i operacji
- Używanie przestrzeni pamięci CUDA, takich jak globalna, współdzielona, stała i lokalna, aby optymalizować transfery danych i dostęp do pamięci
- Używanie modelu wykonania CUDA do kontrolowania wątków, bloków i siatek, które definiują równoległość
- Debugowanie i testowanie programów CUDA za pomocą narzędzi, takich jak CUDA-GDB, CUDA-MEMCHECK i NVIDIA Nsight
- Optymalizacja programów CUDA za pomocą technik, takich jak scalenie, buforowanie, pobieranie z wyprzedzeniem i profilowanie
ROCm
- Co to jest ROCm?
- Jakie są zalety i wady ROCm?
- Konfiguracja środowiska rozwoju dla ROCm
- Tworzenie podstawowego programu ROCm, który wykonuje dodawanie wektorów
- Używanie API ROCm do zapytania o informacje urządzenia, alokacji i dealokacji pamięci urządzenia, kopiowania danych między hostem a urządzeniem, uruchamiania jądra i synchronizacji wątków
- Używanie języka C/C++ ROCm do pisania jądra, które wykonuje się na urządzeniu i manipuluje danymi
- Używanie wbudowanych funkcji, zmiennych i bibliotek ROCm do wykonywania typowych zadań i operacji
- Używanie przestrzeni pamięci ROCm, takich jak globalna, lokalna, stała i prywatna, aby optymalizować transfery danych i dostęp do pamięci
- Używanie modelu wykonania ROCm do kontrolowania wątków, bloków i siatek, które definiują równoległość
- Debugowanie i testowanie programów ROCm za pomocą narzędzi, takich jak ROCm Debugger i ROCm Profiler
- Optymalizacja programów ROCm za pomocą technik, takich jak scalenie, buforowanie, pobieranie z wyprzedzeniem i profilowanie
Porównanie
- Porównanie funkcji, wydajności i kompatybilności OpenCL, CUDA i ROCm
- Ocena programów GPU za pomocą benchmarków i metryk
- Poznanie najlepszych praktyk i porad dotyczących programowania GPU
- Badając bieżące i przyszłe trendy oraz wyzwania związane z programowaniem GPU
Podsumowanie i następne kroki
United Arab Emirates - GPU Programming - OpenCL vs CUDA vs ROCm
Qatar - GPU Programming - OpenCL vs CUDA vs ROCm
Egypt - GPU Programming - OpenCL vs CUDA vs ROCm
Saudi Arabia - GPU Programming - OpenCL vs CUDA vs ROCm
South Africa - GPU Programming - OpenCL vs CUDA vs ROCm
Brasil - GPU Programming - OpenCL vs CUDA vs ROCm
Canada - GPU Programming - OpenCL vs CUDA vs ROCm
中国 - GPU Programming - OpenCL vs CUDA vs ROCm
香港 - GPU Programming - OpenCL vs CUDA vs ROCm
澳門 - GPU Programming - OpenCL vs CUDA vs ROCm
台灣 - GPU Programming - OpenCL vs CUDA vs ROCm
USA - GPU Programming - OpenCL vs CUDA vs ROCm
Österreich - GPU Programming - OpenCL vs CUDA vs ROCm
Schweiz - GPU Programming - OpenCL vs CUDA vs ROCm
Deutschland - GPU Programming - OpenCL vs CUDA vs ROCm
Czech Republic - GPU Programming - OpenCL vs CUDA vs ROCm
Denmark - GPU Programming - OpenCL vs CUDA vs ROCm
Estonia - GPU Programming - OpenCL vs CUDA vs ROCm
Finland - GPU Programming - OpenCL vs CUDA vs ROCm
Greece - GPU Programming - OpenCL vs CUDA vs ROCm
Magyarország - GPU Programming - OpenCL vs CUDA vs ROCm
Ireland - GPU Programming - OpenCL vs CUDA vs ROCm
Luxembourg - GPU Programming - OpenCL vs CUDA vs ROCm
Latvia - GPU Programming - OpenCL vs CUDA vs ROCm
España - GPU Programming - OpenCL vs CUDA vs ROCm
Italia - GPU Programming - OpenCL vs CUDA vs ROCm
Lithuania - GPU Programming - OpenCL vs CUDA vs ROCm
Nederland - GPU Programming - OpenCL vs CUDA vs ROCm
Norway - GPU Programming - OpenCL vs CUDA vs ROCm
Portugal - GPU Programming - OpenCL vs CUDA vs ROCm
România - GPU Programming - OpenCL vs CUDA vs ROCm
Sverige - GPU Programming - OpenCL vs CUDA vs ROCm
Türkiye - GPU Programming - OpenCL vs CUDA vs ROCm
Malta - GPU Programming - OpenCL vs CUDA vs ROCm
Belgique - GPU Programming - OpenCL vs CUDA vs ROCm
France - GPU Programming - OpenCL vs CUDA vs ROCm
日本 - GPU Programming - OpenCL vs CUDA vs ROCm
Australia - GPU Programming - OpenCL vs CUDA vs ROCm
Malaysia - GPU Programming - OpenCL vs CUDA vs ROCm
New Zealand - GPU Programming - OpenCL vs CUDA vs ROCm
Philippines - GPU Programming - OpenCL vs CUDA vs ROCm
Singapore - GPU Programming - OpenCL vs CUDA vs ROCm
Thailand - GPU Programming - OpenCL vs CUDA vs ROCm
Vietnam - GPU Programming - OpenCL vs CUDA vs ROCm
India - GPU Programming - OpenCL vs CUDA vs ROCm
Argentina - GPU Programming - OpenCL vs CUDA vs ROCm
Chile - GPU Programming - OpenCL vs CUDA vs ROCm
Costa Rica - GPU Programming - OpenCL vs CUDA vs ROCm
Ecuador - GPU Programming - OpenCL vs CUDA vs ROCm
Guatemala - GPU Programming - OpenCL vs CUDA vs ROCm
Colombia - GPU Programming - OpenCL vs CUDA vs ROCm
México - GPU Programming - OpenCL vs CUDA vs ROCm
Panama - GPU Programming - OpenCL vs CUDA vs ROCm
Peru - GPU Programming - OpenCL vs CUDA vs ROCm
Uruguay - GPU Programming - OpenCL vs CUDA vs ROCm
Venezuela - GPU Programming - OpenCL vs CUDA vs ROCm
Polska - GPU Programming - OpenCL vs CUDA vs ROCm
United Kingdom - GPU Programming - OpenCL vs CUDA vs ROCm
South Korea - GPU Programming - OpenCL vs CUDA vs ROCm
Pakistan - GPU Programming - OpenCL vs CUDA vs ROCm
Sri Lanka - GPU Programming - OpenCL vs CUDA vs ROCm
Bulgaria - GPU Programming - OpenCL vs CUDA vs ROCm
Bolivia - GPU Programming - OpenCL vs CUDA vs ROCm
Indonesia - GPU Programming - OpenCL vs CUDA vs ROCm
Kazakhstan - GPU Programming - OpenCL vs CUDA vs ROCm
Moldova - GPU Programming - OpenCL vs CUDA vs ROCm
Morocco - GPU Programming - OpenCL vs CUDA vs ROCm
Tunisia - GPU Programming - OpenCL vs CUDA vs ROCm
Kuwait - GPU Programming - OpenCL vs CUDA vs ROCm
Oman - GPU Programming - OpenCL vs CUDA vs ROCm
Slovakia - GPU Programming - OpenCL vs CUDA vs ROCm
Kenya - GPU Programming - OpenCL vs CUDA vs ROCm
Nigeria - GPU Programming - OpenCL vs CUDA vs ROCm
Botswana - GPU Programming - OpenCL vs CUDA vs ROCm
Slovenia - GPU Programming - OpenCL vs CUDA vs ROCm
Croatia - GPU Programming - OpenCL vs CUDA vs ROCm
Serbia - GPU Programming - OpenCL vs CUDA vs ROCm
Bhutan - GPU Programming - OpenCL vs CUDA vs ROCm