我从现在开始使用OpenmP。最近,在一个新项目中,我选择使用c ++ 17来实现某些功能。
因此,我对std :: execution感到担忧,它允许并行化算法。这似乎确实强大而优雅,但是它们具有OpenmP的许多功能,这些功能真的很有用,而且不易与算法(屏障,SIMD,关键等)一起使用。
因此,我认为将std::execution::par
(或unseq_par
)与OpenmP混合使用。这是个好主意,还是我应该只使用OpenmP?
很遗憾,这不是不受官方支持。根据实现的不同,它可能会或可能不会起作用,但它不是可移植的。
只有最新版本的OpenMP 5.0甚至定义了与C ++ 11的交互。通常,使用C ++ 11和更高版本的中的任何内容“可能会导致未指定的行为” 。虽然OpenMP规范的未来版本有望解决以下功能,但当前使用它们可能会导致未指定的行为。
虽然未提及C ++ 17及其特定的高级并行性支持,但从此列表可以明显看出,它不受支持。