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
的有序保证。这给了编译器更大的优化自由度,而且在最坏的情况下无论如何都是相同的。
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
的有序保证。这给了编译器更大的优化自由度,而且在最坏的情况下无论如何都是相同的。