std::reduce和std::accumulate如何选择?

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

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

std::reduce 的摘要说明了一切:

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

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

如果 std::reduce(选择了 default/no 执行策略)总是至少和 std::accumulate 一样快(节省一些指令)那么我认为只有在秩序是严格的。

是的,我会一直使用 std::reduce,除非你知道你需要 std::accumulate 的有序保证。这给了编译器更大的优化自由度,而且在最坏的情况下无论如何都是相同的。