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 aplikacji
OpenCL
- Czym jest OpenCL?
- Jakie są zalety i wady OpenCL?
- Konfigurowanie środowiska programistycznego dla OpenCL
- Tworzenie podstawowego programu OpenCL wykonującego dodawanie wektorowe
- Używanie OpenCL API do odpytywania informacji o urządzeniu, przydzielania i zwalniania pamięci urządzenia, kopiowania danych między hostem a urządzeniem, uruchamiania jądra i synchronizowania wątków.
- Używanie OpenCL języka C do pisania jąder, które wykonują się na urządzeniu i manipulują danymi
- Korzystanie z OpenCL wbudowanych funkcji, zmiennych i bibliotek do wykonywania typowych zadań i operacji
- Korzystanie z OpenCL przestrzeni pamięci, takich jak globalna, lokalna, stała i prywatna, w celu optymalizacji transferu danych i dostępu do pamięci
- Korzystanie z modelu wykonania OpenCL do kontrolowania elementów roboczych, grup roboczych i zakresów ND, które definiują równoległość.
- Debugowanie i testowanie OpenCL programów przy użyciu narzędzi takich jak CodeXL
- Optymalizacja OpenCL programów przy użyciu technik takich jak koalescencja, buforowanie, wstępne pobieranie i profilowanie.
CUDA
- Czym jest CUDA?
- Jakie są zalety i wady CUDA?
- Konfiguracja środowiska programistycznego dla CUDA
- Tworzenie podstawowego programu CUDA wykonującego dodawanie wektorowe
- Używanie interfejsu API CUDA do wyszukiwania informacji o urządzeniu, przydzielania i zwalniania pamięci urządzenia, kopiowania danych między hostem a urządzeniem, uruchamiania jądra i synchronizowania wątków
- Używanie języka CUDA C/C++ do pisania jąder, które wykonują się na urządzeniu i manipulują danymi
- Korzystanie z wbudowanych funkcji, zmiennych i bibliotek CUDA do wykonywania typowych zadań i operacji
- Korzystanie z przestrzeni pamięci CUDA, takich jak globalna, współdzielona, stała i lokalna, w celu optymalizacji transferu danych i dostępu do pamięci
- Korzystanie z 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 takich technik jak koalescencja, buforowanie, prefetching i profilowanie.
ROCm
- Czym jest ROCm?
- Jakie są zalety i wady ROCm?
- Konfiguracja środowiska programistycznego dla ROCm
- Tworzenie podstawowego programu ROCm wykonującego dodawanie wektorowe
- Używanie interfejsu API ROCm do wyszukiwania informacji o urządzeniu, przydzielania i zwalniania pamięci urządzenia, kopiowania danych między hostem a urządzeniem, uruchamiania jądra i synchronizowania wątków
- Używanie języka ROCm C/C++ do pisania jąder, które wykonują się na urządzeniu i manipulują danymi
- Korzystanie z wbudowanych funkcji, zmiennych i bibliotek ROCm do wykonywania typowych zadań i operacji
- Korzystanie z przestrzeni pamięci ROCm, takich jak globalna, lokalna, stała i prywatna, w celu optymalizacji transferu danych i dostępu do pamięci
- Korzystanie z 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 koalescencja, buforowanie, wstępne pobieranie i profilowanie.
HIP
- Czym jest HIP?
- Jakie są zalety i wady HIP?
- Konfigurowanie środowiska programistycznego dla HIP
- Tworzenie podstawowego programu HIP wykonującego dodawanie wektorowe
- 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
- Korzystanie z przestrzeni pamięci HIP, takich jak globalna, współdzielona, stała i lokalna, w celu optymalizacji transferu danych i dostępu do pamięci
- Korzystanie z 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 koalescencja, buforowanie, wstępne pobieranie 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 i wyzwań związanych z programowaniem GPU.
Podsumowanie i następny krok
Wymagania
- 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ą nauczyć się podstaw programowania GPU oraz głównych frameworków i narzędzi 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