小编big*_*ega的帖子

并行返回错误结果的parallel_reduce

我正在尝试使用英特尔TBB parallel_reduce来获取由双精度组成的数组元素的总和.但是,与OpenMP减少实现相比,结果是不同的.

这是OpenMP的一个:

double dAverageTemp = 0.0;
#pragma omp parallel for reduction(+:dAverageTemp)
for (int i = 0; i < sCartesianSize; i++)
    dAverageTemp += pdTempCurr[i];
Run Code Online (Sandbox Code Playgroud)

此代码返回正确的值"317.277 493 "; 但是这个TBB代码:

double dAverageTemp = tbb::parallel_reduce(tbb::blocked_range<double*>(pdTempCurr, pdTempCurr + sCartesianSize - 1),
                                        0.0,
                                        [](const tbb::blocked_range<double*> &r, double value) -> double {
                                            return std::accumulate(r.begin(), r.end(), value);
                                        },
                                        std::plus<double>()
                                        );
Run Code Online (Sandbox Code Playgroud)

坚持认为结果是"317.277 193 ".

我在这里错过了什么?

c++ parallel-processing tbb openmp

0
推荐指数
1
解决办法
79
查看次数

标签 统计

c++ ×1

openmp ×1

parallel-processing ×1

tbb ×1