MPI と並行して C で記述されたシミュレーション コードがあり、12 時間経過後にジョブを強制終了する Linux クラスターで実行されます。12 時間以上続くジョブは、プログラムによって書き込まれたファイルから再開する必要があります。
私のコードは現在、シミュレーションの N ステップごとにこれらの「リスタート ファイル」を書き込みます。リスタート ファイルを書き込む前に、各ノードが同じシミュレーション ステップにあることが重要です。
私の場合、これらのファイルは大きい (> 1GB/プロセス) ため、必要な頻度で書き込むことができません (多くの時間とスペースが必要です)。
また、1 つのシミュレーション ステップの実行時間は、シミュレーション内で何が起こっているかによって異なります。その結果、シミュレーションが 12 時間以内に実行する多くのステップを予測することは非常に困難です。したがって、実行時間の 12 時間の直前に実行されると思われるステップ数の後に再起動ファイルを書き込むこともできません。
その結果、私のジョブが強制終了されると、最後の再起動ファイルが数時間前に書き込まれている可能性があり、その結果、最後の 12 時間の実行のかなりの部分をやり直す必要があります。
したがって、経過した実行時間の関数として再起動ファイルを書き込む方法を探しています。私は MPI_Wtime() を使用することを考えましたが、特定のランタイム、たとえば 11:50:00 では、すべてのプロセッサが必ずしも同じフェーズ ステップにあるとは限りません...これは良くありません。その問題に対する簡単な解決策はありますか?