Dziękujemy za wysłanie zapytania! Jeden z członków naszego zespołu skontaktuje się z Państwem wkrótce.
Dziękujemy za wysłanie rezerwacji! Jeden z członków naszego zespołu skontaktuje się z Państwem wkrótce.
Plan Szkolenia
Wprowadzenie
- Czym jest programowanie GPU?
- Dlaczego warto używać programowania GPU?
- Jakie są wyzwania i kompromisy związane z programowaniem GPU?
- Jakie są frameworki i narzędzia do programowania GPU?
- Wybór odpowiedniego frameworka i narzędzia dla Twojej aplikacji
OpenCL
- Czym jest OpenCL?
- Jakie są zalety i wady OpenCL?
- Konfiguracja środowiska programistycznego dla OpenCL
- Tworzenie podstawowego programu OpenCL wykonującego dodawanie wektorów
- Używanie interfejsu API OpenCL do pobierania informacji o urządzeniu, alokowania i zwalniania pamięci urządzenia, kopiowania danych między hostem a urządzeniem, uruchamiania jąder i synchronizacji wątków
- Używanie języka OpenCL C do pisania jąder, które wykonują się na urządzeniu i manipulują 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 zoptymalizować transfery danych i dostęp do pamięci
- Używanie modelu wykonania OpenCL do kontrolowania elementów roboczych, grup roboczych i zakresów ND, które definiują równoległość
- Debugowanie i testowanie programów OpenCL przy użyciu narzędzi takich jak CodeXL
- Optymalizacja programów OpenCL przy użyciu technik takich jak łączenie, buforowanie, pobieranie z wyprzedzeniem i profilowanie
CUDA
- Czym jest CUDA?
- Jakie są zalety i wady CUDA?
- Konfiguracja środowiska programistycznego dla CUDA
- Tworzenie podstawowego programu CUDA wykonującego dodawanie wektorów
- Używanie interfejsu API CUDA do pobierania informacji o urządzeniu, alokowania i zwalniania pamięci urządzenia, kopiowania danych między hostem a urządzeniem, uruchamiania jąder i synchronizacji wątków
- Używanie języka CUDA C/C++ do pisania jąder, które wykonują się na urządzeniu i manipulują 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 zoptymalizować 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 przy użyciu narzędzi takich jak CUDA-GDB, CUDA-MEMCHECK i NVIDIA Nsight
- Optymalizacja programów CUDA przy użyciu technik takich jak łączenie, buforowanie, pobieranie z wyprzedzeniem i profilowanie
ROCm
- Czym jest ROCm?
- Jakie są zalety i wady ROCm?
- Konfiguracja środowiska programistycznego dla ROCm
- Tworzenie podstawowego programu ROCm wykonującego dodawanie wektorów
- Używanie interfejsu API ROCm do pobierania informacji o urządzeniu, alokowania i zwalniania pamięci urządzenia, kopiowania danych między hostem a urządzeniem, uruchamiania jąder i synchronizacji wątków
- Używanie języka ROCm C/C++ do pisania jąder, które wykonują się na urządzeniu i manipulują 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 zoptymalizować 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 przy użyciu narzędzi takich jak ROCm Debugger i ROCm Profiler
- Optymalizacja programów ROCm przy użyciu technik takich jak łączenie, buforowanie, pobieranie z wyprzedzeniem i profilowanie
HIP
- Czym jest HIP?
- Jakie są zalety i wady HIP?
- Konfiguracja środowiska programistycznego dla HIP
- Tworzenie podstawowego programu HIP wykonującego dodawanie wektorów
- Używanie języka HIP do pisania jąder, które wykonują się na urządzeniu i manipulują danymi
- Używanie wbudowanych funkcji, zmiennych i bibliotek HIP do wykonywania typowych zadań i operacji
- Używanie przestrzeni pamięci HIP, takich jak globalna, współdzielona, stała i lokalna, aby zoptymalizować transfery danych i dostęp do pamięci
- Używanie modelu wykonania HIP do kontrolowania wątków, bloków i siatek, które definiują równoległość
- Debugowanie i testowanie programów HIP przy użyciu narzędzi takich jak ROCm Debugger i ROCm Profiler
- Optymalizacja programów HIP przy użyciu technik takich jak łączenie, buforowanie, pobieranie z wyprzedzeniem i profilowanie
Porównanie
- Porównanie funkcji, wydajności i kompatybilności OpenCL, CUDA, ROCm i HIP
- Ocena programów GPU przy użyciu benchmarków i metryk
- Poznanie najlepszych praktyk i wskazówek dotyczących programowania GPU
- Badanie obecnych i przyszłych trendów oraz wyzwań w programowaniu GPU
Podsumowanie i kolejne kroki
Wymagania
- Zrozumienie języka C/C++ oraz koncepcji programowania równoległego
- Podstawowa wiedza na temat architektury komputerów i hierarchii pamięci
- Doświadczenie w korzystaniu z narzędzi wiersza poleceń i edytorów kodu
Grupa docelowa
- Programiści, którzy chcą poznać podstawy programowania GPU oraz główne frameworki i narzędzia do tworzenia aplikacji GPU
- 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ą poznać korzyści i wyzwania związane z programowaniem i optymalizacją GPU
21 godzin