2012-02-13 9 views
0

stumctメンバー上のループをOpenMPで並列化することはできますか? これはGCCのバグですか、OpenMPの仕様の一部ではない私は、GCC構造体上のメンバーに対してopenmpパラレル?

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 

を与えますか?

答えて

0

これはOpenMPでは許可されていません。 parallel for変数をループする必要があります。一般的な左辺値ではありません。 Do

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); 
    } 
関連する問題