我正在使用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。 任何解决方案?
答案 0 :(得分:1)
您可以将sum=sum+pixel[0]
放在#pragma omp atomic
或#pragma omp critical
行下,而不是缩减。
另一种选择可能是在omp部分之前有double local_sum = sum;
,在local_sum上减少,然后在for循环之后有sum = local_sum;
。