Course Code: gpuprogopenacc
Duration: 28 hours
Prerequisites:
  • Zrozumienie języka C/C++ lub Fortran 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ć OpenACC do programowania heterogenicznych urządzeń i wykorzystywania ich równoległości.
  • 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ć wysokopoziomowe aspekty programowania heterogenicznego i zoptymalizować wydajność swojego kodu
Overview:

OpenACC to otwarty standard programowania heterogenicznego, który umożliwia uruchamianie kodu na różnych platformach i urządzeniach, takich jak wielordzeniowe procesory, GPUs, FPGA i inne. OpenACC zapewnia abstrakcję wysokiego poziomu, która umożliwia programiście dodawanie adnotacji do kodu za pomocą dyrektyw i klauzul, bez modyfikowania oryginalnej struktury lub składni kodu. OpenACC obsługuje zrównoleglenie, ruch danych i szczegóły optymalizacji dla urządzenia docelowego, zachowując jednocześnie przenośność i czytelność kodu.

To prowadzone przez instruktora szkolenie na żywo (na miejscu lub zdalnie) jest przeznaczone dla początkujących i średnio zaawansowanych programistów, którzy chcą używać OpenACC do programowania heterogenicznych urządzeń i wykorzystywania ich równoległości.

Pod koniec tego szkolenia uczestnicy będą w stanie

  • Skonfigurować środowisko programistyczne, które obejmuje OpenACC SDK, urządzenie obsługujące OpenACC i Visual Studio Code.
  • Utworzyć podstawowy program OpenACC, który wykonuje dodawanie wektorowe na urządzeniu i pobiera wyniki z pamięci urządzenia.
  • Użyj dyrektyw i klauzul OpenACC, aby dodać adnotacje do kodu i określić regiony równoległe, ruch danych i opcje optymalizacji.
  • Używanie interfejsu API OpenACC do odpytywania informacji o urządzeniu, ustawiania numeru urządzenia, obsługi błędów i synchronizacji zdarzeń.
  • Korzystanie z bibliotek OpenACC i funkcji interoperacyjności w celu integracji OpenACC z innymi modelami programowania, takimi jak CUDA, OpenMP i MPI.
  • Używanie narzędzi OpenACC do profilowania i debugowania programów OpenACC oraz identyfikowania wąskich gardeł i możliwości związanych z wydajnością.
  • Optymalizacja programów OpenACC przy użyciu technik takich jak lokalność danych, fuzja pętli, fuzja jądra i automatyczne dostrajanie.

Format kursu

  • Interaktywny wykład i dyskusja.
  • Wiele ćwiczeń i praktyki.
  • Praktyczne wdrożenie 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.
Course Outline:

Wprowadzenie

  • Czym jest OpenACC?
  • OpenACC vs OpenCL vs CUDA vs SYCL
  • Przegląd funkcji i architektury OpenACC
  • Konfiguracja środowiska programistycznego

Pierwsze kroki

  • Tworzenie nowego projektu OpenACC przy użyciu Visual Studio Code
  • Przeglądanie struktury projektu i plików
  • Kompilowanie i uruchamianie programu
  • Wyświetlanie danych wyjściowych przy użyciu printf i fprintf

Dyrektywy i klauzule OpenACC

  • Zrozumienie roli dyrektyw i klauzul OpenACC w kodzie hosta i urządzenia
  • Używanie dyrektywy i klauzul równoległych OpenACC do tworzenia równoległych regionów i określania liczby gangów, pracowników i wektorów
  • Używanie dyrektywy i klauzul jądra OpenACC do tworzenia regionów jądra i pozwalania kompilatorowi na decydowanie o równoległości.
  • Używanie dyrektywy i klauzul pętli OpenACC do zrównoleglania pętli i określania rozkładu pętli, zwijania, redukcji i kafelkowania
  • Używanie dyrektywy i klauzul danych OpenACC do zarządzania ruchem danych i regionami danych
  • Używanie dyrektywy i klauzul aktualizacji OpenACC do synchronizacji danych między hostem a urządzeniem
  • Korzystanie z dyrektywy i klauzul pamięci podręcznej OpenACC w celu poprawy ponownego wykorzystania i lokalizacji danych
  • Używanie dyrektywy rutynowej OpenACC i klauzul do tworzenia funkcji urządzenia oraz określania typu funkcji i długości wektora
  • Używanie dyrektywy i klauzul OpenACC wait do synchronizacji zdarzeń i zależności

API OpenACC

  • Zrozumienie roli interfejsu API OpenACC w programie hosta
  • Używanie interfejsu API OpenACC do wyszukiwania informacji o urządzeniu i jego możliwościach
  • Używanie interfejsu API OpenACC do ustawiania numeru i typu urządzenia
  • Używanie interfejsu API OpenACC do obsługi błędów i wyjątków
  • Używanie interfejsu API OpenACC do tworzenia i synchronizowania zdarzeń

Biblioteki OpenACC i interoperacyjność

  • Zrozumienie roli bibliotek OpenACC i funkcji interoperacyjności w programie urządzenia
  • Korzystanie z bibliotek OpenACC, takich jak matematyczne, losowe i złożone, do wykonywania typowych zadań i operacji
  • Korzystanie z funkcji interoperacyjności OpenACC, takich jak deviceptr, use_device i acc_memcpy, w celu integracji OpenACC z innymi modelami programowania, takimi jak CUDA, OpenMP i MPI.
  • Korzystanie z funkcji interoperacyjności OpenACC, takich jak host_data i declare, w celu integracji OpenACC z bibliotekami GPU, takimi jak cuBLAS i cuFFT.

Narzędzia OpenACC

  • Zrozumienie roli narzędzi OpenACC w procesie programowania
  • Korzystanie z narzędzi OpenACC do profilowania i debugowania programów OpenACC oraz identyfikowania wąskich gardeł i możliwości w zakresie wydajności
  • Wykorzystanie narzędzi OpenACC, takich jak PGI Compiler, NVIDIA Nsight Systems i Allinea Forge, do pomiaru i poprawy czasu wykonywania i wykorzystania zasobów.

Optymalizacja

  • Zrozumienie czynników wpływających na wydajność programów OpenACC
  • Wykorzystanie dyrektyw i klauzul OpenACC do optymalizacji lokalności danych i redukcji transferów danych
  • Używanie dyrektyw i klauzul OpenACC do optymalizacji równoległości pętli i fuzji
  • Używanie dyrektyw i klauzul OpenACC do optymalizacji równoległości jądra i fuzji
  • Wykorzystanie dyrektyw i klauzul OpenACC do optymalizacji wektoryzacji i automatycznego dostrajania

Podsumowanie i kolejne kroki

Sites Published:

United Arab Emirates - GPU Programming with OpenACC

Qatar - GPU Programming with OpenACC

Egypt - GPU Programming with OpenACC

Saudi Arabia - GPU Programming with OpenACC

South Africa - GPU Programming with OpenACC

Brasil - GPU Programming with OpenACC

Canada - GPU Programming with OpenACC

中国 - GPU Programming with OpenACC

香港 - GPU Programming with OpenACC

澳門 - GPU Programming with OpenACC

台灣 - GPU Programming with OpenACC

USA - GPU Programming with OpenACC

Österreich - GPU Programming with OpenACC

Schweiz - GPU Programming with OpenACC

Deutschland - GPU Programming with OpenACC

Czech Republic - GPU Programming with OpenACC

Denmark - GPU Programming with OpenACC

Estonia - GPU Programming with OpenACC

Finland - GPU Programming with OpenACC

Greece - GPU Programming with OpenACC

Magyarország - GPU Programming with OpenACC

Ireland - GPU Programming with OpenACC

Luxembourg - GPU Programming with OpenACC

Latvia - GPU Programming with OpenACC

España - GPU Programming with OpenACC

Italia - GPU Programming with OpenACC

Lithuania - GPU Programming with OpenACC

Nederland - GPU Programming with OpenACC

Norway - GPU Programming with OpenACC

Portugal - GPU Programming with OpenACC

România - GPU Programming with OpenACC

Sverige - GPU Programming with OpenACC

Türkiye - GPU Programming with OpenACC

Malta - GPU Programming with OpenACC

Belgique - GPU Programming with OpenACC

France - GPU Programming with OpenACC

日本 - GPU Programming with OpenACC

Australia - GPU Programming with OpenACC

Malaysia - GPU Programming with OpenACC

New Zealand - GPU Programming with OpenACC

Philippines - GPU Programming with OpenACC

Singapore - GPU Programming with OpenACC

Thailand - GPU Programming with OpenACC

Vietnam - GPU Programming with OpenACC

India - GPU Programming with OpenACC

Argentina - GPU Programming with OpenACC

Chile - GPU Programming with OpenACC

Costa Rica - GPU Programming with OpenACC

Ecuador - GPU Programming with OpenACC

Guatemala - GPU Programming with OpenACC

Colombia - GPU Programming with OpenACC

México - GPU Programming with OpenACC

Panama - GPU Programming with OpenACC

Peru - GPU Programming with OpenACC

Uruguay - GPU Programming with OpenACC

Venezuela - GPU Programming with OpenACC

Polska - GPU Programming with OpenACC

United Kingdom - GPU Programming with OpenACC

South Korea - GPU Programming with OpenACC

Pakistan - GPU Programming with OpenACC

Sri Lanka - GPU Programming with OpenACC

Bulgaria - GPU Programming with OpenACC

Bolivia - GPU Programming with OpenACC

Indonesia - GPU Programming with OpenACC

Kazakhstan - GPU Programming with OpenACC

Moldova - GPU Programming with OpenACC

Morocco - GPU Programming with OpenACC

Tunisia - GPU Programming with OpenACC

Kuwait - GPU Programming with OpenACC

Oman - GPU Programming with OpenACC

Slovakia - GPU Programming with OpenACC

Kenya - GPU Programming with OpenACC

Nigeria - GPU Programming with OpenACC

Botswana - GPU Programming with OpenACC

Slovenia - GPU Programming with OpenACC

Croatia - GPU Programming with OpenACC

Serbia - GPU Programming with OpenACC

Bhutan - GPU Programming with OpenACC

Nepal - GPU Programming with OpenACC

Uzbekistan - GPU Programming with OpenACC