我正在使用 OpenMP,但问题是我声明/定义了一个函数,如下所示:
void compute_image(double pixel[nb], double &sum)
{
#pragma omp parallel for reduction(+:sum)
for (int j=0;j<640;j++)
{
if ...
sum=sum+pixel[0];
....
}
....
}
我现在意识到的是:
Error 2 error C3030: 'sum' : variable in 'reduction' clause/directive cannot have reference type C:\Users...\test.cpp 930
实际上,我无法摆脱 OpenMP。 有什么解决办法吗?
最佳答案
而不是减少,你可以把 sum=sum+pixel[0]
在#pragma omp atomic
下或 #pragma omp critical
线。
另一种选择是使用 double local_sum = sum;
在 omp 部分之前,减少 local_sum,然后有 sum = local_sum;
在 for 循环之后。
关于c++ - 并行 OpenMP 缩减与函数定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16547258/