我有一个简单的mpi程序如下:
#include <iostream>
#include <mpi.h>
int main(int argc, char * argv[]) {
MPI::Init(argc, argv);
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
int number;
if (world_rank == 0) {
number = -1;
MPI_Send(&number, 1, MPI_INT, 1, 0, MPI_COMM_WORLD);
} else if (world_rank == 1) {
MPI_Recv(&number, 1, MPI_INT, 0, 0, MPI_COMM_WORLD,
MPI_STATUS_IGNORE);
printf("Process 1 received number %d from process 0\n",
number);
}
return 0;
}
我指定了一个包含2个条目的主机文件。服务器是我运行mpi的本地机器,而ubuntu是远程机器。
Server
ubuntu
当我尝试通过运行mpirun -np 2 --hostfile hosts ./test
来运行mpi可执行文件时,它会给我一个错误Communication error with rank 1: Connection refused
。但是,如果我反转主机文件中主机的顺序
ubuntu
Server
工作正常。我似乎无法理解为什么。 hosts文件中主机的顺序是否重要?
答案 0 :(得分:2)
我碰巧遇到了与运行时错误相同的问题。
确定您可以ssh并登录到您的客户机无密码之后。 MPICH主服务器无法找到客户端(从服务器)主机名的主要原因是因为/etc/hosts file
中的客户端,localhost名称分配给客户端用户名和localhost本身,例如运行sudo vim etc/hosts
您将拥有计算机的主机名称列表:
127.0.0.1 clientUsrName
127.0.0.1 localhost
订单根本不重要。您所要做的就是将您的clientUsrName错误地注释为127.0.0.1作为localhost IP。例如:
# 127.0.0.1 clientUsrName
127.0.0.1 localhost