【发布时间】:2018-04-14 12:34:10
【问题描述】:
我有一个简单的 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
它工作正常。我似乎无法理解为什么。主机文件中主机的顺序是否重要?
【问题讨论】:
-
你的 MPI 实现是什么,它是哪个版本。请告诉我们更多关于您的安装以及到目前为止您已采取的步骤。
-
如果您的 MPI 实现使用 hosts 文件中主机的顺序来确定排名,我不会感到惊讶。如果是这种情况,那么正在发生的事情是您的一台机器可以正常发送消息,但无法接收它们。这可能是由于防火墙设置过于严格。
-
您的代码在这里运行良好...
-
@Zulan:我使用的是 MPICH 3.0.4 版。我使用“sudo apt-get install libcr-dev mpich2 mpich2-doc”安装了它。我创建了一个 mpiuser 并按照本教程 (mpitutorial.com/tutorials/running-an-mpi-cluster-within-a-lan) 设置了一个包含 2 个节点的集群。
-
wiki.mpich.org/mpich/index.php/Frequently_Asked_Questions 问:我的 MPI 程序因错误而中止,说它无法与其他进程通信。另外,请编辑您的问题以包含所要求的附加信息,以便在不阅读 cmets 的情况下成为有用的问题。