parallel-processing - C++parallel_reduce如何使用初始值参数?

标签 parallel-processing c++17 tbb

我希望以下代码片段生成所有元素和初始值的总和,但事实并非如此:

    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

它生成的是 215,而不是预期的 65。即使每个元素都是按 10 添加的,31 * 5 = 155,而不是 215215 是如何产生的? 我想念什么?任何解释如何使用初始值的引用都将受到赞赏。

最佳答案

您并没有真正提供 MCVE,因为相关代码片段无法编译,但一个问题仍然很明显:您假设 parallel_reduce 的最后一个参数是初始值,而根据文档这是身份值(value)。

加法恒等式为 0,如果通过,将得到预期结果 (55)。

关于parallel-processing - C++parallel_reduce如何使用初始值参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72299971/

相关文章:

bash - 并行运行两个连续的 bash 脚本 4 次

multithreading - 我如何提高 vanilla Rust 中并行代码的低性能?

python - Cython 导入错误 : No module named parallel

c++ - 并行 STL 是否处理插入迭代器,例如 std::back_insert_iterator?

c++ - 英特尔 TBB : pool of graphs

java - java Matlab 的可序列化性

c++ - period 必须是 C++17 chrono 库中 ratio 的特化吗?

c++ - 如何避免在 C++11 中触发这种复制构造函数?

c++ - -mimplicit-it 编译器标志无法识别

c++ - Intel TBB 在并行线程中运行函数?