Является ли целесообразным объединение std :: execute и OpenMP? - PullRequest
1 голос
/ 05 ноября 2019

Я использую OpenMP с некоторых пор. Недавно в новом проекте я решил использовать c ++ 17 для некоторых функций.

Из-за этого меня коснулся std :: execute, которое позволяет распараллеливать алгоритмы. Это кажется действительно мощным и элегантным, но есть много полезных возможностей OpenMP, которые нелегко использовать с алгоритмами (барьер, SIMD, критический и т. Д.).

Так что я думаю, что смешатьstd::execution::par (или unseq_par) с OpenMP. Это хорошая идея, или я должен остаться только с OpenMP?

1 Ответ

2 голосов
/ 05 ноября 2019

К сожалению, это официально не поддерживается . Это может или не может работать, в зависимости от реализации, но это не переносимо.

Только самая последняя версия, OpenMP 5.0, даже определяет взаимодействие с C ++ 11. В общем, использование чего-либо из C ++ 11 и вперед "может привести к неопределенному поведению" . Хотя в будущих версиях спецификации OpenMP предполагается использовать следующие функции, в настоящее время их использование может привести к неопределенному поведению.

  • Поддержка выравнивания
  • Стандартные типы макетов
  • Разрешающие конструкции перемещения генерировать
  • Определение специальных функций-членов перемещения
  • Параллелизм
  • Порядок зависимости от данных: атомика и модель памяти
  • Дополнения к стандартной библиотеке
  • Локальное хранилище потоков
  • Динамическая инициализация и уничтожение с параллелизмом
  • C ++11 библиотека

Хотя C ++ 17 и его специфическая поддержка параллелизма высокого уровня не упоминаются, из этого списка ясно, что он не поддерживается.

...