恢复Linux进程状态后重新连接到MPI

恢复Linux进程状态后重新连接到MPI,mpi,mpich,checkpointing,Mpi,Mpich,Checkpointing,故事时间考虑下面的场景: 使用Hydra,MPICH生成2个不同的进程(模拟器)。叫他们苹果和橘子 Apple和Orange开始时,他们加载一个动态链接的库,并使用该库调用MPI_Init并进行所有MPI通信。(那是我做的) 稍后,我们启动一个检查点 苹果将所需的一切保存到一个文件中,并在重启时加载 不过,Orange会保存整个Linux进程状态,并在重新启动时将其加载回 现在稍后,我们要从检查点加载模拟,以使用不同的参数运行它 我们再次调用Hydra,使用新参数启动Apple和Orange 苹

故事时间考虑下面的场景:

  • 使用Hydra,MPICH生成2个不同的进程(模拟器)。叫他们苹果和橘子
  • Apple和Orange开始时,他们加载一个动态链接的库,并使用该库调用MPI_Init并进行所有MPI通信。(那是我做的)
  • 稍后,我们启动一个检查点
  • 苹果将所需的一切保存到一个文件中,并在重启时加载
  • 不过,Orange会保存整个Linux进程状态,并在重新启动时将其加载回
  • 现在稍后,我们要从检查点加载模拟,以使用不同的参数运行它
  • 我们再次调用Hydra,使用新参数启动Apple和Orange
  • 苹果出现了,加载了它的东西,加载了我的库,并调用了MPI_Init(Allgood)
  • Pear把整个旧州都装回去了!不错,只是MPI状态变量也作为进程状态的一部分加载,所以橙色的MPI认为它已经初始化,但它不知道这个新网络,它的变量是第一次模拟时的旧MPI网络的
  • 现在我的问题是:

    我如何告诉Orange再次调用MPI_Init(或者其他任何方式,因为我知道不允许重复调用MPI_Init),以便它了解新网络

    事实

  • 我可以随心所欲地编辑我的库。它们是C++库。
  • 我无法编辑Apple和Orange模拟器如何保存检查点或重新启动。它们是专有的模拟器,没有可用的源代码
  • 模拟运行数天,因此必须首先运行公共部分,然后保存检查点作为其他模拟的起点
  • 我的研究:

  • 我知道调用MPI_Init的重复调用不是一个选项
  • 我已经研究了MPICH的源代码,它会检查它是否已初始化,但我宁愿不修改MPICH,而是拥有自己的新版本
  • 我已经查看了邮件列表、堆栈溢出和Google,但在恢复进程状态时如何连接到新的MPI网络方面没有任何进展
  • 潜在答案

    当然,我可以让我的库启动一个新流程,并在那里执行所有操作,但是在从模拟器到这个新流程的通信中会有很大的性能开销。此外,正确地做这件事是另一个棘手的问题,如果可以的话,我宁愿不打开它

    那么…关于如何告诉这个还原的橙色进程状态这是一个新的MPI网络,您现在需要与这个MPI网络对话,有什么想法吗


    提前感谢:)

    只是好奇有没有人有想法?