c++ - 并行 OpenMP 缩减与函数定义?

标签 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。 有什么解决办法吗?

最佳答案

而不是减少,你可以把 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/

相关文章:

c++ - 包含自定义头文件的编译器错误

C# 程序更新

c++ - 获取 QString 的一部分

python - 如何从功能 QSystemTrayIcon 向上下文菜单添加操作

c++ - 使用自定义标题栏获取类似 gnome-3 的窗口

C++返回引用/堆栈内存

c++ - 模板中的虚拟方法未生成

asp.net - 身份验证模式 ="Forms"导致 WCF 端点出现错误

visual-studio-2010 - 在 Visual Studio 2010 中配置 libjpeg

c++ - Qmysql 驱动未加载但可用