boost :: mpiチュートリアルの最初の例を実行しようとすると、3台以上のマシンで実行できませんでした。具体的には、これは正常に実行されているようです。
mpirun -hostfile hostnames -np 4 boost1
ホスト名の各ホスト名を<node_name> slots=2 max_slots=2
。しかし、プロセスの数を5に増やすと、ハングします。slots
/の数を1に減らしましたが、max_slots
2台を超えても同じ結果になりました。ノードでは、これはジョブリストに表示されます。
<user> Ss orted --daemonize -mca ess env -mca orte_ess_jobid 388497408 \
-mca orte_ess_vpid 2 -mca orte_ess_num_procs 3 -hnp-uri \
388497408.0;tcp://<node_ip>:48823
さらに、それを殺すと、次のメッセージが表示されます。
node2- daemon did not report back when launched
node3- daemon did not report back when launched
mpi
クラスタは、NFSマウントされたドライブでアクセス可能なおよびboost
ライブラリを使用してセットアップされます。NFSでデッドロックが発生していますか?または、何か他のことが起こっていますか?
更新: 明確にするために、私が実行しているブーストプログラムは
#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>
#include <iostream>
namespace mpi = boost::mpi;
int main(int argc, char* argv[])
{
mpi::environment env(argc, argv);
mpi::communicator world;
std::cout << "I am process " << world.rank() << " of " << world.size()
<< "." << std::endl;
return 0;
}
@Dirk Eddelbuettelの推奨事項hello_c.c
から、次のようにmpiの例をコンパイルして実行しました。
#include <stdio.h>
#include "mpi.h"
int main(int argc, char* argv[])
{
int rank, size;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
printf("Hello, world, I am %d of %d\n", rank, size);
MPI_Barrier(MPI_COMM_WORLD);
MPI_Finalize();
return 0;
}
複数のプロセスを持つ単一のマシンで正常に実行されます。これには、任意のノードへのsshingと実行が含まれます。各計算ノードは、NFSを介してリモートマシンからマウントされた作業ディレクトリおよびmpi/boostディレクトリと同じです。ファイルサーバーからブーストプログラムを実行すると(boost / mpiがローカルであることを除いてノードと同じです)、2つのリモートノードで実行できます。ただし、「hello world」の場合、mpirun -H node1,node2 -np 12 ./hello
取得したコマンドを実行すると
[<node name>][[2771,1],<process #>] \
[btl_tcp_endpoint.c:638:mca_btl_tcp_endpoint_complete_connect] \
connect() to <node-ip> failed: No route to host (113)
「HelloWorld」はすべて印刷されており、最後にぶら下がっています。ただし、リモートノードの計算ノードから実行する場合の動作は異なります。
「Helloworld」とブーストコードはどちらもmpirun -H node1 -np 12 ./hello
、node2から実行するとハングし、その逆も同様です。(上記と同じ意味でハングします。ortedはリモートマシンで実行されていますが、通信していません。)
mpiライブラリがローカルであるファイルサーバーでの実行と計算ノードでの実行との動作が異なるという事実は、NFSデッドロックが発生している可能性があることを示しています。これは合理的な結論ですか?これが事実であると仮定して、静的にリンクできるようにmpiを構成するにはどうすればよいですか?さらに、ファイルサーバーから実行しているときに発生するエラーをどうすればよいかわかりません。