首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MPI反向探针

MPI反向探针
EN

Stack Overflow用户
提问于 2015-06-14 03:00:02
回答 1查看 201关注 0票数 1

有没有办法检查一些进程是否在等待MPI_Recv?

我有一个根进程和一些从进程。

从伪码:

代码语言:javascript
复制
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,它读取一个巨大的文件并将读取的数据发送给工作进程(进程的其余部分)。每个工作者都会收到一部分数据,因此其分布是均匀的(每个工作者存储的数据量大致相同)。然后,这些工作者开始相互通信,发送部分计算。当工人接受部分计算时,它可能会产生许多新的部分结果,其中一些需要发送到其他工作。当所有工人都无事可做,并且没有更多的部分结果等待接收时,工作就完成了。

EN

回答 1

Stack Overflow用户

发布于 2015-06-14 03:26:37

您应该能够避免出现预期接收但没有发送的情况。在主从类型的情况下,发送处理器应该始终跟踪有多少工作要发送。通常情况下,这种主从策略将与主保持跟踪并在达到总数后杀死从...

就功能而言,与发送端的探测器最接近的等价物可能是使用非阻塞发送MPI_isend,它返回一个可以传递给MPI_test之类的status,它是非阻塞的,将在成功接收到消息时返回MPI_SUCCESS。如果您想在收到消息之前阻止发送代码,也可以使用状态为MPI_Wait的。对每个发送到每个进程的进程使用带有唯一标记的test/wait将是一种执行您想要的操作的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30822407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档