Course Code: amdgpuprog
Duration: 28 hours
Prerequisites:
  • Zrozumienie języka C/C++ i koncepcji programowania równoległego
  • Podstawowa znajomość architektury komputera i hierarchii pamięci
  • Doświadczenie z narzędziami wiersza poleceń i edytorami kodu

Odbiorcy

  • Programiści, którzy chcą dowiedzieć się, jak używać ROCm i HIP do programowania procesorów AMD GPU i wykorzystywania ich równoległości.
  • Programiści, którzy chcą pisać wysokowydajny i skalowalny kod, który może działać na różnych urządzeniach AMD
  • Programiści, którzy chcą poznać niskopoziomowe aspekty programowania GPU i zoptymalizować wydajność swojego kodu
Overview:

ROCm to platforma open source do programowania GPU, która obsługuje procesory AMD GPU, a także zapewnia kompatybilność z CUDA i OpenCL. ROCm ujawnia programiście szczegóły sprzętowe i daje pełną kontrolę nad procesem zrównoleglania. Wymaga to jednak również dobrego zrozumienia architektury urządzenia, modelu pamięci, modelu wykonania i technik optymalizacji.

HIP to C++ interfejs API środowiska uruchomieniowego i język jądra, który umożliwia pisanie przenośnego kodu, który może działać zarówno na układach AMD, jak i NVIDIA GPU. HIP zapewnia cienką warstwę abstrakcji nad natywnymi GPU interfejsami API, takimi jak ROCm i CUDA, i pozwala wykorzystać istniejące GPU biblioteki i narzędzia.

Szkolenie na żywo prowadzone przez instruktora (na miejscu lub zdalnie) jest przeznaczone dla początkujących i średnio zaawansowanych programistów, którzy chcą używać ROCm i HIP do programowania procesorów AMD GPU i wykorzystywania ich równoległości.

Pod koniec tego szkolenia uczestnicy będą w stanie

  • Skonfigurować środowisko programistyczne, które obejmuje platformę ROCm, procesor AMD GPU i Visual Studio Code.
  • Stworzyć podstawowy program ROCm, który wykonuje dodawanie wektorowe na GPU i pobiera wyniki z pamięci GPU.
  • Użyj interfejsu API ROCm, aby wyszukiwać informacje o urządzeniu, przydzielać i zwalniać pamięć urządzenia, kopiować dane między hostem a urządzeniem, uruchamiać jądra i synchronizować wątki.
  • Używanie języka HIP do pisania jąder, które wykonują się na GPU i manipulują danymi.
  • Używanie wbudowanych funkcji, zmiennych i bibliotek HIP do wykonywania typowych zadań i operacji.
  • Używanie przestrzeni pamięci ROCm i HIP, takich jak globalna, współdzielona, stała i lokalna, w celu optymalizacji transferu danych i dostępu do pamięci.
  • Używanie modeli wykonania ROCm i HIP do kontrolowania wątków, bloków i siatek, które definiują równoległość.
  • Debugowanie i testowanie programów ROCm i HIP przy użyciu narzędzi takich jak ROCm Debugger i ROCm Profiler.
  • Optymalizacja programów ROCm i HIP przy użyciu technik takich jak koalescencja, buforowanie, wstępne pobieranie i profilowanie.

Format kursu

  • Interaktywny wykład i dyskusja.
  • Wiele ćwiczeń i praktyki.
  • Praktyczna implementacja w środowisku laboratoryjnym na żywo.

Opcje dostosowywania kursu

  • Aby poprosić o spersonalizowane szkolenie dla tego kursu, skontaktuj się z nami w celu ustalenia szczegółów.
Course Outline:

Wprowadzenie

  • Co to jest ROCm?
  • Czym jest HIP?
  • ROCm vs CUDA vs OpenCL
  • Przegląd funkcji i architektury ROCm i HIP
  • Konfiguracja środowiska programistycznego

Pierwsze kroki

  • Tworzenie nowego projektu ROCm przy użyciu Visual Studio Kodu
  • Przeglądanie struktury projektu i plików
  • Kompilowanie i uruchamianie programu
  • Wyświetlanie danych wyjściowych przy użyciu printf i fprintf

ROCm API

  • Zrozumienie roli interfejsu API ROCm w programie hosta
  • Używanie interfejsu API ROCm do wyszukiwania informacji o urządzeniu i jego możliwościach
  • Używanie ROCm API do przydzielania i zwalniania pamięci urządzenia
  • Używanie ROCm API do kopiowania danych między hostem a urządzeniem
  • Używanie ROCm API do uruchamiania jądra i synchronizowania wątków
  • Używanie ROCm API do obsługi błędów i wyjątków

Język HIP

  • Zrozumienie roli języka HIP w programie urządzenia
  • Używanie języka HIP do pisania jąder, które wykonują się na GPU i manipulują danymi
  • Korzystanie z typów danych, kwalifikatorów, operatorów i wyrażeń HIP
  • Używanie wbudowanych funkcji, zmiennych i bibliotek HIP do wykonywania typowych zadań i operacji

Model pamięci ROCm i HIP

  • Zrozumienie różnicy między modelami pamięci hosta i urządzenia
  • Korzystanie z przestrzeni pamięci ROCm i HIP, takich jak globalna, współdzielona, stała i lokalna
  • Korzystanie z obiektów pamięci ROCm i HIP, takich jak wskaźniki, tablice, tekstury i powierzchnie
  • Korzystanie z trybów dostępu do pamięci ROCm i HIP, takich jak tylko do odczytu, tylko do zapisu, odczyt-zapis itp.
  • Korzystanie z modelu spójności pamięci ROCm i HIP oraz mechanizmów synchronizacji

Model wykonania ROCm i HIP

  • Zrozumienie różnicy między modelem wykonania hosta i urządzenia
  • Używanie wątków, bloków i siatek ROCm i HIP do definiowania równoległości
  • Korzystanie z funkcji wątków ROCm i HIP, takich jak hipThreadIdx_x, hipBlockIdx_x, hipBlockDim_x itp.
  • Używanie funkcji blokowych ROCm i HIP, takich jak __syncthreads, __threadfence_block itp.
  • Korzystanie z funkcji siatki ROCm i HIP, takich jak hipGridDim_x, hipGridSync, grupy współpracy itp.

Debugowanie

  • Zrozumienie typowych błędów i usterek w programach ROCm i HIP
  • Używanie debuggera Visual Studio Code do sprawdzania zmiennych, punktów przerwania, stosu wywołań itp.
  • Używanie debuggera ROCm do debugowania programów ROCm i HIP na urządzeniach AMD
  • Używanie ROCm Profiler do analizowania programów ROCm i HIP na urządzeniach AMD

Optymalizacja

  • Zrozumienie czynników wpływających na wydajność programów ROCm i HIP
  • Korzystanie z technik koalescencji ROCm i HIP w celu poprawy przepustowości pamięci
  • Korzystanie z technik buforowania i pobierania wstępnego ROCm i HIP w celu zmniejszenia opóźnień pamięci
  • Korzystanie z technik pamięci współdzielonej i lokalnej ROCm i HIP w celu optymalizacji dostępu do pamięci i przepustowości
  • Korzystanie z narzędzi do profilowania i profilowania ROCm i HIP w celu pomiaru i poprawy czasu wykonania i wykorzystania zasobów.

Podsumowanie i następny krok

Sites Published:

United Arab Emirates - AMD GPU Programming

Qatar - AMD GPU Programming

Egypt - AMD GPU Programming

Saudi Arabia - AMD GPU Programming

South Africa - AMD GPU Programming

Brasil - AMD GPU Programming

Canada - AMD GPU Programming

中国 - AMD GPU Programming

香港 - AMD GPU Programming

澳門 - AMD GPU Programming

台灣 - AMD GPU Programming

USA - AMD GPU Programming

Österreich - AMD GPU Programming

Schweiz - AMD GPU Programming

Deutschland - AMD GPU Programming

Czech Republic - AMD GPU Programming

Denmark - AMD GPU Programming

Estonia - AMD GPU Programming

Finland - AMD GPU Programming

Greece - AMD GPU Programming

Magyarország - AMD GPU Programming

Ireland - AMD GPU Programming

Luxembourg - AMD GPU Programming

Latvia - AMD GPU Programming

España - AMD GPU Programming

Italia - AMD GPU Programming

Lithuania - AMD GPU Programming

Nederland - AMD GPU Programming

Norway - AMD GPU Programming

Portugal - AMD GPU Programming

România - AMD GPU Programming

Sverige - AMD GPU Programming

Türkiye - AMD GPU Programming

Malta - AMD GPU Programming

Belgique - AMD GPU Programming

France - AMD GPU Programming

日本 - AMD GPU Programming

Australia - AMD GPU Programming

Malaysia - AMD GPU Programming

New Zealand - AMD GPU Programming

Philippines - AMD GPU Programming

Singapore - AMD GPU Programming

Thailand - AMD GPU Programming

Vietnam - AMD GPU Programming

India - AMD GPU Programming

Argentina - AMD GPU Programming

Chile - AMD GPU Programming

Costa Rica - AMD GPU Programming

Ecuador - AMD GPU Programming

Guatemala - AMD GPU Programming

Colombia - AMD GPU Programming

México - AMD GPU Programming

Panama - AMD GPU Programming

Peru - AMD GPU Programming

Uruguay - AMD GPU Programming

Venezuela - AMD GPU Programming

Polska - AMD GPU Programming

United Kingdom - AMD GPU Programming

South Korea - AMD GPU Programming

Pakistan - AMD GPU Programming

Sri Lanka - AMD GPU Programming

Bulgaria - AMD GPU Programming

Bolivia - AMD GPU Programming

Indonesia - AMD GPU Programming

Kazakhstan - AMD GPU Programming

Moldova - AMD GPU Programming

Morocco - AMD GPU Programming

Tunisia - AMD GPU Programming

Kuwait - AMD GPU Programming

Oman - AMD GPU Programming

Slovakia - AMD GPU Programming

Kenya - AMD GPU Programming

Nigeria - AMD GPU Programming

Botswana - AMD GPU Programming

Slovenia - AMD GPU Programming

Croatia - AMD GPU Programming

Serbia - AMD GPU Programming

Bhutan - AMD GPU Programming

Nepal - AMD GPU Programming

Uzbekistan - AMD GPU Programming