[MPI] Windows环境下vs2017中进行MPI编程可能遇到的小问题

tech2025-12-19  11

准备工作

win环境下在Vs2017中配置MPI请看这里:MPI环境搭建

MPI基础知识

int main(int argc, char* argv[]) { int mpi_rank, mpi_num; //分别代表当前进程ID和进程总数 MPI_Status status; MPI_Init(&argc, &argv); //初始化 MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); //向mpi_rank赋值 MPI_Comm_size(MPI_COMM_WORLD, &mpi_num); //向mpi_num赋值 ...... MPI_Finalize(); //此语句不可缺少,用于保证进程正常退出 }
MPI_Send():
MPI_Send(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)

参数: buf:发送缓冲区的首地址 count:需要发送的字节数 datatype:每个发送元素的数据类型 dest:目标的rankID(integer) tag:消息标识(integer) comm:通信域

MPI_Recv():
MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,MPI_Comm comm, MPI_Status *status)

参数: buf:发送缓冲区的首地址 count:需要发送的字节数 datatype:每个发送元素的数据类型 source:源进程的rankID(integer) tag:消息标识(integer) comm:通信域 status:状态标识?     Note: send与recv函数往往成对出现,同一tag下的send与recv互相匹配

Bug记录

在需要用动态数组尤其是二维数组传输数据是若使用动态创建的vector来传输数据有可能会遇到数据错误(如主进程发送的是1但从进程接收的却是inf)、或者是数组访问越界。猜测可能是由于vector本身长度不固定,即使在声明时创建的是n*m维数组但mpi_recv函数向vector中写入数据时可能不会按预想的那样依次写入,因此访问出错。 对此问题建议声明为静态二维数组(Array)用于MPI间的通讯,其他更好的解决办法暂未发现。 出错的具体代码表现如下:

job aborted: [ranks] message [0-4] terminated [5] process exited without calling finalize [6-9] terminated ---- error analysis ----- [5] on DESKTOP-OC33V33 parallelProject.exe ended prematurely and may have crashed. exit code 0xc0000005 [0] on DESKTOP-OC33V33 parallelProject.exe ended prematurely and may have crashed. exit code 0xc0000374

其他报错问题可参考该博文

最新回复(0)