2015-02-06 49 views
1

我正在评估容错应用程序的不同多处理库。我基本上需要任何进程被允许在不停止整个应用程序的情况下崩溃。如果MPI进程崩溃会发生什么?

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

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

有没有其他的选择(可能是多平台和开源)库来获得相同的结果?


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

+1

使用您最喜爱的*容错MPI *搜索引擎,了解当前该领域的研究状况。就目前而言,据我所知,可以保留的高级MPI实现在进程崩溃时运行。 – 2015-02-06 16:54:15

+2

大多数MPI实现都会注意到一个进程已经死亡并将终止整个MPI工作。容错并没有让它进入MPI-3,所以许多实施者选择推迟将FT构建到他们的库中(反之亦然)。 – 2015-02-06 17:40:08

回答

2

如果你想集体,你将不得不等待MPI-3.something(如高性能马克和斯托伊奇Illev建议)

如果你可以用点至点的生活,你是一个有耐心的人愿意养了一堆错误报告对你的MPI实现,你可以尝试以下方法:

  • 禁用默认的MPI错误处理程序
  • 小心地从你的MPI程序
  • 检查每一个返回代码
  • 保持跟踪在您的应用程序中,哪些级别已升级,哪些级别降低。哦,当他们下去时,他们永远不会回来。但无论如何你都无法使用集体(见我的开场白),所以这不是一个大问题,对吧?

这是一张旧纸(回来的时候比尔还在阿贡工作,我想是从2003年开始): http://www.mcs.anl.gov/~lusk/papers/fault-tolerance.pdf。它列出了MPI中可以执行的各种容错功能。也许这种“受限制的MPI”仍然可以满足您的需求。

2

如果您愿意寻求研究质量,那么MPI未来版本(MPI-4?)的潜在容错章节有两个实现。该提案称为用户级别故障缓解。 MPICH 3.2a2有一个实验版本,Open MPI的分支也提供接口。两者都远离生产质量,但欢迎您尝试一下。只要知道,因为这不在MPI标准中,函数前缀不是MPI_*。对于MPICH,他们MPIX_*,为开放MPI分支,他们OMPI_*(虽然我相信他们会改变他们的是MPIX_*一声不好。

正如罗布莱瑟姆提到,将有大量的工作你需要在应用程序中处理失败,尽管你不一定要检查所有的返回代码,你可以/应该使用MPI错误处理程序作为回调函数来简化事情。规格可与Open MPI branch一起使用

相关问题