2011-05-04 166 views
2

我已經使用OpenMP下面的C代碼:收起子句中的#pragma OMP被忽略

#pragma omp parallel default(none) private(i, j, k) shared(lb0, ub0, lb1, ub1, lb2, ub2, g, current, update, diff, dg) 
    #pragma omp for collapse(3) 
    for(i = lb0; i <= ub0; i++) { 
    for(j = lb1; j <= ub1; j++) { 
     for(k = lb2; k <= ub2; k++) { 
    g->data[ update ][ i ][ j ][ k ] = 
     ONE_SIXTH * (g->data[ current ][ i + 1 ][ j  ][ k  ] + 
      g->data[ current ][ i - 1 ][ j  ][ k  ] + 
      g->data[ current ][ i  ][ j + 1 ][ k  ] + 
      g->data[ current ][ i  ][ j - 1 ][ k  ] + 
      g->data[ current ][ i  ][ j  ][ k + 1 ] + 
      g->data[ current ][ i  ][ j  ][ k - 1 ]); 
    diff = fabs(g->data[ update ][ i ][ j ][ k ] - g->data[ current ][ i ][ j ][ k ]); 
    dg = dg > diff ? dg : diff; 
     } 
    } 
    } 

據我所知,我下面使用崩潰子句將#pragma OMP規則爲指令,但是當我編譯它時,我得到以下錯誤:

grid.c: In function ‘grid_update’: 
grid.c:202: error: expected ‘#pragma omp’ clause before ‘collapse’ 
make: *** [grid.o] Error 1 

我在做什麼錯在這裏?我試過把#pragma omp collapse作爲一個單獨的指令,但那也行不通。

回答

2

我認爲崩潰在OpenMP 3(2008)中是新的;是否有可能你正在使用一個不支持它的舊編譯器 - 比(比如說)gcc 4.4更老的東西?

+0

在OpenMP V3.0規範中添加了摺疊。 gcc文檔顯示,直到gcc版本4.4才支持OpenMP V3.0。 – ejd 2011-05-04 14:37:30

+0

謝謝你們 - 完全正確。現在只是要獾我的系統管理員升級! – robintw 2011-05-04 17:33:42