作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想调用 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
最佳答案
我尝试运行上面的代码。它运行良好,也得到了正确的结果!
有关 parallel_reduce 的更多信息,请参阅以下链接:
https://software.intel.com/content/www/us/en/develop/documentation/tbb-documentation/top/intel-threading-building-blocks-developer-reference/algorithms/parallelreduce-template-function.html
https://link.springer.com/content/pdf/10.1007%2F978-1-4842-4398-5.pdf
谢谢,
桑托什
关于c++ - reduce_parallel 不是线程安全函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68736845/
我想调用 parallel_reduce 来对 vector 元素求和。但是我发现如果 vector 元素足够了,结果是不正确的。请帮助我如何使用此功能。 // prepare data co
我是一名优秀的程序员,十分优秀!