14#include "arcane/utils/ArcanePrecomp.h"
16#include "arcane/utils/Iterator.h"
17#include "arcane/utils/PlatformUtils.h"
18#include "arcane/utils/Array.h"
19#include "arcane/utils/Enumerator.h"
20#include "arcane/utils/Collection.h"
21#include "arcane/utils/IOnlineDebuggerService.h"
23#include "arcane/core/ModuleMaster.h"
24#include "arcane/core/EntryPoint.h"
25#include "arcane/core/CaseOptionsMain.h"
26#include "arcane/core/ITimeHistoryMng.h"
27#include "arcane/core/IVariableMng.h"
28#include "arcane/core/ISubDomain.h"
29#include "arcane/core/IApplication.h"
30#include "arcane/core/IModuleMng.h"
31#include "arcane/core/ITimeLoopMng.h"
32#include "arcane/core/IParallelMng.h"
33#include "arcane/core/ICaseMng.h"
34#include "arcane/core/IModuleMng.h"
35#include "arcane/core/ModuleBuildInfo.h"
36#include "arcane/core/ITimeLoopService.h"
82 &ModuleMaster::_masterLoopExit,
86 &ModuleMaster::_masterMeshChanged,
90 &ModuleMaster::_masterRestore,
146 info() <<
"Initialization to restore the functions of the input data: "
149 <<
" iteration=" << opt_iteration;
152 _masterContinueInit();
192 info() <<
"Information on consumption (unit:second): Con(R=...,I=...,C=...)";
193 info() <<
" R -> consumption in real time (clock) since the beginning of the computation";
194 info() <<
" I -> real time (clock) spent during the last iteration";
195 info() <<
" C -> consumption in CPU time since the beginning of the computation";
196 info() <<
"Information on memory consumption (unit: Mo): Mem=(X,m=X1:R1,M=X2:R2,avg=Z)";
197 info() <<
" X -> memory consumption of the process";
198 info() <<
" X1 -> memory consumption of the least memory hungry process and R1 is its rank";
199 info() <<
" X2 -> memory consumption of the most memory hungry process and R2 is its rank";
200 info() <<
" Z -> average memory consumption of all process";
216 m_thm_mem_used = mem_used;
234 values[0] = cpu_time;
235 values[1] = elapsed_time;
236 values[2] = (hyoda)?hyoda->loopbreak(
subDomain()):0.0;
238 cpu_time = values[0];
239 elapsed_time = values[1];
240 if (hyoda && values[2]>0.0)
254 m_thm_diff_cpu = diff_cpu;
256 m_thm_diff_elapsed = diff_elapsed;
267 Int32 mem_min_rank = 0;
268 Int32 mem_max_rank = 0;
269 pm->
computeMinMaxSum(mem_used,mem_min,mem_max,mem_sum,mem_min_rank,mem_max_rank);
272 Int64 i_diff_elapsed = (
Int64)(diff_elapsed * 1000.0);
275 <<
" Conso=(R=" << (((
Real)i_elapsed) / 1000.0)
276 <<
",I=" << (((
Real)i_diff_elapsed) / 1000.0)
277 <<
",C=" << ((
Real)i_cpu / 1000.0)
278 <<
") Mem=(" << (
Int64)(mem_used/1e6)
279 <<
",m=" << (
Int64)(mem_min/1e6)
280 <<
":" << mem_min_rank
281 <<
",M=" << (
Int64)(mem_max/1e6)
282 <<
":" << mem_max_rank
288 m_has_thm_dump_at_iteration =
false;
311 if (
subDomain()->timeLoopMng()->finalTimeReached()){
312 info() <<
"===============================================================";
313 info() <<
"====== END OF COMPUTATION REACHED... =======================";
314 info() <<
"===============================================================";
324 if (m_has_thm_dump_at_iteration)
345 thm->
addValue(
"TotalMemory",mem_used);
347 thm->
addValue(
"GlobalCpuTime",global_cpu_time);
348 thm->
addValue(
"ElapsedTime",diff_elapsed);
349 thm->
addValue(
"GlobalElapsedTime",global_elapsed_time);
351 m_has_thm_dump_at_iteration =
true;
353 Int64 i_elapsed = (
Int64)(global_elapsed_time * 1000.0);
354 Int64 i_diff_elapsed = (
Int64)(diff_elapsed * 1000.0);
355 Int64 i_cpu = (
Int64)(global_cpu_time * 1000.0);
358 <<
" Conso=(R=" << (((
Real)i_elapsed) / 1000.0)
359 <<
",I=" << (((
Real)i_diff_elapsed) / 1000.0)
360 <<
",C=" << ((
Real)i_cpu / 1000.0)
361 <<
") Mem=(" << (
Int64)(mem_used/1e6)
385 service->onTimeLoopBeginLoop();
397 service->onTimeLoopEndLoop();
409 service->onTimeLoopStartInit();
421 service->onTimeLoopContinueInit();
433 service->onTimeLoopExit();
445 service->onTimeLoopMeshChanged();
457 service->onTimeLoopRestore();
ISubDomain * subDomain() const override
Sous-domaine associé au module.
AbstractModule(const ModuleBuildInfo &)
Constructeur à partir d'un ModuleBuildInfo.
IParallelMng * parallelMng() const override
Gestionnaire du parallélisme par échange de message.
Vue modifiable d'un tableau d'un type T.
VariableScalarInt32 m_global_iteration
Itération courante.
VariableScalarReal m_global_elapsed_time
Temps horloge utilisé (en seconde)
VariableScalarReal m_global_cpu_time
Temps CPU utilisé (en seconde)
VariableScalarReal m_global_old_deltat
Delta T au temps précédent le temps global.
VariableScalarReal m_global_old_elapsed_time
Temps précédent horloge utilisé (en seconde)
VariableScalarReal m_global_time
Temps actuel.
CommonVariables(IModule *c)
Construit les références des variables communes pour le module c.
VariableScalarReal m_global_old_cpu_time
Temps précédent CPU utilisé (en seconde)
VariableScalarReal m_global_old_time
Temps précédent le temps actuel.
VariableScalarReal m_global_deltat
Delta T global.
Informations sur le type flottant.
Interface du gestionnaire de cas.
virtual void updateOptions(Real current_time, Real current_deltat, Integer current_iteration)=0
Met à jour les options basée sur une table de marche en temps.
static const char *const WComputeLoop
appelé pendant la boucle de calcul
static const char *const WStartInit
appelé pendant l'initialisation d'un nouveau cas
static const char *const WRestore
appelé pour restaurer les variables lors d'un retour arrière
@ PAutoLoadEnd
Chargé automatiquement à la fin. Cela signifie qu'un module possédant un point d'entrée avec cette pr...
@ PAutoLoadBegin
Chargé automatiquement au début. Cela signifie qu'un module possédant un point d'entrée avec cette pr...
static const char *const WOnMeshChanged
appelé après un changement de maillage
static const char *const WContinueInit
appelé pendant l'initialisation d'une reprise
static const char *const WInit
appelé pendant l'initialisation
Interface du gestionnaire de parallélisme pour un sous-domaine.
virtual void computeMinMaxSum(char val, char &min_val, char &max_val, char &sum_val, Int32 &min_rank, Int32 &max_rank)=0
Calcule en une opération la somme, le min, le max d'une valeur.
virtual Int32 commSize() const =0
Nombre d'instance dans le communicateur.
virtual char reduce(eReduceType rt, char v)=0
Effectue la réduction de type rt sur le réel v et retourne la valeur.
Interface du gestionnaire d'un sous-domaine.
virtual ITimeHistoryMng * timeHistoryMng()=0
Retourne le gestionnaire d'historique.
virtual ICaseMng * caseMng()=0
Retourne le gestionnaire du jeu de données.
virtual IParallelMng * allReplicaParallelMng() const =0
Retourne le gestionnaire de parallélisme pour tous les réplicats.
Classe gérant un historique de valeurs.
virtual void addValue(const String &name, Real value, bool end_time=true, bool is_local=false)=0
Ajoute la valeur value à l'historique name.
Interface d'un service opérant lors de la boucle en temps.
Informations pour construire un module.
ISubDomain * subDomain() const
Accès au sous-domaine associé
void masterInit()
Point d'entrée auto-chargé en début d'initialisation.
void masterStartInit()
Point d'entrée auto-chargé en début d'initialisation d'un nouveau cas.
CaseOptionsMain * m_case_options_main
Instance des options du module.
bool m_is_first_loop
Indique si on est dans la première itération de l'exécution.
Real m_old_cpu_time
Valeur du temps CPU à la dernière itération.
void dumpStandardCurves() override
Sort les courbes classiques (CPUTime, ElapsedTime, ...)
Real m_old_elapsed_time
Valeur du temps horloge à la dernière itération.
virtual void timeStepInformation()
Affichage surchargeable des informations du pas de temps.
void timeLoopEnd()
Point d'entrée auto-chargé en fin d'itération de la boucle de calcul.
void timeLoopBegin()
Point d'entrée auto-chargé en début d'itération de la boucle de calcul.
void addTimeLoopService(ITimeLoopService *tls) override
Ajoute le service de boucle en temps.
UniqueArray< ITimeLoopService * > m_timeloop_services
Liste des services de boucle en temps.
virtual void timeIncrementation()
Incrémentation du pas de temps surchargeable.
Integer m_nb_loop
Nombre de boucles de calcul effectuées.
~ModuleMaster() override
Destructeur.
void masterContinueInit()
Point d'entrée auto-chargé en début de reprise d'un nouveau cas.
TraceMessage info() const
Flot pour un message d'information.
Formattage des réels avec une précision donnée.
Formattage du flot en longueur.
@ ReduceMax
Maximum des valeurs.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::int64_t Int64
Type entier signé sur 64 bits.
Int32 Integer
Type représentant un entier.
double Real
Type représentant un réel.
void addEntryPoint(ModuleType *module, const char *name, void(ModuleType::*func)(), const String &where=IEntryPoint::WComputeLoop, int property=IEntryPoint::PNone)
Routine template permettant de référencer un point d'entrée dans un module.
std::int32_t Int32
Type entier signé sur 32 bits.