Tim*_*imW 14 c++ algorithm parallel-processing c++17
阅读文档后,我仍然对使用它感到困惑par_unseq.我知道由于线程和矢量化,我无法说出执行的顺序,但是我仍然可以依赖输出的顺序吗?
transform([x0, x1, x2], f) == [f(x0), f(x1), f(x2)]]
Run Code Online (Sandbox Code Playgroud)
换句话说,这个测试是否会失败?
std::vector<int> xs = {1, 2, 3, 4};
std::vector<int> ys(xs.size());
std::transform(
std::execution::par_unseq,
cbegin(xs), cend(xs),
begin(ys),
[](int x) { return x*x; });
std::vector<int> expected = {1, 4, 9, 16};
ASSERT_EQ(expected , ys);
Run Code Online (Sandbox Code Playgroud)
Evg*_*Evg 11
标准,[alg.transform],内容如下:
效果:通过
i范围中[result,result + (last1 - first1))的每个迭代器分配一个等于op(*(first1 + (i - result))或的新对应值binary_op(*(first1 + (i - result)), *(first2 + (i - result))).
和(感谢@Caleth),[algorithms.parallel.overloads]:
除非另有说明,否则
ExecutionPolicy算法重载的语义与它们的重载相同.
所以,是的,您可以依赖输出中的顺序.