После двух с половиной лет разработки опубликован набор спецификаций OpenMP 4.5 (Open Multi-Processing), определяющих API и способы применения методов параллельного программирования для языков Си, Си++ и Фортран на многоядерных и гибридных (CPU+GPU/DSP) системах с общей памятью и блоками векторизации (SIMD). OpenMP 4.5 примечателен расширением средств для параллельного программирования на системах с аппаратными ускорителями и GPU, а также поддержкой распараллеливания циклов с хорошо структурированными зависимостями. Реализация OpenMP 4.5 уже почти завершена в GCC и будет представлена в выпуске GCC 6.0, а также уже началась в экспериментальной ветке Clang, в которой формируется выпуск 3.8.
Основные новшества OpenMP 4.5:
- Значительно улучшена поддержка дополнительных аппаратных вычислительных устройств, таких как специализированные аппаратные ускорители. Реализованы механизмы для привязки к подобным устройствам операций с неструктурированными данными или асинхронного выполнения кода. Добавлены процедуры для управления памятью устройства, позволяющие выделять, копировать и высвобождать блоки памяти;
- Представлен механизм "doacross loops", позволяющий организовать распараллеливание циклов с хорошо структурированными зависимостями;
- Новая конструкция "taskloop", позволяющая разделять циклы на задачи, избегая необходимости выполнения всех потоков внутри цикла;
- Поддержка сокращения (редукции) массивов С/С++;
- Новые механизмы hint-ов, через которые можно задать параметры выставления задачам относительных приоритетов и выбора предпочтительных средств синхронизации;
- Поддержка привязки (affinity) потоков к заданным вычислительным устройствам;
- Возможность распараллеливания многих приложений, написанных в соответствии со спецификацией Fortran 2003;
- Поддержка расширений SIMD, в том числе возможность указать точное число обработчиков в потоке (метрика SIMD Width) и дополнительные атрибуты при обращении к общим данным.
|