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"
44class ArcaneCheckpointModule
45:
public ArcaneArcaneCheckpointObject
49 ArcaneCheckpointModule(
const ModuleBuilder& cb);
50 ~ArcaneCheckpointModule();
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;
200 info() <<
"Average time per output (second): " << total_time / nb_time
201 <<
" (for " << nb_time <<
" outputs";
207void ArcaneCheckpointModule::
211 if (export_dir.path().null())
214 Directory output_directory = Directory(export_dir,
"protection");
216 if (pm->isMasterIO())
217 output_directory.createDirectory();
220 m_checkpoint_dirname = output_directory.path();
236 if (!m_checkpoint_writer)
237 _getCheckpointService();
238 if (m_checkpoint_writer){
239 Integer nb_checkpoint = m_checkpoints_time.size();
240 m_checkpoints_time.resize(nb_checkpoint+1);
242 m_checkpoints_time[nb_checkpoint] = checkpoint_time;
243 m_checkpoint_writer->setCheckpointTimes(m_checkpoints_time);
244 m_checkpoint_writer->setBaseDirectoryName(m_checkpoint_dirname);
245 info() <<
"**** Protection active at time " << checkpoint_time
246 <<
" directory=" << m_checkpoint_dirname
247 <<
" numéro " << nb_checkpoint <<
" ******";
251 info() <<
"Protection write time (second): "
252 << m_checkpoint_timer->lastActivationTime();
262void ArcaneCheckpointModule::
263_getCheckpointService()
268 options()->checkpointService.getAvailableNames(valid_values);
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;
286 bool do_output = _checkHasOutput();
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.
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.
virtual void writeDefaultCheckpoint(ICheckpointWriter *writer)=0
Écrit une protection avec l'écrivain writer.
Interface du service d'écriture d'une protection/reprise.
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.
virtual void dumpHistory(bool is_verbose)=0
Sauve l'historique.
Gère les sorties basées sur un temps physique, temps CPU ou un nombre d'itération.
Chaîne de caractères unicode.
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.
TraceMessage pfatal() const
Flot pour un message d'erreur fatale en parallèle.
TraceMessage info() const
Flot pour un message d'information.
Informations sur une version.
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.
double Real
Type représentant un réel.
UniqueArray< String > StringUniqueArray
Tableau dynamique à une dimension de chaînes de caractères.