在多个主机之间分配进程时,打开MPI程序不工作
Open MPI program not working when distributing processes among multiple hosts
当我在一台机器上运行多个进程时,我的测试程序运行良好。
$ ./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
?
相关文章:
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 问:如何使用C++中的按钮从窗口打开窗口
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- MPI突然停止了对多个核心的操作
- 无法打开.txt文件
- 如何打开并写入一个名称取自C++中字符串的文件
- 即使我读取了所有内容,在FIFO上打开的QSocketNotifier也会一直启动
- 错误-我无法在VS2019中打开新的Qt项目
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- SFML RenderWindow打开窗口需要很长时间
- 设置 Visual Studio for MPI: 找不到标识符错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 无法打开 fstream C++文件,即使它与 .cpp 位于同一位置
- C++程序打开时立即运行的代码
- 在 C/C++ 中打开驻留在 "/sys/" 下的文件时出错
- 有人可以用打开的 mpi 解释这个瓦尔格林德错误吗?
- 可以在双Hexacore机器上打开MPI导致性能问题
- 使用sudo权限打开mpi / mpirun或mpiexec
- 打开MPI:如何在每个主机上运行1个进程
- 在多个主机之间分配进程时,打开MPI程序不工作