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

dar*_*une 8 c++ parallel-processing accumulate c++17

std::accumulatestd::reduce做几乎相同的事情。

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

similar to `std::accumulate`, except out of order 
Run Code Online (Sandbox Code Playgroud)

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

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

Ant*_*ams 7

是的,std::reduce除非您知道您需要std::accumulate. 这为编译器提供了更大的优化自由度,并且在最坏的情况下无论如何都是相同的。