に悩まされるべき、とはい、それ問題。たとえば、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コマンドがどのプロセスを起動するかを迅速に判断することができます。