如何使用MPI在给定的运行时间后写入文件?

时间:2012-11-08 20:20:28

标签: c mpi hpc

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

我的代码目前在我的模拟的每N个步骤中写下这些'重启文件'。在写入重新启动文件之前,每个节点处于相同的模拟步骤非常重要。

在我的情况下,这些文件很大(> 1GB /进程)因此我不能按照我的需要经常编写(占用大量时间和空间)。

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

结果,当我的工作被杀时,最后一次重启文件可能已经写好了几个小时,然后迫使我重做最后12小时执行的大部分时间。

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

1 个答案:

答案 0 :(得分:3)

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