有没有办法检查某些进程是否正在等待 MPI_Recv?
我有一个根进程和一些从属进程。
从属伪代码:
while (1) {
do_some_stuff; // calls MPI_Test and clear unused buffers
MPI_Recv(buf, ...);
do_something_with_buf;
MPI_Isend(buf2, ...); // possibly many sends depending on what was in buf
}
如果所有从属进程都挂在 MPI_Recv 上,那么工作就完成了,我需要停止循环。现在我需要一些方法来通知从属进程工作已经完成。有没有办法做到这一点?我认为可能会有类似反向探测的东西来检查是否有人在等待消息,而不是检查是否有消息要接收。没有发现任何有用的东西。
编辑:更多解释。
我有一个根 proc,它读取一个巨大的文件并将读取的数据发送给工作人员(其余进程)。每个工作人员接收一部分数据,因此其分布良好(每个工作人员存储的数据量大致相同)。然后这些工作人员开始相互通信,发送部分计算。当一个工作人员收到一个部分计算时,它可能会产生很多新的部分结果,其中一些需要发送到其他工作。当所有工人无事可做并且没有更多的部分结果等待接收时,工作就完成了。