c++ - 使用 par_unseq 时,我仍然可以依赖输出元素的顺序吗?
问题描述
阅读文档后,我仍然对par_unseq
. 我知道由于线程和矢量化,我无法说出关于执行顺序的任何信息,但我仍然可以依赖输出的顺序吗?
transform([x0, x1, x2], f) == [f(x0), f(x1), f(x2)]]
换句话说,这个测试会失败吗?
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);
解决方案
标准[alg.transform]内容如下:
效果:
i
通过范围内的每个迭代器分配[result,result + (last1 - first1))
一个新的对应值等于op(*(first1 + (i - result))
orbinary_op(*(first1 + (i - result)), *(first2 + (i - result)))
。
和(感谢@Caleth),[algorithms.parallel.overloads]:
除非另有说明,否则
ExecutionPolicy
算法重载的语义与其没有的重载相同。
所以,是的,您可以依赖输出中的顺序。
推荐阅读
- google-cloud-platform - 无法在对话流知识库中创建包含原始内容的文档
- python - 如何将无效的 json 转换为 val;python 中的 id json
- java - 在Java中读取和写入文件,同时保留特殊字符
- javascript - 如何根据角度选择的值隐藏输入字段?
- javascript - 无法在反应中使用 mousemove 移动 div
- javascript - d3.js + React,node.getBoundingClientRect 不是函数
- java - Java循环遍历对象数组返回@number
- json - 如何制作包含 html 标记的 WordPress 页面的 json 端点?
- jenkins - Jenkins Pipeline 使用选择参数检查条件的最佳方式
- php - PHP RegEx:删除 CSS 规则,除非包含特定字符串