2011-02-03 7 views

答えて

3

オープンMPは仕様に過ぎません。ベンダーが実装する方法は、それに応じて決まります。言われていることを、GCCの用途はオープンソースでライブラリが、そうプラグマとして、並列にだけではない持っているIntelのスレッドビルディングブロック、ですが、その実装は

0

http://www.compunity.org/futures/omp-api.html

を考えてみましょうどのようなあなたの後で単一のOpenMP並列構造を含み、4つのスレッドで実行されるメインプログラム、関数fooを呼び出す単純なOpenMPプログラム。並列領域への最初のエントリの前に、プログラムは、一つのスレッド、マスタースレッドを有し、そのスレッドは、ユーザーモデルの両方で同一のコールスタックを有し、実装モデル:

Master 
foo 
main 
<start> 

は、並列領域への参入後、4件のスレッドがあり、ユーザーモデルでは、彼らのコールスタックは、次のようになります。あなたが知っているように

Master  Slave 1 Slave 2  Slave 3 
foo-OMPa foo-OMPa foo-OMPa foo-OMPa 
foo  foo  foo   foo 
main  main  main  main 
<start> <start> <start>  <start> 
0

それは変換しているため、OpenMPのは、コンパイラの内部に実装されますコードする並列化されたコードを生成します。内部の実装作業を知りたい場合は、this articleを読んで、インテルコンパイラのOpenMP実装の詳細を説明してください。

もちろん、libgompのomp-low.cなどのgccのOpenMP実装を参照することもできます。

関連する問題