gpt4 book ai didi

c++ - reduce_parallel 不是线程安全函数吗?

转载 作者:行者123 更新时间:2023-12-04 14:05:24 24 4
gpt4 key购买 nike

我想调用 parallel_reduce 来对 vector 元素求和。但是我发现如果 vector 元素足够了,结果是不正确的。请帮助我如何使用此功能。

// prepare data
const size_t allNum = 1000000;
std::vector<double> a;
for (int i = 0; i < allNum; ++i)
{
a.push_back(double(i + 1));
}

// λ func
auto f = [&]() -> double {
return tbb::parallel_reduce(tbb::blocked_range<size_t>(0, allNum),
0.0,
[&](const tbb::blocked_range<size_t>& r, double init) -> double {
for (int i = r.begin(); i < r.end(); ++i)
{
init += a[i];
}
return init;
},
[](double f, double s) -> double {
return f + s;
}
/*std::plus<double>()*/);
};

// call λ func, get the result
double correctResult = (1.0 + 1000000.0) * 500000.0;
double sum = f(); // sum != correctResult
// sum is different every loop

最佳答案

关于c++ - reduce_parallel 不是线程安全函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68736845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com