2

我有一个用 C 语言编写的模拟代码,与 MPI 并行,在一个 linux 集群上运行,它在 12 小时的挂墙时间后终止作业。然后必须从程序写入的文件重新启动持续时间超过 12 小时的作业。

我的代码目前在模拟的每 N 步中编写这些“重启文件”。在写入重启文件之前,每个节点都处于相同的模拟步骤是很重要的。

就我而言,这些文件很大(> 1GB/进程),因此我无法按我需要的频率编写(占用大量时间和空间)。

此外,一个模拟步骤的执行时间取决于模拟中发生的情况,因此很难预测我的模拟将在 12 小时内完成的许多步骤。所以我不能决定在我认为将在运行时间 12 小时之前完成的步骤数之后写入重启文件。

结果,当我的工作被终止时,最后一个重新启动文件可能是在几个小时前写入的,这迫使我重做最后 12 小时执行的大部分内容。

因此,我正在寻找一种方法来编写重新启动文件作为运行时间的函数。我曾考虑过使用 MPI_Wtime(),但是对于给定的运行时间,比如 11:50:00,所有处理器不一定处于相同的阶段步骤……这不好。这个问题有简单的解决方案吗?

4

1 回答 1

3

一旦您的流程达到 11:50:00 标记(或其他一些合适的截止日期),让它们 AllReduce 使用MPI_MAX. 然后他们可以准确地赶上迭代次数,并等待其他人用一个简单的屏障做同样的事情。然后他们可以开始编写重启文件。

于 2012-11-08T23:51:35.513 回答