You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MPICH运行多进程MPI程序时所有进程均显示rank 0且world_size为1的问题求助

MPICH运行多进程MPI程序时所有进程均显示rank 0且world_size为1的问题求助

我在Ubuntu 24.04上通过MPICH安装了一套MPI环境,本来以为能正常工作,结果遇到了个头疼的问题。

我写了一个简单的hello.cpp测试程序,代码如下:

#include <mpi.h>
#include <iostream>

int main(int argc, char *argv[]) 
{
  MPI_Init(&argc, &argv);

  int world_size;
  MPI_Comm_size(MPI_COMM_WORLD, &world_size);

  int world_rank;
  MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);

  std::cout << "Hello from processor " << world_rank;
  std::cout << " out of " << world_size << " processors." << std::endl;

  MPI_Finalize();
  return 0;
}

然后用MPICH的工具编译运行:

mpicxx.mpich hello.cpp
mpirun.mpich -np 4 ./a.out

结果却只显示串行模式的输出,每个进程都显示自己是rank 0,总进程数是1:

Hello from processor 0 out of 1 processors.
Hello from processor 0 out of 1 processors.
Hello from processor 0 out of 1 processors.
Hello from processor 0 out of 1 processors.

补充一下背景:我没有安装OpenMPI,应该不会出现路径混淆的问题。不过我确实装了Intel oneAPI的MPI实现,但只有手动加载它的环境变量后才能用它的编译器。有意思的是,用Intel的工具链编译运行就完全正常:

source /opt/intel/oneapi/setvars.sh
mpiicpx hello.cpp
mpirun -np 4 ./a.out

输出是预期的结果:

Hello from processor 1 out of 4 processors.
Hello from processor 2 out of 4 processors.
Hello from processor 3 out of 4 processors.
Hello from processor 0 out of 4 processors.

为了排查问题,我也收集了一些环境信息:

  • 执行mpicxx.mpich --version的输出:
g++ (Ubuntu 13.2.0-23ubuntu4) 13.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  • 执行which mpicxx.mpich的输出:
/usr/bin/mpicxx.mpich
  • 执行mpirun.mpich --version的输出:
HYDRA build details:
    Version:                                 4.2.0
    Release Date:                            Fri Feb  9 12:29:21 CST 2024
    CC:                              gcc -Wdate-time -D_FORTIFY_SOURCE=3 -g -O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -ffile-prefix-map=/build/mpich-C3oteG/mpich-4.2.0=. -flto=auto -ffat-lto-objects -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -fdebug-prefix-map=/build/mpich-C3oteG/mpich-4.2.0=/usr/src/mpich-4.2.0-5build3 -Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -Wl,-z,relro 
    Configure options:                       '--with-hwloc-prefix=/usr' '--with-device=ch4:ucx' 'FFLAGS=-O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -ffile-prefix-map=/build/mpich-C3oteG/mpich-4.2.0=. -flto=auto -ffat-lto-objects -fstack-protector-strong -fstack-clash-protection -fcf-protection -fdebug-prefix-map=/build/mpich-C3oteG/mpich-4.2.0=/usr/src/mpich-4.2.0-5build3 -fallow-invalid-boz -fallow-argument-mismatch' '--prefix=/usr' 'CFLAGS=-g -O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -ffile-prefix-map=/build/mpich-C3oteG/mpich-4.2.0=. -flto=auto -ffat-lto-objects -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -fdebug-prefix-map=/build/mpich-C3oteG/mpich-4.2.0=/usr/src/mpich-4.2.0-5build3' 'LDFLAGS=-Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -Wl,-z,relro' 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=3'
    Process Manager:                         pmi
    Launchers available:                     ssh rsh fork slurm ll lsf sge manual persist
    Topology libraries available:            hwloc
    Resource management kernels available:   user slurm ll lsf sge pbs cobalt
    Demux engines available:                 poll select
  • 用mpicxx.mpich编译后的a.out执行ldd ./a.out的输出:
linux-vdso.so.1 (0x00007ffcbd7c5000)
    libmpich.so.12 => /lib/x86_64-linux-gnu/libmpich.so.12 (0x00007a7172c00000)
    libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007a7172800000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007a7172400000)
    libhwloc.so.15 => /lib/x86_64-linux-gnu/libhwloc.so.15 (0x00007a71754a1000)
    libpmix.so.2 => /lib/x86_64-linux-gnu/libpmix.so.2 (0x00007a7172000000)
    libucp.so.0 => /lib/x86_64-linux-gnu/libucp.so.0 (0x00007a7172a9d000)
    libucs.so.0 => /lib/x86_64-linux-gnu/libucs.so.0 (0x00007a7175439000)
    /lib64/ld-linux-x86-64.so.2 (0x00007a717551a000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007a7175350000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007a71727d3000)
    libudev.so.1 => /lib/x86_64-linux-gnu/libudev.so.1 (0x00007a71727a0000)
    libmunge.so.2 => /lib/x86_64-linux-gnu/libmunge.so.2 (0x00007a7175346000)
    libevent_core-2.1.so.7 => /lib/x86_64-linux-gnu/libevent_core-2.1.so.7 (0x00007a717276b000)
    libevent_pthreads-2.1.so.7 => /lib/x86_64-linux-gnu/libevent_pthreads-2.1.so.7 (0x00007a7172a98000)
    libuct.so.0 => /lib/x86_64-linux-gnu/libuct.so.0 (0x00007a7172725000)
    libucm.so.0 => /lib/x86_64-linux-gnu/libucm.so.0 (0x00007a7172708000)
    libcap.so.2 => /lib/x86_64-linux-gnu/libcap.so.2 (0x00007a7172a8b000)

我查了类似的问题,大多都是因为同时装了OpenMPI和MPICH导致路径冲突,但我这里应该不存在这个情况。有没有大佬能帮我看看问题出在哪?非常感谢!

备注:内容来源于stack exchange,提问作者debronee101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 09:53:08