- 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
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.
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
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