Bądźmy w kontakcie

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

Liczba uczestników


Cena za uczestnika (netto)

Propozycje terminów

Powiązane Kategorie