2010-11-23 9 views
0

MPI_Comm_spawnを使用してリモートノード上でワーカープロセスを開始するにはどうすればよいですか? OpenMPIの1.4.3を使用してリモートノード上のmpi_comm_spawn

は、私はこのコードを試してみた:

MPI_Info info; 
MPI_Info_create(&info); 
MPI_Info_set(info, "host", "node2"); 
MPI_Comm intercom; 
MPI_Comm_spawn("worker", 
     MPI_ARGV_NULL, 
     nprocs, 
     info, 
     0, 
     MPI_COMM_SELF, 
     &intercom, 
     MPI_ERRCODES_IGNORE); 

をしかし、それは、このエラーメッセージで失敗します。私はの名前で "ノード2" に置き換えると

 
-------------------------------------------------------------------------- 
There are no allocated resources for the application 
    worker 
that match the requested mapping: 


Verify that you have mapped the allocated resources properly using the 
--host or --hostfile specification. 
-------------------------------------------------------------------------- 
-------------------------------------------------------------------------- 
A daemon (pid unknown) died unexpectedly on signal 1 while attempting to 
launch so we are aborting. 

There may be more information reported by the environment (see above). 

This may be because the daemon was unable to find all the needed shared 
libraries on the remote node. You may set your LD_LIBRARY_PATH to have the 
location of the shared libraries on the remote nodes and this will 
automatically be forwarded to the remote nodes. 
-------------------------------------------------------------------------- 

私のローカルマシン、それは正常に動作します。私がnode2にsshして同じことを(情報ディクショナリに "node2"を付けて)実行すると、うまく動作します。

私はmpirunで親プロセスを開始したくないので、リモートノードのプロセスを動的に起動する方法を探しています。これは可能ですか?

答えて

1

私はmpirunので親 プロセスを開始したくないので、私はちょうど 動的にリモート・ノードで プロセスを起動する方法を探しています。これは ですか?

なぜ私はmpirunで起動したくないのですか?とにかく、MPI_Init()を打つとすぐに、MPIマシン全体を暗黙的に起動します。これにより、デフォルトに頼るのではなく、オプションを渡すだけです。

ここでの問題は、MPIライブラリが(MPI_Init()で)起動するときに、--hostまたは--hostfileオプションを指定していないため、使用可能な他のホストが表示されないことですmpirunに。あなたの言うところのどこかでプロセスを起動するだけではありません(実際には、情報ホストを必要としないので、一般的にどこに行かないかは分かりません)。

ですから、 mpirun --host myhost,host2 -np 1 ./parentjob または、より一般的に、好ましくは

myhost slots=1 
host2 slots=8 
host3 slots=8 

利用可能なスロット数を持つホストファイルを、提供してジョブをこのように起動し、 mpirun --hostfile mpihosts.txt -np 1 ./parentjobこれは機能で操作を行う必要があります、バグではありません。今はMPIの仕事で、どこに労働者がいるのかを知ることができます。また、ホストに情報を明示的に指定しないと、ほとんど利用されていない場所にホストを配置しようとします。これはまた、再生成する必要がないことを意味します。

+0

ありがとうございました。私がmpirunを避けたい理由は、私が計算の一部をオフロードするMATLAB mexファイルを書いていることです。ですから、私はMATLABが呼び出すCファイルを1つだけ持っています。これは、ホスト名をプログラムで指定する必要があることを意味します。これは、私のmexファイルから何か新しいプロセスでmpirunを起動しなければならないということですか? – krashalot

+0

ああ、そうです。あなたはmexファイルシステム( "mpirun ..")を持っていてもかまいませんが、mpirunを呼び出すbashスクリプトを呼び出してもかまいません。これらの複数のレイヤーを避けたい場所がわかります。私がちょうど試みたもう一つのことは、OpenMPIで動作するように思えますが、私の名前がSOに関連付けられていることを恥ずかしく思うのは、次のようなものです。 'int fakeargc = 6; char ** fakeargv = {"mpirun"、 "--hostfile"、 "mpihosts.txt"、 " - np"、 "1"、 "./ parentjob"}; MPI_Init(&fakeargc、&fakeargv); '。私はそれが推奨されているとは想像もできませんし、他のMPIでも確実に動作するでしょう。 –

+0

ああ。余分な層が必要になるように見えます。あなたのトリックは私にとって受け入れられていただろうが、残念ながらここで働かなかった(途中でchar * fakeargv []として定義してからchar ***にキャストしなければならなかった)。私はopenmpiとmpich2のドキュメントを掘り下げました。mpirun/mpiexecで呼び出されない限り、遠隔メモの作成プロセスをサポートしていないのは現時点では現時点でのようです。 – krashalot

関連する問題