num_threads()は設定した方が良い? | 並列化フォーラム | フォーラム

iSUS に投稿されている記事の内容や、IA プラットフォーム上でのソフトウェア開発に関するトピックを開発者同士でディスカッションできる場としてフォーラムを公開しています。

運営ルールはフォーラムの利用案内をご覧ください。
フォーラムの使い方はこちら

 
フォーラムに投稿するにはログインが必要ですログイン

num_threads()は設定した方が良い?

メンバー投稿

1:21 PM
2012年5月31日


yoshihingis

投稿数 54

1

 OpenMPの並列処理での基本的質問ですが

下記は良く参考書にあるParallel Sectionsで処理Aと処理Bを並列化する記述です。
 この時、#pragma omp paralleel sections num_threads(2)と2並列処理の場合、並列数を明示した方が良いのでしょうか?

 Vtune XEでみると、num_threads(2)と明示しない場合、スレッド数は、CPUの論理コア数だけのスレッドが立ちます。
 しかし、実際は処理A,処理Bの2並列なので、実質2スレッドしか動作していないような結果が表示されます。

 前に、Open MP DLLのメモリーリークの投稿の時、Open MPを動作させた段階で、マルチスレッド用のメモリーが確保され、プロセスが終了するまでされは解放されないという知見を得ることができました。

 実質2並列処理しかしないのに、num_threads()で、スレッド数を指定しないと
 ・余分なスレッド用のメモリが確保されてしまう。
  →32bit環境で、他のアプリも動作させて、メモリがキツキツの状態の時、OpenMPの  余計なメモリ確保が悪影響しないか?
 ・論理コア分だけスレッドが立つ。
  実質、動作していないが、論理コア数だけのスレッドが立ってしまうので、他アプリも  動作させている時、コアの取り合いが生じて、他アプリの実行速度に影響が出ないか?

 以上の2点を懸念しております。

 処理A,処理Bのように2並列しかしない場合には、num_threads(2)のような記述を行い、余計なスレッドは立てない方がベターなのでしょうか?
 ご存知の方がおりましたら、是非、ご教授ください。

#pragma opm parallel sections
{
#pragam omp section
{
処理A
}

#pragma omp section
{
処理B
}
}

3:46 AM
2012年6月1日


iSUS編集部 – 菅原

投稿数 206

2

こんにちは、

sections 構文を利用する際に、section 句が実際のコア数に満たない場合ですが、ご指摘のようにデフォルトでは、コア数-1 個のワーカースレッドが生成されます。2つのセクションが動作する場合、2つのワーカースレッドがアクティブな状態でCPUコアを占有しますが、他のワーカースレッドはインアクティブであるため、CPUリソースを占有しません。そのため、コアを取り合うということはありません。

インアクティブなワーカースレッドには、アプリケーションの並列コード領域の実行が割り当てられていないので、アプリケーションに割り当てられるメモリーは消費しません(カーネルリソースは、ワーカーが生成されている分管理情報が作成されますが)。

Section中に入れ子のOpenMP並列領域が無いのであれば、num_threadsでスレッド数を2つにしても問題ないと思います。ささやかですがメモリーの節約になるでしょう。

10:38 AM
2012年6月4日


yoshihingis

投稿数 54

3

菅原様、ご回答ありがとうございました。
 OpenMPの参考書は、コードやプラグマなどの解説はよく書かれていますが、CPUのハード的な動作の記述はあまり書かれておりませんので、このフォーラムを利用させて頂き、知見を深めていきたいと考えております。
 今後ともよろしくお願いいたします。

3:55 PM
2012年6月5日


iSUS編集部 – 菅原

投稿数 206

4

こんにちは、

もともとOpenMPはハードウェアに依存しない並列処理を記述できるように定義されているため、仕様でもH/W依存の記述は少ないです。OpenMP3.1の仕様で、OMP_PROC_BIND環境変数で、ソケットが複数ある場合どのようにスレッドをバインドするか、H/Wを意識したものも追加されています。

インテルコンパイラーの場合、固有のアフィニティー制御を実装していますので、KMP_AFFINITYに関するマニュアルの記述などを参照ください。

アフィニティーに関しては、以下のiSUSの記事があります。

http://www.isus.jp/article/per…..threading/