MPI:通信错误,等级1:连接被拒绝

时间:2016-04-12 15:24:31

标签: c++ mpi

我有一个简单的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文件中主机的顺序是否重要?

1 个答案:

答案 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