После трёх лет разработки опубликован набор спецификаций 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.
Источник: https://www.opennet.ru/opennews/art.shtml?num=62236