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で親プロセスを開始したくないので、リモートノードのプロセスを動的に起動する方法を探しています。これは可能ですか?
ありがとうございました。私がmpirunを避けたい理由は、私が計算の一部をオフロードするMATLAB mexファイルを書いていることです。ですから、私はMATLABが呼び出すCファイルを1つだけ持っています。これは、ホスト名をプログラムで指定する必要があることを意味します。これは、私のmexファイルから何か新しいプロセスでmpirunを起動しなければならないということですか? – krashalot
ああ、そうです。あなたはmexファイルシステム( "mpirun ..")を持っていてもかまいませんが、mpirunを呼び出すbashスクリプトを呼び出してもかまいません。これらの複数のレイヤーを避けたい場所がわかります。私がちょうど試みたもう一つのことは、OpenMPIで動作するように思えますが、私の名前がSOに関連付けられていることを恥ずかしく思うのは、次のようなものです。 'int fakeargc = 6; char ** fakeargv = {"mpirun"、 "--hostfile"、 "mpihosts.txt"、 " - np"、 "1"、 "./ parentjob"}; MPI_Init(&fakeargc、&fakeargv); '。私はそれが推奨されているとは想像もできませんし、他のMPIでも確実に動作するでしょう。 –
ああ。余分な層が必要になるように見えます。あなたのトリックは私にとって受け入れられていただろうが、残念ながらここで働かなかった(途中でchar * fakeargv []として定義してからchar ***にキャストしなければならなかった)。私はopenmpiとmpich2のドキュメントを掘り下げました。mpirun/mpiexecで呼び出されない限り、遠隔メモの作成プロセスをサポートしていないのは現時点では現時点でのようです。 – krashalot