Course Code: gpuprogopenclcudarocm
Duration: 28 hours
Prerequisites:
  • 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ą
Overview:

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.
Course Outline:

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

Sites Published:

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

Nepal - GPU Programming - OpenCL vs CUDA vs ROCm

Uzbekistan - GPU Programming - OpenCL vs CUDA vs ROCm