2016-05-05 8 views
0

MPIは私のプログラムを複数のプロセスで実行します。`std :: this_thread :: sleep_for()`をMPIプロセスで使用できますか?

これらのプロセスのうちの1つをしばらくスリープして、最小限のCPUを使用しています。

std::this_thread::sleep_for()は私が望むように見えますが、この文脈ではthreadビットが少し概略的に見えます。

これは問題ありませんか?

+0

ほとんどのMPI実装では、各ランクが独自のプロセスで開始されます。各プロセスには少なくとも1つのスレッドがあります。したがって、 'this_thread'の使用は完全にうまくいきますが、MPIがしばしば内部使用のために追加のスレッドを生成し、それらを混乱させてはいけないことに気をつけてください(実際はC++インターフェイスを使用するのは不可能です)。 –

+0

@HristoIliev:私はこれを答えとしてupvoteします。 – Richard

答えて

1

これはまったく問題ありません。その結果、何もクラッシュしたりハングしたりすることはありません。

しかし、「最小限のCPUを使用するように」というのはちょっと心配です。実行するハードウェアスレッドよりも多くのMPIプロセスを実行していますか?そのような過剰加入は一般的にパフォーマンスにとってひどいので、避けるべきです。最高のパフォーマンスは、ハードウェア・スレッドの数よりもハードウェア・ノードあたりのプロセスが1つ少なくなることが多く、システム・プロセスがアプリケーションを先取りすることなく実行できるようにしています。

これは、私がちょうどa paperを発行したばかりである)が正当化できるケースは、プロセスの並列性が低いセクションがある場合です。 Turbo Boostを搭載したIntel CPUを使用している場合、アイドルプロセスを実際にスリープさせると、動作中のプロセスを実行しているコアがより高速なクロック速度で動作することができます。

+0

ありがとうございます。私はアクティブなMPIプロセスの数をハードウェアスレッドに等しくすることに制限していますが、仕事をしていないが計算の中間結果を保持できる多くのプロセスを持つことは非常に便利です。 'MPI_Iprobe' +' sleep_for(50ms) 'のペアをループするように非アクティブプロセスを設定しました。 – Richard

+0

@リチャード、代わりに単に 'MPI_Probe'を使って、ネットワークインターフェイスをポーリングする際にビジーループを使わないようMPIライブラリに伝えてみませんか?あるいは、 'MPI_Iprobe + sleep'ループでいくつかの追加作業をしていますか? –

+0

@HristoIliev:OpenMPIは私が送った 'mca'オプションを認識していないようです。インテルMPIが環境変数に応答したかどうかは不明です。私はこの[ここ](http://stackoverflow.com/q/37078753/752843)についての新しい栄光ある質問をしました。 – Richard

関連する問題