在多个主机之间分配进程时,打开MPI程序不工作

Open MPI program not working when distributing processes among multiple hosts

本文关键字:打开 MPI 程序 工作 进程 主机 之间 分配      更新时间:2023-10-16

当我在一台机器上运行多个进程时,我的测试程序运行良好。

$ ./mpirun -np 2 ./mpi-test
Hi I'm A:0
Hi I'm A:1
A:1 sending 11...
A:1 sent 11
A:0 received 11 from 1
all workers checked in!

当我在多台主机上运行相同的程序时,进程会在每台主机上生成,但是MPI_Send永远不会返回。

$ ./mpirun -np 2 -host A,B ./mpi-test
Hi I'm A:0
Hi I'm B:1
B:1 sending 11...

我已经尝试了其他几个示例MPI程序,我发现我遇到了同样的问题。知道哪里出了问题吗?

编辑:如果所有进程都在远程机器上生成,则该命令也会在远程机器上运行。

代码:

#include <mpi.h>
int main(int argc, char** argv)
{
    MPI::Init();
    int rank = MPI::COMM_WORLD.Get_rank();
    int size = MPI::COMM_WORLD.Get_size();
    char name[256];
    int len;
    MPI::Get_processor_name(name, len);
    printf("Hi I'm %s:%dn", name, rank);
    if (rank == 0) {
        while (size > 1) {
            int val;
            MPI::Status status;
            MPI::COMM_WORLD.Recv(&val, 1, MPI::INT, MPI::ANY_SOURCE, MPI::ANY_TAG, status);
            int source = status.Get_source();
            printf("%s:0 received %d from %dn", name, val, source);
            size--;
        }
        printf("all workers checked in!n");
    }
    else {
        int val = rank + 10;
        printf("%s:%d sending %d...n", name, rank, val);
        MPI::COMM_WORLD.Send(&val, 1, MPI::INT, 0, 0);
        printf("%s:%d sent %dn", name, rank, val);
    }
    MPI::Finalize();
    return 0;
}

编辑:ompi_info

$ ./mpirun --bynode -host A,B --tag-output ompi_info -v ompi full --parsable
[1,0]<stdout>:package:Open MPI user@A Distribution
[1,0]<stdout>:ompi:version:full:1.4.3
[1,0]<stdout>:ompi:version:svn:r23834
[1,0]<stdout>:ompi:version:release_date:Oct 05, 2010
[1,0]<stdout>:orte:version:full:1.4.3
[1,0]<stdout>:orte:version:svn:r23834
[1,0]<stdout>:orte:version:release_date:Oct 05, 2010
[1,0]<stdout>:opal:version:full:1.4.3
[1,0]<stdout>:opal:version:svn:r23834
[1,0]<stdout>:opal:version:release_date:Oct 05, 2010
[1,0]<stdout>:ident:1.4.3
[1,1]<stdout>:package:Open MPI user@B Distribution
[1,1]<stdout>:ompi:version:full:1.4.3
[1,1]<stdout>:ompi:version:svn:r23834
[1,1]<stdout>:ompi:version:release_date:Oct 05, 2010
[1,1]<stdout>:orte:version:full:1.4.3
[1,1]<stdout>:orte:version:svn:r23834
[1,1]<stdout>:orte:version:release_date:Oct 05, 2010
[1,1]<stdout>:opal:version:full:1.4.3
[1,1]<stdout>:opal:version:svn:r23834
[1,1]<stdout>:opal:version:release_date:Oct 05, 2010
[1,1]<stdout>:ident:1.4.3

我最终在A上升级到1.5.3,在c上安装1.5.3。我不确定这是升级,还是B的问题,但现在一切正常。

参考:

  • 初始设置:节点A (arch linux, Open MPI 1.4.3),节点B (ubuntu, Open MPI3)
  • 工作设置:节点A (arch linux, Open MPI 1.5.3),节点C (arch linux,打开MPI 1.5.3)

通常的原因是远程主机上的某些东西没有正确设置;它可能是登录/网络问题,或者MPI库/可执行文件或程序本身在远程主机上找不到。

如果你尝试

会发生什么?
mpirun -np 2 -host A,B  hostname

?