如果MPI进程崩溃会发生什么?

时间:2015-02-06 11:20:36

标签: process fork mpi poco-libraries fault-tolerance

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

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

我可以用MPI做同样的事情吗?如果使用MPI创建的进程崩溃,父进程是否可以继续运行并最终创建新进程?

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


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

2 个答案:

答案 0 :(得分:2)

如果你想要集体,你将不得不等待MPI-3.something(如高性能马克和Hristo Illev建议的那样)

如果您能够与点对点生活在一起,并且您是一名愿意针对您的MPI实施提出大量错误报告的患者,您可以尝试以下方法:

  • 禁用默认MPI错误处理程序
  • 仔细检查MPI程序中的每一个返回代码
  • 在您的应用程序中跟踪哪些排名上升且哪些排名下降。哦,当他们下来时,他们永远无法回来。但是你无论如何也无法使用集体(参见我的开场白),所以这不是一件大事,对吗?

这是一篇旧报纸(当比尔还在阿贡工作时回来。我认为它是从2003年开始的): http://www.mcs.anl.gov/~lusk/papers/fault-tolerance.pdf。它列出了在MPI中可以做的容错事情。也许这样一个受限制的MPI"可能仍然可以满足您的需求。

答案 1 :(得分:2)

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

正如Rob Latham所说,在你的应用程序中你需要做很多工作来处理失败,尽管你不一定要检查所有的返回代码。您可以/应该使用MPI错误处理程序作为回调函数来简化操作。规范中的信息/示例以及Open MPI branch