C++parallel_reduce如何使用初值参数?
How does C++ parallel_reduce use the inital value parameter?
我希望下面的代码片段能够生成所有元素的总和和初始值,但它没有:
vector<long> a;
a.resize(10);
generate(a.begin(), a.end(), [n = 1]() mutable { return n++; });
#ifdef _MSC_VER
sum = parallel_reduce(a.begin(), a.end(), 10);
assert(sum == 65); // 11 * 5 + 10. It produces 215 instead.
#endif
而不是预期的 65
,它产生 215
。即使每个元素都由 10
、31 * 5 = 155
添加,而不是 215
。 215
是怎么来的?
我想念什么?感谢任何解释如何使用初始值的参考。
您并没有真正提供 MCVE,因为有问题的代码片段无法编译,但一个问题仍然很明显:您假设 parallel_reduce
的最后一个参数是初始值,而根据文档,它是标识值。
加法的标识为 0,如果你通过它,你将得到预期结果 (55)。
我希望下面的代码片段能够生成所有元素的总和和初始值,但它没有:
vector<long> a;
a.resize(10);
generate(a.begin(), a.end(), [n = 1]() mutable { return n++; });
#ifdef _MSC_VER
sum = parallel_reduce(a.begin(), a.end(), 10);
assert(sum == 65); // 11 * 5 + 10. It produces 215 instead.
#endif
而不是预期的 65
,它产生 215
。即使每个元素都由 10
、31 * 5 = 155
添加,而不是 215
。 215
是怎么来的?
我想念什么?感谢任何解释如何使用初始值的参考。
您并没有真正提供 MCVE,因为有问题的代码片段无法编译,但一个问题仍然很明显:您假设 parallel_reduce
的最后一个参数是初始值,而根据文档,它是标识值。
加法的标识为 0,如果你通过它,你将得到预期结果 (55)。