相关疑难解决方法(0)

是否可以使用openmp对数组进行减少?

OpenMP本身是否支持减少表示数组的变量?

这可能会像以下一样......

float* a = (float*) calloc(4*sizeof(float));
omp_set_num_threads(13);
#pragma omp parallel reduction(+:a)
for(i=0;i<4;i++){
   a[i] += 1;  // Thread-local copy of a incremented by something interesting
}
// a now contains [13 13 13 13]
Run Code Online (Sandbox Code Playgroud)

理想情况下,对于omp并行会有类似的东西,并且如果你有足够多的线程使它有意义,那么积累将通过二叉树发生.

c++ arrays openmp reduction

19
推荐指数
2
解决办法
2万
查看次数

在C++中复杂变量的OpenMP减少的优雅(和典型)解决方法?

我意识到减少仅适用于C++中的POD类型.您将如何实现复杂类型累加器的减少?

complex<double> x(0.0,0.0), y(1.0,1.0);
#pragma omp parallel for reduction(+:x)
for(int i=0; i<5; i++)
{
    x += y;
}
Run Code Online (Sandbox Code Playgroud)

(注意到我可能已经遗漏了一些语法).似乎一个明显的解决方案是将实部和虚部分成临时双重,然后积累在那些上.我想我正在寻找优雅,这似乎......不仅仅是漂亮.这是典型的方法吗?

c++ openmp

16
推荐指数
1
解决办法
2605
查看次数

标签 统计

c++ ×2

openmp ×2

arrays ×1

reduction ×1