为啥我所有的开放 MPI 进程的排名都是 0?

Posted

技术标签:

【中文标题】为啥我所有的开放 MPI 进程的排名都是 0?【英文标题】:Why Do All My Open MPI Processes Have Rank 0?为什么我所有的开放 MPI 进程的排名都是 0? 【发布时间】:2011-05-01 16:13:29 【问题描述】:

我正在使用Open MPI 编写一个并行 程序。我正在运行 Snow Leopard 10.6.4,并通过 homebrew 包管理器安装了 Open MPI

当我使用 mpirun -np 8 ./test 运行我的程序时,每个进程都报告它的等级为 0,并且认为进程总数为 1,并且 process rank: 0, total processes: 1 的 8 行被吐出到控制台。

我知道这不是代码问题,因为完全相同的代码将在我大学计算机实验室的某些 Ubuntu 机器上按预期编译和运行。我检查了自制软件的错误跟踪器,没有人报告 Open MPI 包有问题。我很茫然。

【问题讨论】:

如果您自己从源代码构建,或者使用 OS X (Snow Leopard) 提供的 open-mpi,会发生这种情况吗? 卸载 homebrew 的 open-mpi 导致 OS X 提供的 open-mpi 工作。嗯。 这几乎总是使用一个 MPI 发行版编译并(意外或其他)使用另一个 mpirun 运行它的结果。确保所有路径和动态库搜索路径中只有一个分布。 MPI_Rank return same process number for all process的可能重复 【参考方案1】:

检查您正在调用哪个 mpirun。正在执行的 mpirun 正在启动 8 个独立的二进制实例。所以每个实例都是一个 MPI 应用程序,Universe 大小为 1,排名为 0。

此外,除非您计划在 OS X 机器集群上运行最终代码,否则我强烈建议您在虚拟机中安装 Linux 版本,例如 virtualbox,以测试和开发这些代码。

【讨论】:

【参考方案2】:

完全卸载以前的 MPI 实现。

在我的情况下,我先安装了 MPICH2,然后将其卸载,并更改为 OpenMPI。然后发生了同样的情况,所有进程的等级都是 0。我解决这个问题的方法是:从我的系统中完全卸载 MPICH2(我使用 Ubuntu/Debian Linux)。

# apt-get remove mpich2
# apt-get autoremove

【讨论】:

【参考方案3】:

今天我遇到了和你一样的问题。最后我得到了解决方案。

见https://wiki.mpich.org/mpich/index.php/Frequently_Asked_Questions#Q:_All_my_processes_get_rank_0

简单地说,答案是,MPI 需要合适的 PMI 来告诉流程他们的等级和其他东西。因此,我们需要使用对应的mpirun/mpiexec来运行MPI程序。

我猜你的问题与 mpi 程序编译器和 mpirun 工具之间的不匹配有关。所以尝试全部卸载,然后安装 MPICH/openMPI(确保只安装其中一个)。

【讨论】:

【参考方案4】:

我在 Linux 上的 C 语言中使用 openMPI 时遇到了同样的问题。使用 MPIch2 代替,问题得到解决(但请记住在最后运行 MPI_Finalize() 否则会变得很奇怪。)

【讨论】:

以上是关于为啥我所有的开放 MPI 进程的排名都是 0?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 MPI_SEND 在我的 for 循环中不起作用?如果明确说明它工作正常

MPI C 将矩阵逐行发送到所有进程子进程 (MPI_COMM_SPAWN)

使用 MPI 终止所有进程

MPI_Rank 为所有进程返回相同的进程号

OpenMPI 中的动态节点

如果MPI进程崩溃会发生什么?