建议结合使用std :: execution和OpenMP吗?

我从现在开始使用OpenmP。最近,在一个新项目中,我选择使用c ++ 17来实现某些功能。

因此,我对std :: execution感到担忧,它允许并行化算法。这似乎确实强大而优雅,但是它们具有OpenmP的许多功能,这些功能真的很有用,而且不易与算法(屏障,SIMD,关键等)一起使用。

因此,我认为将std::execution::par(或unseq_par)与OpenmP混合使用。这是个好主意,还是我应该只使用OpenmP?

limo2737 回答:建议结合使用std :: execution和OpenMP吗?

很遗憾,这不是不受官方支持。根据实现的不同,它可能会或可能不会起作用,但它不是可移植的。

只有最新版本的OpenMP 5.0甚至定义了与C ++ 11的交互。通常,使用C ++ 11和更高版本的中的任何内容“可能会导致未指定的行为” 。虽然OpenMP规范的未来版本有望解决以下功能,但当前使用它们可能会导致未指定的行为。

  • 对齐支持
  • 标准布局类型
  • 允许移动构造物抛出
  • 定义移动特殊成员函数
  • 并发性
  • 数据依赖顺序:原子和内存模型
  • 标准库的添加
  • 线程本地存储
  • 并发动态初始化和销毁​​
  • C ++ 11库

虽然未提及C ++ 17及其特定的高级并行性支持,但从此列表可以明显看出,它不受支持。

本文链接:https://www.f2er.com/3160140.html

大家都在问