尝试运行boost::mpi tutorial中的第一个示例时,我无法在两台以上的计算机上运行。具体而言,这似乎运行正常:无法在两台以上的计算机上运行OpenMPI
mpirun -hostfile hostnames -np 4 boost1
与主机名的每个主机名<node_name> slots=2 max_slots=2
。但是,当我将进程数量增加到5时,它就会挂起。当我超过2台机器时,我已将slots
/max_slots
的数目减少为1,结果相同。在节点上,这表明了在任务列表:
<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
和boost
库访问在NFS挂载的驱动器上。我是否遇到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的recommendations,我编译并运行MPI例如hello_c.c
,如下
#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;
}
它在具有多个进程的单台机器上运行良好,包括进入任何节点并运行。每个计算节点与通过NFS从远程计算机安装的工作目录和mpi/boost目录完全相同。当从文件服务器运行boost程序时(与boost/mpi以外的节点相同)是本地的),我可以在两个远程节点上运行。对于“世界你好”,但是,运行命令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)
,而所有的“Hello World的”打印和它挂在末尾。但是,从远程节点上的计算节点运行时的行为不同。
从节点2运行时,“Hello world”和升压代码都挂起mpirun -H node1 -np 12 ./hello
,反之亦然。 (挂起的意思与上面相同:ort正在远程计算机上运行,但未通信回传。)
事实上,该行为与mpi库在本地和计算节点上运行的文件服务器上的运行不同,这表明我可能会遇到NFS死锁。这是一个合理的结论吗?假设情况如此,我如何配置mpi来允许我静态链接它?此外,我不知道如何从文件服务器运行时得到的错误,有什么想法?
@Dirk:感谢您的建议。我已经用这些观察结果更新了我的问题。 – rcollyer 2010-03-23 14:35:48