MPI_Bcast代码执行报execvp错误,求排查及解决方法
问题解答
1. 代码是否正确?
你的MPI_Bcast代码逻辑上是正确的,但存在一个小的输出格式问题:
printf中的换行符写成了/n,应该改为\n,否则无法正常换行输出。- 核心逻辑:根进程(rank=0)初始化
data=10,通过MPI_Bcast将数据广播到所有进程,非根进程接收数据,这个流程完全符合MPI_Bcast的使用规范。
修正后的代码(仅修正换行符):
#include <iostream> #include <mpi.h> using namespace std; int main(int argc, char* argv[]) { int rank; int data=0; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); // 根进程初始化数据 if (rank == 0){ data = 10; } printf("\nbefore bcast data in Process %d : %d", rank, data); MPI_Bcast(&data, 1, MPI_INT, 0, MPI_COMM_WORLD); printf("\nafter bcast data in Process %d : %d", rank, data); MPI_Finalize(); return 0; }
2. 如何得到预期运行结果?
你遇到的错误execvp error on file ./Fan是因为MPI运行时找不到指定的可执行文件,和代码本身无关,按以下步骤操作即可解决:
步骤1:编译MPI代码
使用MPI官方提供的C++编译器编译代码(比如mpicxx或mpiCC,具体取决于你的MPI实现):
mpicxx your_code.cpp -o mpi_bcast_demo
将your_code.cpp替换为你实际的代码文件名,mpi_bcast_demo是生成的可执行文件名称,可自定义。
步骤2:运行MPI程序
用mpirun或mpiexec启动程序,同时指定进程数(示例为启动4个进程):
mpirun -np 4 ./mpi_bcast_demo
如果是集群环境,需结合集群调度系统(如Slurm)提交任务,示例命令:
srun -n 4 ./mpi_bcast_demo
预期输出示例
运行后会得到类似如下的输出(进程输出顺序可能随机):
before bcast data in Process 0 : 10 before bcast data in Process 1 : 0 before bcast data in Process 2 : 0 before bcast data in Process 3 : 0 after bcast data in Process 0 : 10 after bcast data in Process 1 : 10 after bcast data in Process 2 : 10 after bcast data in Process 3 : 10
内容的提问来源于stack exchange,提问作者FanZhou
相关产品推荐
相关产品推荐

