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);
61, m_case_options_main(0)
64, m_old_elapsed_time(0.0)
65, m_is_first_loop(
true)
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,
132 com->updateOptions(0.0,0.0,0);
157 info() <<
"Initialization to restore the functions of the input data: "
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";
220 Real
mem_used = platform::getMemoryUsed();
240 Real
cpu_time = (Real)platform::getCPUTime();
241 Real elapsed_time = platform::getRealTime();
246 values[1] = elapsed_time;
247 values[2] = (hyoda)?hyoda->loopbreak(
subDomain()):0.0;
250 elapsed_time = values[1];
251 if (hyoda && values[2]>0.0)
285 info(1) <<
"Date: " << platform::getCurrentDateTime()
286 <<
" Conso=(R=" << (((Real)
i_elapsed) / 1000.0)
288 <<
",C=" << ((Real)
i_cpu / 1000.0)
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)
347 Real
cpu_time = (Real)platform::getCPUTime();
348 Real elapsed_time = platform::getRealTime();
351 Real
mem_used = platform::getMemoryUsed();
358 thm->addValue(
"GlobalCpuTime",global_cpu_time);
362 m_has_thm_dump_at_iteration =
true;
366 Int64
i_cpu = (Int64)(global_cpu_time * 1000.0);
368 info(4) <<
"EndIter: Date: " << platform::getCurrentDateTime()
369 <<
" Conso=(R=" << (((Real)
i_elapsed) / 1000.0)
371 <<
",C=" << ((Real)
i_cpu / 1000.0)
396 service->onTimeLoopBeginLoop();
408 service->onTimeLoopEndLoop();
420 service->onTimeLoopStartInit();
432 service->onTimeLoopContinueInit();
444 service->onTimeLoopExit();
456 service->onTimeLoopMeshChanged();
468 service->onTimeLoopRestore();
Classe représentant un module.
ISubDomain * subDomain() const override
Sous-domaine associé au module.
IParallelMng * parallelMng() const override
Gestionnaire du parallélisme par échange de message.
Variables communes d'un cas.
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.
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.
static const char *const WComputeLoop
appelé pendant la boucle de calcul
@ 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 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
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 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.
Interface d'un service opérant lors de la boucle en temps.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Informations pour construire un module.
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.
String name() const
Nom de la variable.
TraceMessage info() const
Flot pour un message d'information.
Formattage des réels avec une précision donnée.
Formattage du flot en longueur.
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.