0

我正在使用 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。有什么解决办法吗?

4

1 回答 1

1

sum=sum+pixel[0]您可以将a#pragma omp atomic#pragma omp criticalline 放在下面,而不是减少。

另一种选择可能是double local_sum = sum;在 omp 部分之前有一个,在 local_sum 上减少,然后sum = local_sum;在 for 循环之后有。

于 2013-05-14T15:46:32.563 回答