2012-02-23 8 views
3

クラスタ上でコマンドmpirun -np 4 a.outを使用してMPIプログラムを起動すると、 どのようにしてMPIランタイムシステムがCPU間でプロセスを割り当てるのですか?MPIランタイムシステムによって割り当てられたプロセスの物理的位置

クラスタ内でアイドル状態のクアッドコアCPUが見つかったとします。そのCPUで4つのプロセスをすべて実行するか、4つのCPUを見つけて4つのプロセスをCPUごとに1つのプロセスで実行しますか?

これはMPIの特定の実装に依存しますか?

そして、私ははい、それはMPIの実装に依存MPIが私のために選ぶだろう特定の構成(4 CPUの上の1つのCPUまたはCPUごとに1つのプロセス上の4つのプロセス)

答えて

4

に悩まされるべき、とはい、それ問題。たとえば、MPIタスクごとにノード分のメモリを使用できると思っていて、1つのノードに4つのタスクをロードし、他のノードには何もロードしていないと、深刻な問題に遭遇します。同様に、4つの8コアノードで実行していて、それぞれ8つのOpenMPスレッドを使用して4つのタスクを実行していた場合、1つのタスクと4つのノードのそれぞれに8つのスレッドを使用することに大きな違いがあります1つのノード上にあり、他のノード上にはありません。

x86タイプのハードウェアで最も一般的なMPI実装は、OpenMPIまたはMPICH2ベースです。 OpenMPIは次のノードに行く前にノードを埋めるでしょう。たとえば、 "--bynode"オプションを与えることでその動作を変更することができます。このオプションでは、1つのノードに1つのタスクを割り当て、次のタスクに次のタスクなどを割り当て、必要に応じて最初のノードに再び折り返します。 (OpenMPIにはさらに細かい制御のために--bysocketと--bycoreがあり、どこに行くのかを正確に示す--display-mapオプションがあります)。

mpich2ベースのMPIでは、ノード間でロビンを行う「ラウンドロビン」の-rrオプションを付けることができます(たとえば、OpenMPIの--bynode動作)。

いずれの場合でも、linuxタイプのシステムでは、のように、 'mpirun -np 4 hostname'を実行すると、mpirunコマンドがどのプロセスを起動するかを迅速に判断することができます。

関連する問題