升级Ubuntu 24.04.1后MPICH的MPI_Comm_size始终返回1的问题
MPICH在Ubuntu 24.04.1中运行时
MPI_Comm_size始终返回1的修复方案 问题背景
升级至Ubuntu 24.04.1后,MPICH运行MPI程序出现异常:使用mpirun -np 4启动程序时,每个进程的MPI_Comm_size返回1,MPI_Comm_rank返回0。因FreeFem库仅兼容MPICH,无法切换至OpenMPI解决问题,重装MPICH后症状依旧。
复现代码
#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 << " of " << world_size << std::endl; MPI_Finalize(); return 0; }
编译与运行结果
编译命令:
mpic++ -o hello_world hello_world.cpp
运行命令及输出:
mpirun -np 4 ./hello_world
Hello from processor 0 of 1 Hello from processor 0 of 1 Hello from processor 0 of 1 Hello from processor 0 of 1
排查步骤
- 确认MPI工具链归属
执行以下命令,确保使用的是MPICH的工具链,而非残留的OpenMPI或其他MPI实现:which mpirun mpichversion mpic++ --showme - 检查程序链接库
查看编译生成的程序是否正确链接MPICH库:ldd hello_world | grep libmpi - 清理冲突环境变量
检查~/.bashrc、~/.profile等配置文件,删除任何指向OpenMPI或旧版MPICH的PATH、LD_LIBRARY_PATH、MPI_HOME变量。
解决方案
1. 彻底清理MPI残留
# 卸载所有MPI相关包 sudo apt-get purge mpich libmpich-dev openmpi-bin openmpi-libs libopenmpi-dev -y # 清理残留依赖和配置文件 sudo apt-get autoremove --purge -y # 删除剩余的MPICH目录 sudo rm -rf /usr/lib/mpich /usr/include/mpich /usr/share/mpich
2. 重新安装MPICH
sudo apt-get update sudo apt-get install mpich libmpich-dev -y
3. 验证修复效果
重启终端后,重新编译并运行测试程序:
mpic++ -o hello_world hello_world.cpp mpirun -np 4 ./hello_world
预期输出类似:
Hello from processor 0 of 4 Hello from processor 1 of 4 Hello from processor 2 of 4 Hello from processor 3 of 4
4. 额外调试方案(若以上无效)
- 启用MPICH verbose模式查看启动日志:
mpirun -np 4 -verbose ./hello_world - 指定主机文件强制使用localhost:
mpirun -np 4 -hostfile <(echo localhost) ./hello_world
内容的提问来源于stack exchange,提问作者Romain Gervalle
相关产品推荐
相关产品推荐

