Ant*_*ahl 26 c++ parallel-processing std accumulate c++17
std::accumulate我认为C++ 标准中没有并行版本是令人困惑的。在我看来,并行实现它是微不足道的,例如基于 OpenMP 或 SIMD 指令。std::reduce有人对为什么标准委员会选择引入but not的并行版本有一个很好的解释吗std::accumulate?是因为迭代器类型不同吗?
Nic*_*las 66
他们引入是reduce因为accumulate 不能像编写的那样并行化。
C++ 标准定义了各种函数的预期行为。accumulate定义如下:
acc通过使用初始值初始化累加器来计算其结果init,然后使用acc = std::move(acc) + *ior为 order范围内的acc = binary_op(std::move(acc), *i)每个迭代器修改它。i[first, last)
添加了强调。这两个词使算法变得不可并行。因为这些词是标准的一部分,所以用户accumulate可以依赖“有序”保证。它们可以进行关联操作operator+或非binary_op关联操作,这些操作依赖于操作的顺序。因此,委员会不能在不破坏一堆代码的情况下就删除这些文字。
他们不希望并行版本的accumulate行为与非并行版本有根本不同。因此,reduce在没有“按顺序”保证的情况下引入(并且使用其他有助于使其可并行化的语言)。
| 归档时间: |
|
| 查看次数: |
3716 次 |
| 最近记录: |