Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
TimeStats.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* TimeStats.h (C) 2000-2024 */
9/* */
10/* Statistiques sur les temps d'exécution. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_IMPL_TIMESTATS_H
13#define ARCANE_IMPL_TIMESTATS_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/List.h"
18#include "arcane/utils/TraceAccessor.h"
19#include "arcane/utils/FixedArray.h"
20
21#include "arcane/core/ITimeStats.h"
22
23#include <stack>
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane
29{
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
37: public TraceAccessor
38, public ITimeStats
39{
40 public:
41
42 class Action;
43 class ActionSeries;
44 class PhaseValue;
45 class MetricCollector;
47
48 enum eTimeType
49 {
50 TT_Real = 0,
51 TT_Virtual
52 };
53
55 static const Integer NB_TIME_TYPE = 2;
56
57 static const Integer TC_Local = 0;
58 static const Integer TC_Cumulative = 1;
59
60 struct TimeValue
61 {
62 public:
63
65 {
66 m_time[TT_Real][TC_Local] = real_time;
67 m_time[TT_Virtual][TC_Local] = virtual_time;
68 }
69 TimeValue()
70 {
71 }
72
73 public:
74
75 void add(const TimeValue& phase)
76 {
77 for( Integer i=0; i<NB_TIME_TYPE; ++i )
78 m_time[i][TC_Local] += phase.m_time[i][TC_Local];
79 }
80
81 public:
82
84 };
85
87 : public TimeValue
88 {
89 public:
91 : TimeValue(real_time,virtual_time), m_type(pt) { }
92 PhaseValue() = default;
93 public:
94 eTimePhase phase() const { return m_type; }
95 public:
96 eTimePhase m_type = TP_Computation;
97 };
98
99 public:
100
101 TimeStats(ITimerMng* timer_mng,ITraceMng* trm,const String& name);
102 TimeStats(const TimeStats& rhs) = delete;
103 TimeStats& operator=(const TimeStats& rhs) = delete;
104 ~TimeStats() override;
105
106 public:
107
108 void beginGatherStats() override;
109 void endGatherStats() override;
110
111 public:
112
113 void beginAction(const String& action_name) override;
114 void endAction(const String& action_name,bool print_time) override;
115 void beginPhase(eTimePhase phase_type) override;
116 void endPhase(eTimePhase phase_type) override;
117
118 public:
119
120 Real elapsedTime(eTimePhase phase) override;
121 Real elapsedTime(eTimePhase phase,const String& action) override;
122
123 public:
124
125 void dumpStats(std::ostream& ostr,bool is_verbose,Real nb,
126 const String& name,bool use_elapsed_time) override;
127 void dumpCurrentStats(const String& action) override;
128
129 void dumpTimeAndMemoryUsage(IParallelMng* pm) override;
130
131 bool isGathering() const override;
132
133 void dumpStatsJSON(JSONWriter& writer) override;
134
136
137 void notifyNewIterationLoop() override;
138 void saveTimeValues(Properties* p) override;
139 void mergeTimeValues(Properties* p) override;
140
141 void resetStats(const String& name) override;
142
143 private:
144
145 ITimerMng* m_timer_mng = nullptr;
146 Timer* m_virtual_timer = nullptr;
147 Timer* m_real_timer = nullptr;
148 bool m_is_gathering = false;
149 PhaseValue m_current_phase;
154 Action* m_main_action = nullptr;
155 Action* m_current_action = nullptr;
156 std::stack<eTimePhase> m_phases_type;
157 bool m_need_compute_elapsed_time = false;
158 std::ostringstream m_full_stats_str;
159 bool m_full_stats = false;
160 String m_name;
161 ITimeMetricCollector* m_metric_collector = nullptr;
162
163 private:
164
165 Action* _currentAction();
166 PhaseValue _currentPhaseValue();
167 void _checkGathering();
168 void _computeCumulativeTimes();
169 void _dumpCumulativeTime(std::ostream& ostr,Action& action,eTimePhase tp,eTimeType tt);
170 void _dumpAllPhases(std::ostream& ostr,Action& action,eTimeType tt,int tc,Real nb);
171};
172
173/*---------------------------------------------------------------------------*/
174/*---------------------------------------------------------------------------*/
175
176} // End namespace Arcane
177
178/*---------------------------------------------------------------------------*/
179/*---------------------------------------------------------------------------*/
180
181#endif
182
Interface du gestionnaire de parallélisme pour un sous-domaine.
Interface gérant les statistiques sur les temps d'exécution.
Definition ITimeStats.h:48
Interface d'un gestionnaire de timer.
Definition ITimerMng.h:53
Ecrivain au format JSON.
Definition JSONWriter.h:33
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Liste de propriétés.
Definition Properties.h:64
Statistiques sur les temps d'exécution.
Definition TimeStats.h:39
Real elapsedTime(eTimePhase phase) override
Temps réel écoulé pour la phase phase.
Definition TimeStats.cc:399
void dumpStats(std::ostream &ostr, bool is_verbose, Real nb, const String &name, bool use_elapsed_time) override
Affiche les statistiques sur les temps d'exécution.
Definition TimeStats.cc:491
void endGatherStats() override
Arrête la collection des temps.
Definition TimeStats.cc:296
void dumpCurrentStats(const String &action) override
Affiche les statistiques d'une action.
Definition TimeStats.cc:509
ActionSeries * m_previous_action_series
Statistiques sur les exécutions précédentes.
Definition TimeStats.h:153
bool isGathering() const override
Indique si les statistiques sont actives.
Definition TimeStats.cc:804
void dumpStatsJSON(JSONWriter &writer) override
Sérialise dans l'écrivain writer les statistiques temporelles.
Definition TimeStats.cc:823
ITimeMetricCollector * metricCollector() override
Interface de collection associée.
Definition TimeStats.cc:975
void notifyNewIterationLoop() override
Notifie qu'on commence une nouvelle itération de la boucle de calcul.
static const Integer NB_TIME_TYPE
Nombre de valeurs de eTimeType.
Definition TimeStats.h:55
void beginGatherStats() override
Démarre la collection des temps.
Definition TimeStats.cc:272
ActionSeries * m_current_action_series
Statistiques sur l'exécution en cours.
Definition TimeStats.h:151
void dumpTimeAndMemoryUsage(IParallelMng *pm) override
Affiche la date actuelle et la mémoire consommée.
Definition TimeStats.cc:814
Gestion d'un timer.
Definition Timer.h:62
Interface gérant les statistiques sur l'exécution.
Interface du gestionnaire de traces.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eTimePhase
Phase d'une action temporelle.