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/ModuleMaster.h"
24#include "arcane/EntryPoint.h"
25#include "arcane/CaseOptionsMain.h"
26#include "arcane/ITimeHistoryMng.h"
27#include "arcane/IVariableMng.h"
28#include "arcane/ISubDomain.h"
29#include "arcane/IApplication.h"
30#include "arcane/IModuleMng.h"
31#include "arcane/ITimeLoopMng.h"
32#include "arcane/IParallelMng.h"
33#include "arcane/ICaseMng.h"
34#include "arcane/IModuleMng.h"
35#include "arcane/ModuleBuildInfo.h"
36#include "arcane/ITimeLoopService.h"
46extern "C++" ARCANE_CORE_EXPORT IModuleMaster*
47arcaneCreateModuleMaster(ISubDomain* sd)
49 ModuleBuildInfo mbi(sd,sd->defaultMeshHandle(),
"ArcaneMasterInternal");
50 ModuleMaster* m =
new ModuleMaster(mbi);
68, m_thm_global_cpu_time(0.0)
69, m_thm_diff_elapsed(0.0)
70, m_thm_global_elapsed_time(0.0)
71, m_thm_global_time(0.0)
72, m_has_thm_dump_at_iteration(false)
93 &ModuleMaster::_masterLoopExit,
97 &ModuleMaster::_masterMeshChanged,
101 &ModuleMaster::_masterRestore,
157 info() <<
"Initialization to restore the functions of the input data: "
160 <<
" iteration=" << opt_iteration;
163 _masterContinueInit();
203 info() <<
"Information on consumption (unit:second): Con(R=...,I=...,C=...)";
204 info() <<
" R -> consumption in real time (clock) since the beginning of the computation";
205 info() <<
" I -> real time (clock) spent during the last iteration";
206 info() <<
" C -> consumption in CPU time since the beginning of the computation";
207 info() <<
"Information on memory consumption (unit: Mo): Mem=(X,m=X1:R1,M=X2:R2,avg=Z)";
208 info() <<
" X -> memory consumption of the process";
209 info() <<
" X1 -> memory consumption of the least memory hungry process and R1 is its rank";
210 info() <<
" X2 -> memory consumption of the most memory hungry process and R2 is its rank";
211 info() <<
" Z -> average memory consumption of all process";
227 m_thm_mem_used = mem_used;
245 values[0] = cpu_time;
246 values[1] = elapsed_time;
247 values[2] = (hyoda)?hyoda->loopbreak(
subDomain()):0.0;
249 cpu_time = values[0];
250 elapsed_time = values[1];
251 if (hyoda && values[2]>0.0)
265 m_thm_diff_cpu = diff_cpu;
267 m_thm_diff_elapsed = diff_elapsed;
278 Int32 mem_min_rank = 0;
279 Int32 mem_max_rank = 0;
280 pm->
computeMinMaxSum(mem_used,mem_min,mem_max,mem_sum,mem_min_rank,mem_max_rank);
283 Int64 i_diff_elapsed = (
Int64)(diff_elapsed * 1000.0);
286 <<
" Conso=(R=" << (((
Real)i_elapsed) / 1000.0)
287 <<
",I=" << (((
Real)i_diff_elapsed) / 1000.0)
288 <<
",C=" << ((
Real)i_cpu / 1000.0)
289 <<
") Mem=(" << (
Int64)(mem_used/1e6)
290 <<
",m=" << (
Int64)(mem_min/1e6)
291 <<
":" << mem_min_rank
292 <<
",M=" << (
Int64)(mem_max/1e6)
293 <<
":" << mem_max_rank
299 m_has_thm_dump_at_iteration =
false;
322 if (
subDomain()->timeLoopMng()->finalTimeReached()){
323 info() <<
"===============================================================";
324 info() <<
"====== END OF COMPUTATION REACHED... =======================";
325 info() <<
"===============================================================";
335 if (m_has_thm_dump_at_iteration)
356 thm->
addValue(
"TotalMemory",mem_used);
358 thm->
addValue(
"GlobalCpuTime",global_cpu_time);
359 thm->
addValue(
"ElapsedTime",diff_elapsed);
360 thm->
addValue(
"GlobalElapsedTime",global_elapsed_time);
362 m_has_thm_dump_at_iteration =
true;
364 Int64 i_elapsed = (
Int64)(global_elapsed_time * 1000.0);
365 Int64 i_diff_elapsed = (
Int64)(diff_elapsed * 1000.0);
366 Int64 i_cpu = (
Int64)(global_cpu_time * 1000.0);
369 <<
" Conso=(R=" << (((
Real)i_elapsed) / 1000.0)
370 <<
",I=" << (((
Real)i_diff_elapsed) / 1000.0)
371 <<
",C=" << ((
Real)i_cpu / 1000.0)
372 <<
") Mem=(" << (
Int64)(mem_used/1e6)
396 service->onTimeLoopBeginLoop();
408 service->onTimeLoopEndLoop();
420 service->onTimeLoopStartInit();
432 service->onTimeLoopContinueInit();
444 service->onTimeLoopExit();
456 service->onTimeLoopMeshChanged();
468 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 d'un service de debugger hybrid.
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.
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.
virtual ~ModuleMaster()
Destructeur.
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 derniere itération.
Real m_old_elapsed_time
Valeur du temps horloge à la derniere 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.
virtual void addTimeLoopService(ITimeLoopService *tls)
Ajoute le service de boucle en temps.
virtual void dumpStandardCurves()
Sort les courbes classiques (CPUTime, ElapsedTime, ...)
UniqueArray< ITimeLoopService * > m_timeloop_services
Liste des serviecs 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.
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.
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.