是否可以使用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规范?
答案 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);
}