mpi - 当远程机器死机时,MPI 管理器无法通过 MPI_Irecv 调用检测到它

标签 mpi fault-tolerance

我正在编写一个程序来检测远程机器的突然崩溃。 manager 进程在机器 1 上运行,worker 进程在机器 2 上运行。 manager 服务器通过调用 MPI_Isend 向工作进程发送消息。 .远程 worker 通过调用 MPI_Irecv 获取消息.每次通话后,我总是检查他们的返回码,看看 MPI_COMM_WORLD 是否有问题。 .我还检查了 MPI_Test 的返回码在 send 和 recv 调用之后运行。

不知何故,即使在我突然重新启动机器 2 之后,返回码也始终为 0。我可以看到 MPI_Isend总是返回值 0。请给我一些关于如何检测远程机器故障的建议。

顺便说一句,我确实使用了以下语句:

MPI_Errhandler_set(MPI_COMM_WORLD,MPI_ERRORS_RETURN);

最佳答案

可能早就应该把它变成一个答案,以便其他人更容易追踪到这一点。

正如其他帖子中所讨论的,MPI_Send而 friend 的完成并不一定表示对方已经收到消息。只有 MPI_Ssend意味着任何类型的完成,甚至仅表示接收方已开始将消息接收到其缓冲区中。

对于这个特殊问题,MPI_Ssend可能就足够了,因为它表明发生了故障,尽管它会减慢速度。

最后,您不能依靠发送方的语义来告诉您发生了故障,而无需在 MPI 中做额外的工作。标准中没有内置的保证来这样做,因为它们会很昂贵。如果您必须快速了解发送方,请使用 MPI_Ssend .否则,先做一堆操作,然后再做一些同步(比如 MPI_SsendMPI_Barrier,如果你想一次验证所有进程)。

关于mpi - 当远程机器死机时,MPI 管理器无法通过 MPI_Irecv 调用检测到它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23421735/

相关文章:

architecture - 容错软件架构

c - 使用 MPI(C 语言)代码的矩阵乘法无法在超过 6 个节点上运行

c++ - 运行 mpi 时不能使用文件 i\o

python - tensorflow 监控 session 使用情况

database - 如果我想要分布式多主数据库,我有哪些选择?

mysql - 用于测试的长查询

mysql - 使用 Go 和 MySQL 设置具有容错能力的服务器(故障转移)

mpi - 如何识别 MPI 进程是否属于给定的 Communicator

c - C中的MPI。我没有收到我发送的内容

algorithm - MPI FOX算法