Opublikowano standard równoległego programowania OpenMP 6.0

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

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster