openmp parallel for over struct members?

时间:2012-02-13 10:25:20

标签: gcc struct parallel-processing openmp

是否可以使用OpenMP并行化stuct成员的循环? 我用GCC尝试了以下内容

point_t p;
double sum;
#pragma omp parallel for private(p) reduction(+: sum)
for (p.x = 0; p.x < N; p.x++) {
    for (p.y = 0; p.y < N; p.y++) {
            sum += foo(p);
    }
}

但这给了我一个编译错误

    error: expected iteration declaration or initialization before ‘p

这是一个GCC错误还是不属于OpenMP规范?

1 个答案:

答案 0 :(得分:0)

我不认为这在OpenMP中是允许的; parallel for需要遍历变量,而不是一般左值。做

int x, y;  // or whatever you store in a point_t
double sum;

#pragma omp parallel for reduction(+:sum)
for (x=0; x<N; x++)
    for (y=0; y<N; y++) {
        point_t p(x, y);  // assuming C++
        sum += foo(p);
    }