我有一个用 C 语言编写的模拟代码,与 MPI 并行,在一个 linux 集群上运行,它在 12 小时的挂墙时间后终止作业。然后必须从程序写入的文件重新启动持续时间超过 12 小时的作业。
我的代码目前在模拟的每 N 步中编写这些“重启文件”。在写入重启文件之前,每个节点都处于相同的模拟步骤是很重要的。
就我而言,这些文件很大(> 1GB/进程),因此我无法按我需要的频率编写(占用大量时间和空间)。
此外,一个模拟步骤的执行时间取决于模拟中发生的情况,因此很难预测我的模拟将在 12 小时内完成的许多步骤。所以我不能决定在我认为将在运行时间 12 小时之前完成的步骤数之后写入重启文件。
结果,当我的工作被终止时,最后一个重新启动文件可能是在几个小时前写入的,这迫使我重做最后 12 小时执行的大部分内容。
因此,我正在寻找一种方法来编写重新启动文件作为运行时间的函数。我曾考虑过使用 MPI_Wtime(),但是对于给定的运行时间,比如 11:50:00,所有处理器不一定处于相同的阶段步骤……这不好。这个问题有简单的解决方案吗?