2012-02-13 48 views
0

是否可以使用OpenMP對stuct成員進行並行循環? 我試着用GCCopenmp並行的結構成員?

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

我不認爲這是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); 
    }