我正在尝试探测消息以便在 MPI 进程(8 个进程)之间进行通信。第一个到达代码特定部分的进程将向所有其他进程发出信号,其他进程将在到达那里时终止。
这是我已经实现的:(欢迎任何更简单的解决方案)
if(depth == size){
endTime = MPI_Wtime();
MPI_Iprobe(MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &stat, MPI_STATUS_IGNORE);
if(!stat){
printf("Execution completed in %.5f seconds.\n", endTime - beginTime);
for (ctr = 0; ctr < mpi_processors; ctr++) {
if(ctr == mpi_my_pid) continue;
MPI_Isend(&stat, 1, MPI_INT, ctr, 0, MPI_COMM_WORLD, &req);
printf("sent to %d from %d\n",ctr,mpi_my_pid);
}
}
return 1;
}
代码是不言自明的。stat
是一个虚拟变量,仅用于“发送”消息,也用作Iprobe
. 问题是,stat 在所有进程中始终为零,这意味着探测不会返回任何等待接收的消息。但我可以确认 MPI_Isend 正确运行并发送消息。
我是在做一些根本错误的事情,还是在某个我看不到的地方存在一个简单的错误?
谢谢,
能。