Опубликован стандарт параллельного программирования OpenMP 6.0

После трёх лет разработки опубликован набор спецификаций OpenMP 6.0 (Open Multi-Processing), определяющих API и способы применения методов параллельного программирования для языков Си, Си++ и Фортран на многоядерных и гибридных (CPU+GPU/DSP) системах с общей памятью и блоками векторизации (SIMD). Предполагается, что начальная поддержка отдельных возможностей OpenMP 6.0 будет включена в состав выпусков LLVM/Clang 20 и GCC 15.

Основные изменения в OpenMP 6.0:

  • Упрощён процесс программирования задач (task), определяющих независимые части программы, которые могут выполняться параллельно с другими частями.

    • Добавлена возможность выполнения задач в потоках free-agent, не привязанных к группам потоков (teams), выполняющих параллельные регионы (parallel region, блок кода, выполняемый в нескольких потоках).
    • Обеспечена поддержка сохранения графа задач (taskgraph), определяющего зависимости между задачами и порядок выполнения задач, для повышения эффективности последующего повторного воспроизведения.
    • Реализован механизм прозрачных задач ("transparent tasks") для упрощения управления зависимостями и автоматического управления выполнением дочерних задач.
  • Расширена поддержка вычислительных устройств, которые могут использоваться для выполнения параллельных задач (CPU, GPU, DSP и т.п.).

    • Добавлен новый синтаксис массивов, позволяющий использовать директиву "workdistribute" для разделения обработки массивов между разными единицами работы.
    • Расширены возможности управления выделением памяти, упрощающие управление переменными, для которых память выделяется динамически.
    • Расширена поддержка атрибутов, определяющих распределение данных между устройствами по умолчанию.
    • Упрощено написание кода для асинхронной передачами данных дополнительным вычислительным устройствам (GPU).
    • Улучшено управление памятью и её привязкой к вычислительным устройствам.
    • Добавлена директива "groupprivate" для закрепления памяти за группой потоков, выполняемых на определённом вычислительном устройстве.
  • Упрощено программирование некоторых видов трансформации циклов, таких как объединение нескольких циклов, изменение порядка вложенных циклов и реверсия циклов.
  • Добавлена новая операция индукции (induction) для организации распараллеливания в циклах простых арифметических вычислений и пользовательских операций, зависящих от предыдущих значений.
  • Добавлена полная поддержка распараллеливания программ, написанных с использованием стандартов C23 (включая синтаксис атрибутов), Fortran 2023 и C++23. Добавлены новые атрибуты для C/C++.
  • Расширены возможности управления хранилищем и памятью. Добавлены новые атрибуты для контроля над тем, как должна выделяться и использоваться память. Добавлен API для определения и запроса пространств памяти (memory space).
  • Удалены возможности, объявленные устаревшими в спецификациях OpenMP 5.0, 5.1 и 5.2.