2011-08-12 6 views
3

私のアルゴリズム(ポアソンの方程式を解く)は完全に並列化可能です。各繰り返しの最後にすべてのスレッドが同期する必要があります。ブロッキング・ループに使用するopenMPプラグマはどれですか?

Function f, fNext; 
init(f); 
#pragma omp parallel 
for(int step=0; step<maxITER; step++) { 
#pragma omp for 
    for(int i=0; i<N; i++) { 
     for(int j=0; j<N; j++) { 
     fNext(i,j) = someOperator(f(i,j)); 
     } 
    } 
    f = fNext; 
}//Threads must synchronize here 

#pragma omp forは、次の反復に進む前に、スレッドの同期を確保していますか?

+0

あなたの 'i' forループはスレッドに分割され、それぞれは独自の' j'ループを実行します。多分あなたは見てみることができますhttp://msdn.microsoft.com/en-us/library/sz9sd6et(v=vs.80).aspx –

答えて

5

はい。 OpenMP Specから(例えば、V 3.1が、これは初めからになっている)、「ワークシェアリング構造:」下

nowait指示句が指定されていない限り、ループの終わりに暗黙のバリアが構築あり。すべてのスレッドがループのために行われるまで何のスレッドがf=fNextを実行しませんように、あなたが#pragma omp for nowaitような何かをしない限り、forループの最後で、ある

は、暗黙のバリアがあります。

+0

ああ...私はそれを知らなかった。どうも! – FFox

関連する問題