有没有办法检查一些进程是否在等待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,它读取一个巨大的文件并将读取的数据发送给工作进程(进程的其余部分)。每个工作者都会收到一部分数据,因此其分布是均匀的(每个工作者存储的数据量大致相同)。然后,这些工作者开始相互通信,发送部分计算。当工人接受部分计算时,它可能会产生许多新的部分结果,其中一些需要发送到其他工作。当所有工人都无事可做,并且没有更多的部分结果等待接收时,工作就完成了。
发布于 2015-06-14 03:26:37
您应该能够避免出现预期接收但没有发送的情况。在主从类型的情况下,发送处理器应该始终跟踪有多少工作要发送。通常情况下,这种主从策略将与主保持跟踪并在达到总数后杀死从...
就功能而言,与发送端的探测器最接近的等价物可能是使用非阻塞发送MPI_isend,它返回一个可以传递给MPI_test之类的status,它是非阻塞的,将在成功接收到消息时返回MPI_SUCCESS。如果您想在收到消息之前阻止发送代码,也可以使用状态为MPI_Wait的。对每个发送到每个进程的进程使用带有唯一标记的test/wait将是一种执行您想要的操作的方法。
https://stackoverflow.com/questions/30822407
复制相似问题