2016-03-19 6 views
1

こんにちは、私はこのウェブサイトhttp://www.viva64.com/en/a/0054/を読んでおり、ポイント番号17は、バリアのない下のコードは間違っていると言います。どうして ?私はhttp://bisqwit.iki.fi/story/howto/openmp/#BarrierDirectiveAndTheNowaitClauseで読んでいます。各パラレルブロックの最後に暗黙的なバリアがあり、nowait指令が使用されていない限り、各セクションの最後にforとsingle statementがあります。OpenMP暗黙のバリア

struct MyType 
{ 
    ~MyType(); 
}; 
MyType threaded_var; 
#pragma omp threadprivate(threaded_var) 
int main() 
{ 
    #pragma omp parallel 
    { 
      ... 
      #pragma omp barrier // code is wrong without barrier. 
    }  
} 

誰かに説明してください。ありがとう

+1

を同期[IMPLがありますパラレル領域の終わりにバリアを置く](https://computing.llnl.gov/tutorials/openMP/#ParallelRegion)。それが真実だとすれば、リンクのポイント番号17が間違っていると思います。 –

+0

OpenMP 4.5の仕様をチェックしたところ、「並列構造の最後に暗黙的なバリアがあります」と書かれています。 –

+0

仕様では、「スレッドの変数のすべてのコピーの格納は、スタティック変数が基本言語でどのように処理されるかによって異なりますが、プログラム内の指定されていない点で解放されます。 –

答えて

0

リンク先のWebページが間違っています。実際には、パラレルセクションの最後に暗黙のバリアがあります。

ウェブサイトは、Windowsのフォーカスを持っているようだと、MSは唯一のOpenMP標準2.0をサポートしていますので、この暗黙のバリアが、現在の標準的な4.5にも、バージョン2.0でだけではないことは注目に値するかもしれない:

平行構築が完了すると

、チーム 内のスレッドは、私の知る限り理解するように、[...]は、暗黙的なバリアで

http://www.openmp.org/mp-documents/cspec20.pdf

関連する問題