Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当远程计算机死机时,MPI manager无法通过MPI_Irecv调用检测到它_Mpi_Fault Tolerance - Fatal编程技术网

当远程计算机死机时,MPI manager无法通过MPI_Irecv调用检测到它

当远程计算机死机时,MPI manager无法通过MPI_Irecv调用检测到它,mpi,fault-tolerance,Mpi,Fault Tolerance,我正在写一个程序来检测远程机器的突然崩溃。manager进程在机器1上运行,worker进程在机器2上运行。manager服务器通过调用MPI\u Isend向工作进程发送消息。远程工作程序通过调用MPI\U Irecv获取消息。每次调用后,我都会检查它们的返回代码,看看MPI\u COMM\u WORLD是否有问题。我还检查了在send和recv调用之后运行的MPI_Test的返回代码 不知何故,即使在我突然重新启动机器2之后,返回代码始终为0。我可以看到MPI\u Isend始终返回值0。请

我正在写一个程序来检测远程机器的突然崩溃。manager进程在机器1上运行,worker进程在机器2上运行。manager服务器通过调用
MPI\u Isend
向工作进程发送消息。远程工作程序通过调用MPI\U Irecv获取消息。每次调用后,我都会检查它们的返回代码,看看MPI\u COMM\u WORLD是否有问题。我还检查了在send和recv调用之后运行的
MPI_Test
的返回代码

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

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

MPI_Errhandler_set(MPI_COMM_WORLD,MPI_ERRORS_RETURN);

也许早就应该把它变成一个答案,让其他人更容易找到它


正如在其他帖子中所讨论的那样,
MPI_Send
和friend的完成并不一定表示在另一端收到了消息。只有
MPI\u Ssend
意味着任何类型的完成,甚至仅表示接收方已开始将消息接收到其缓冲区中

对于这个特定的问题,
MPI_Ssend
可能就足够了,因为它会指示发生了故障,尽管这会减慢速度


最后,如果不在MPI中做额外的工作,就不能依赖发送方语义来告诉您发生了故障。标准中没有这样做的保证,因为这样做会很昂贵。如果您必须快速了解发送方,请使用
MPI\u Ssend
。否则,请执行一系列操作,然后稍后执行同步操作(如
MPI\u send
MPI\u屏障
,如果您希望同时验证所有进程)。

您使用的是哪个MPI库?目前,容错是一种非标准功能,因此它在很大程度上取决于您使用的是MPICH还是开放MPI。我们使用的是MPICH 2还是3。我们正在尝试实现一些基本的容错功能,直到Argonne在未来推出容错功能。谢谢在这些版本中有一些容错性,您添加标志
--禁用自动清理
,它将向您返回错误。另一方面,如果你根本看不到失败,这很奇怪,我也不知道发生了什么。仅供参考,阿贡正在为未来的版本开发更好的FT。希望能在几个月内完成。不能保证短发送会返回错误。消息可能是急切地发送的,而不需要往返消息。这意味着,如果您需要知道是否发生了故障,则需要采取一些措施,通过类似于
MPI\u屏障的方式强制通信。