- 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
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.
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
United Arab Emirates - AMD GPU Programming
Saudi Arabia - AMD GPU Programming
South Africa - AMD GPU Programming
Österreich - AMD GPU Programming
Deutschland - AMD GPU Programming
Czech Republic - AMD GPU Programming
Magyarország - AMD GPU Programming
Luxembourg - AMD GPU Programming
Lithuania - AMD GPU Programming
Nederland - AMD GPU Programming
Portugal - AMD GPU Programming
Belgique - 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
Argentina - AMD GPU Programming
Costa Rica - AMD GPU Programming
Guatemala - AMD GPU Programming
Colombia - AMD GPU Programming
Venezuela - 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
Indonesia - AMD GPU Programming
Kazakhstan - AMD GPU Programming
Slovakia - AMD GPU Programming
Botswana - AMD GPU Programming