Po trzech latach prac opublikowano zestaw specyfikacji OpenMP 6.0 (Open Multi-Processing), które definiują API oraz metody zastosowania programowania równoległego dla języków C, C++ i Fortran na systemach wielordzeniowych i hybrydowych (CPU+GPU/DSP) z pamięcią współdzieloną oraz blokami wektoryzacji (SIMD). Zakłada się, że początkowe wsparcie dla poszczególnych funkcji OpenMP 6.0 zostanie włączone w wydania LLVM/Clang 20 i GCC 15.
Główne zmiany w OpenMP 6.0:
- Uproszczono proces programowania zadań (task), definiujących niezależne części programu, które mogą być wykonywane równolegle z innymi częściami.
- Dodano możliwość wykonywania zadań w wątkach free-agent, nieprzypisanych do grup wątków (teams), wykonujących regiony równoległe (parallel region, blok kodu wykonywany w kilku wątkach).
- Zapewniono wsparcie dla przechowywania grafu zadań (taskgraph), definiującego zależności między zadaniami oraz porządek ich wykonania, w celu zwiększenia efektywności subsequentnego powtarzania.
- Wdrożono mechanizm przezroczystych zadań („transparent tasks”) w celu uproszczenia zarządzania zależnościami oraz automatycznego zarządzania wykonaniem zadań podrzędnych.
- Rozszerzono wsparcie dla urządzeń obliczeniowych, które mogą być używane do wykonywania zadań równoległych (CPU, GPU, DSP itd.).
- Dodano nową składnię tablic, umożliwiającą użycie dyrektywy „workdistribute” do podziału przetwarzania tablic między różne jednostki robocze.
- Rozszerzono możliwości zarządzania alokacją pamięci, upraszczając zarządzanie zmiennymi, dla których pamięć jest alokowana dynamicznie.
- Rozszerzono wsparcie dla atrybutów definiujących rozkład danych między urządzeniami domyślnie.
- Ułatwiono pisanie kodu dla asynchronicznych przesyłów danych do dodatkowych urządzeń obliczeniowych (GPU).
- Poprawiono zarządzanie pamięcią i jej powiązaniem z urządzeniami obliczeniowymi.
- Dodano dyrektywę „groupprivate” do przypisania pamięci do grupy wątków wykonywanych na określonym urządzeniu obliczeniowym.
- Uproszczono programowanie niektórych rodzajów transformacji pętli, takich jak łączenie kilku pętli, zmiana kolejności zagnieżdżonych pętli i odwracanie pętli.
- Dodano nową operację indukcji (induction) do organizacji równoległych przetworzeń w pętlach prostych obliczeń arytmetycznych i operacji użytkownika zależnych od wartości wcześniejszych.
- Wprowadzono pełne wsparcie dla równoległego przetwarzania programów napisanych zgodnie ze standardami C23 (w tym składnia atrybutów), Fortran 2023 i C++23. Dodano nowe atrybuty dla C/C++.
- Rozszerzone możliwości zarządzania pamięcią i składowaniem. Dodano nowe atrybuty do kontroli przydzielania i użycia pamięci. Dodano API do określania i żądania obszarów pamięci (memory space).
- Usunięto możliwości ogłoszone za przestarzałe w specyfikacjach OpenMP 5.0, 5.1 i 5.2.
Źródło: opennet.ru
