gpt4 book ai didi

c - MPI 反向探针

转载 作者:太空宇宙 更新时间:2023-11-04 04:35:37 24 4
gpt4 key购买 nike

有没有办法检查某些进程是否正在等待 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 上,那么工作就完成了,我需要中断循环。现在我需要一些方法来通知从属进程工作已经完成。有什么办法吗?我想可能会有类似反向探测的东西来检查是否有人在等待消息,而不是检查是否有消息要接收。还没有发现任何有用的东西。

编辑:更多解释。

我有一个根进程,它读取一个巨大的文件并将读取的数据发送给工作人员(其余进程)。每个工作人员都会收到一部分数据,因此数据分布良好(每个工作人员存储的数据量大致相同)。然后这些工作人员开始相互通信,发送部分计算。当一个 worker 收到部分计算时,它可能会产生很多新的部分结果,其中一些需要发送给其他 worker。当所有工作人员都无事可做并且没有更多的部分结果等待接收时,工作就完成了。

最佳答案

您应该能够避免预期收到但未发送任何内容的情况。在主从类型的情况下,发送处理器应该始终跟踪有多少工作要发送。通常,这种主从策略将与主服务器一起工作,一旦达到总数,主服务器就会跟踪并杀死从服务器...

在功能方面,最接近于发送端探测的等价物可能是使用非阻塞发送MPI_isend,它返回一个status,可以是传递给类似 MPI_test 的东西,它是非阻塞的,如果消息已成功接收,将返回 MPI_SUCCESS。如果您想在收到消息之前阻止发送代码,您还可以使用带有状态的 MPI_Wait。对每个发送到每个进程的每个发送使用带有唯一标记的测试/等待将是执行您想要的操作的一种方式。

关于c - MPI 反向探针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30822407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com