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 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
Wymagania
- 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
28 godzin