14#include "arcane/utils/ArcanePrecomp.h"
16#include "arcane/utils/ScopedPtr.h"
17#include "arcane/utils/StringBuilder.h"
19#include "arcane/ISubDomain.h"
20#include "arcane/EntryPoint.h"
21#include "arcane/Timer.h"
22#include "arcane/ITimeHistoryMng.h"
23#include "arcane/ModuleFactory.h"
24#include "arcane/ServiceUtils.h"
25#include "arcane/ICheckpointWriter.h"
26#include "arcane/ICheckpointMng.h"
27#include "arcane/Directory.h"
28#include "arcane/IParallelMng.h"
30#include "arcane/OutputChecker.h"
31#include "arcane/std/ArcaneCheckpoint_axl.h"
59 virtual void checkpointStartInit();
60 virtual void checkpointInit();
67 Timer* m_checkpoint_timer;
69 String m_checkpoint_dirname;
75 void _getCheckpointService();
76 void _setDirectoryName();
77 bool _checkHasOutput();
83ARCANE_REGISTER_MODULE_ARCANECHECKPOINT(ArcaneCheckpointModule);
88ArcaneCheckpointModule::
89ArcaneCheckpointModule(
const ModuleBuildInfo& mb)
91, m_output_checker(mb.subDomain(),
"CheckpointRestart")
92, m_checkpoint_timer(0)
93, m_checkpoint_writer(0)
94, m_checkpoint_dirname(
".")
96 m_checkpoint_timer =
new Timer(mb.subDomain(),
"Checkpoint",
Timer::TimerReal);
98 m_output_checker.assignGlobalTime(&m_next_global_time,&
options()->frequency);
99 m_output_checker.assignCPUTime(&m_next_cpu_time,&
options()->frequencyCpu);
105ArcaneCheckpointModule::
106~ArcaneCheckpointModule()
108 delete m_checkpoint_timer;
114void ArcaneCheckpointModule::
120 m_next_cpu_time =
options()->frequencyCpu();
121 info() <<
" -------------------------------------------";
122 info() <<
"| PROTECTION-REPRISE |";
123 info() <<
" -------------------------------------------";
128 m_output_checker.initialize();
133 info() <<
"Protection required at the end of computations";
134 _getCheckpointService();
141bool ArcaneCheckpointModule::
149 bool do_output = m_output_checker.
check(old_time,current_time,iteration,cpu_used);
156void ArcaneCheckpointModule::
159 m_next_global_time = 0.;
184 if (m_checkpoint_writer)
185 m_checkpoint_writer->
close();
186 m_checkpoint_writer = 0;
192void ArcaneCheckpointModule::
197 info() <<
"Total time spent in protection output (second): " <<
total_time;
201 <<
" (for " <<
nb_time <<
" outputs";
207void ArcaneCheckpointModule::
211 if (export_dir.path().null())
214 Directory output_directory = Directory(export_dir,
"protection");
217 output_directory.createDirectory();
220 m_checkpoint_dirname = output_directory.path();
236 if (!m_checkpoint_writer)
237 _getCheckpointService();
238 if (m_checkpoint_writer){
246 <<
" directory=" << m_checkpoint_dirname
251 info() <<
"Protection write time (second): "
262void ArcaneCheckpointModule::
263_getCheckpointService()
269 pfatal() <<
"Protections required but protection/restore service selected ("
270 <<
options()->checkpointService.serviceName() <<
") not available "
271 <<
"(valid values: " << String::join(
", ",
valid_values) <<
")";
273 m_checkpoint_writer = checkpoint;
290 info() <<
"Protection required.";
Generation de la classe de base du Module.
CaseOptionsArcaneCheckpoint * options() const
Options du jeu de données du module.
Arcane::VariableScalarInteger m_next_iteration
Variables du module.
ISubDomain * subDomain() const override
Sous-domaine associé au module.
IParallelMng * parallelMng() const override
Gestionnaire du parallélisme par échange de message.
Module gérant les protections (mécanisme de protections/reprises).
virtual void checkpointCheckAndWriteData()
Vérifie s'il faut faire une protection à cet instant et l'effectue si nécessaire.
virtual VersionInfo versionInfo() const
Version du module.
void _doCheckpoint(bool save_history)
Effectue une protection.
virtual void checkpointExit()
Opérations de fin de calcul.
VariableScalarInt32 m_global_iteration
Itération courante.
VariableScalarReal m_global_cpu_time
Temps CPU utilisé (en seconde)
VariableScalarReal m_global_time
Temps actuel.
VariableScalarReal m_global_old_time
Temps précédent le temps actuel.
Interface du service d'écriture d'une protection/reprise.
virtual void setBaseDirectoryName(const String &dirname)=0
Positionne le nom du répertoire de base de la protection.
virtual void close()=0
Ferme les protections.
virtual void setCheckpointTimes(RealConstArrayView times)=0
Positionne les temps des protections.
virtual bool isMasterIO() const =0
true si l'instance est un gestionnaire maître des entrées/sorties.
virtual void barrier()=0
Effectue une barière.
virtual const IDirectory & storageDirectory() const =0
Répertoire de base des exportations nécessitant un archivage.
virtual ICheckpointMng * checkpointMng() const =0
Gestionnaire de protections.
virtual ITimeHistoryMng * timeHistoryMng()=0
Retourne le gestionnaire d'historique.
virtual const IDirectory & exportDirectory() const =0
Répertoire de base des exportations.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Informations pour construire un module.
Gère les sorties basées sur un temps physique, temps CPU ou un nombre d'itération.
bool check(Real old_time, Real current_time, Integer current_iteration, Integer current_cpu_time, const String &from_function=String())
Vérifie s'il faut effectuer une sortie.
Positionne la phase de l'action en cours d'exécution.
Sentinelle pour le timer. La sentinelle associée à un timer permet de déclancher celui-ci au moment d...
Integer nbActivated() const
Retourne le nombre de fois que le timer a été activé
@ TimerReal
Timer utilisant le temps réel.
Real totalTime() const
Retourne le temps total (en secondes) passé dans le timer.
Real lastActivationTime() const
Retourne le temps (en secondes) passé lors de la dernière activation du timer.
virtual void resize(Integer new_size)
Redimensionne le tableau pour contenir new_size éléments.
Informations sur une version.
constexpr Integer size() const noexcept
Retourne la taille du tableau.
Chaîne de caractères unicode.
TraceMessage pfatal() const
Flot pour un message d'erreur fatale en parallèle.
TraceMessage info() const
Flot pour un message d'information.
Vecteur 1D de données avec sémantique par valeur (style STL).
Integer toInteger(Real r)
Converti un Real en Integer.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.