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
相关产品推荐
相关产品推荐

