如何在 std::reduce 和 std::accumulate 之间进行选择?

How to choose between std::reduce and std::accumulate?

提问人:darune 提问时间:1/22/2020 最后编辑:darune 更新时间:2/7/2020 访问量:863

问:

std::accumulatestd::reduce 执行几乎相同的操作。

总结说明了一切:std::reduce

similar to `std::accumulate`, except out of order 

在许多情况下,这些函数应产生相同的最终结果并表现出相同的整体功能。很明显,如果你有一些非常重的负载计算等,你可以尝试进行交换。即。从鸟类的角度来看,这里的传统智慧是什么 - 除非明确优化,否则您是否应该始终坚持生硬的 std::accumulate?还是应该默认使用?std::reducestd::reduce

如果(选择默认/未选择执行策略)总是至少与(保存一些指令)一样快,那么我认为只有在订单严格时才应该使用累积。std::reducestd::accumulate

C++ 并行处理 C++17 累加

评论


答:

11赞 Anthony Williams 1/22/2020 #1

是的,我会一直使用,除非您知道您需要 的订单保证。这为编译器提供了更大的优化自由度,在最坏的情况下,无论如何都是相同的。std::reducestd::accumulate