我正在尝试探测消息,以便在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正确运行并发送消息。
我做了一些根本错误的事情,还是某个我看不到的简单错误?
谢谢,
可以。