OpenMP 5.1

Опубликовано August@Karro - пн, 11/16/2020 - 19:18
OpenMP (Open Multi-Processing) — открытый стандарт для распараллеливания программ на языках Си, Си++ и Фортран. Дает описание совокупности директив компилятора, библиотечных процедур и переменных окружения, которые предназначены для программирования многопоточных приложений на многопроцессорных системах с общей памятью. OpenMP реализует параллельные вычисления с помощью многопоточности, в которой «главный» (master) поток создает набор подчиненных (slave) потоков и задача распределяется между ними.

Основные новшества:

  • Улучшено использование современного C++. Добавлена полная поддержка распараллеливания программ, написанных с использованием стандартов C11, C18, C++11, C++14, C++17 и C++20. Вместо выражения "pragma" предоставлена поддержка синтаксиса атрибутов, который может применяться для указания директив OpenMP и более прост для интеграции с шаблонами.
  • Расширена поддержка специализированных аппаратных ускорителей. Добавлена конструкция "interop" для обеспечения совместимости с устройствами, напрямую не поддерживающими OpenMP, и использования поддерживаемых данными устройствами интерфейсов, таких как CUDA streams, HIP и OpenCL.
  • Добавлена возможность отражения указателей функций на устройство или ускоритель. Реализована поддержка специфичных для устройств переменных окружения.
  • Расширена предоставляемая компилятору информация, на основе которой можно задействовать дополнительные оптимизации. Для передачи дополнительной информации об использовании  в программе добавлена директива "assume". Кроме того предложена директива "tile" для определения локализации данных при выполнении циклов, и директива "unroll" для частичного разматывания цикла.
  • Добавлена директива "masked" для ограничения выполнения кода только заданным подмножеством потоков.
  • Предоставлена возможность генерации ошибок и предупреждений, выводимых на стадии компиляции. Добавлена новая директива "error".
  • Улучшена поддержка языка Fortran. Реализована полная совместимость со спецификацией Fortran 2008 и предоставлена начальная поддержка Fortran 2018.
  • Упрощено определение функций, специфичных для конкретных окружений. Сразу несколько функций теперь могут быть включены в один вариант конструкции "declare", а код можно более тщательно адаптировать к определённому окружению.

Отдельные элементы OpenMP 5.1 будут включены в следующий выпуск LLVM/Clang 12.0, а также, возможно, успеют попасть в ветку GCC 11. Разработку спецификации OpenMP ведут несколько крупных производителей вычислительной техники и программного обеспечения, чья работа регулируется некоммерческой организацией, называемой OpenMP Architecture Review Board (ARB).

 

Последние материалы