并行OpenMP减少与功能定义?

时间:2013-05-14 15:32:05

标签: c++ visual-studio-2010 qt opencv openmp

我正在使用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。 任何解决方案?

1 个答案:

答案 0 :(得分:1)

您可以将sum=sum+pixel[0]放在#pragma omp atomic#pragma omp critical行下,而不是缩减。

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