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

Liczba uczestników


cena netto za uczestnika

Opinie uczestników (3)

Propozycje terminów