如果 MPI 进程崩溃会怎样?

What happens if an MPI process crashes?

我正在为容错应用程序评估不同的多处理库。我基本上需要在不停止整个应用程序的情况下允许任何进程崩溃。

我可以使用 fork() 系统调用来完成。这里的限制是进程只能在同一台机器上创建。

我可以用 MPI 做同样的事情吗?如果一个用MPI创建的进程崩溃了,父进程能否保留运行并最终创建一个新进程?

是否有任何替代(可能是多平台和开源)库来获得相同的结果?


据报道here,MPI 4.0 将支持容错。

如果你想要集体,你将不得不等待 MPI-3.something(正如 High Performance Mark 和 Hristo Illev 所建议的那样)

如果您可以接受点对点,并且您是一个耐心的人,愿意针对您的 MPI 实现提出一堆错误报告,您可以尝试以下操作:

  • 禁用默认的 MPI 错误处理程序
  • 仔细检查 MPI 程序中的每个 return 代码
  • 在您的应用程序中跟踪排名上升和下降的排名。哦,当他们倒下时,他们再也回不来了。但是无论如何您都无法使用集体(请参阅我的开场白),所以这没什么大不了的,对吧?

这是一篇旧论文(比尔还在阿贡工作的时候。我想是 2003 年的): http://www.mcs.anl.gov/~lusk/papers/fault-tolerance.pdf。它列出了可以在 MPI 中执行的各种容错操作。也许这样的 "constrained MPI" 可能仍能满足您的需要。

如果您愿意追求研究质量,那么未来版本的 MPI(MPI-4?)的潜在容错章节有两个实现。该提案称为用户级故障缓解。 MPICH 3.2a2 and a branch of Open MPI 中有一个实验版本也提供了接口。两者都远未达到生产质量,但欢迎您试用。只知道因为这不在 MPI 标准中,所以函数前缀不是 MPI_*。对于 MPICH,它们是 MPIX_*,对于 Open MPI 分支,它们是 OMPI_*(尽管我相信他们也会很快将其更改为 MPIX_*

正如 Rob Latham 所提到的,您需要在应用程序中做很多工作来处理故障,尽管您不一定要检查所有 return 代码。您 can/should 使用 MPI 错误处理程序作为回调函数来简化事情。规范中有 information/examples 以及 Open MPI branch.