Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
Profiling.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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/* Profiling.h (C) 2000-2022 */
9/* */
10/* Classes pour gérer le profilage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_PROFILING_H
13#define ARCANE_UTILS_PROFILING_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19#include "arcane/utils/String.h"
20
21#include <atomic>
22#include <functional>
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27namespace Arcane::impl
28{
29class AcceleratorStatInfoList;
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
37class ARCANE_UTILS_EXPORT ScopedStatLoop
38{
39 public:
40
43
44 public:
45
46 Int64 m_begin_time = 0.0;
47 ForLoopOneExecStat* m_stat_info = nullptr;
48};
49
50/*---------------------------------------------------------------------------*/
51/*---------------------------------------------------------------------------*/
55class ARCANE_UTILS_EXPORT ForLoopStatInfoList
56{
57 public:
58
61
62 public:
63
65
66 public:
67
72 ForLoopStatInfoListImpl* _internalImpl() const { return m_p; }
73
74 private:
75
76 ForLoopStatInfoListImpl* m_p = nullptr;
77};
78
79} // namespace Arcane::impl
80
81/*---------------------------------------------------------------------------*/
82/*---------------------------------------------------------------------------*/
83
84namespace Arcane
85{
86
87/*---------------------------------------------------------------------------*/
88/*---------------------------------------------------------------------------*/
92class ARCANE_UTILS_EXPORT ForLoopOneExecStat
93{
94 public:
95
101 void incrementNbChunk() { ++m_nb_chunk; }
102
104 void setBeginTime(Int64 v) { m_begin_time = v; }
105
107 void setEndTime(Int64 v) { m_end_time = v; }
108
110 Int64 nbChunk() const { return m_nb_chunk; }
111
118 Int64 execTime() const { return m_end_time - m_begin_time; }
119
120 void reset()
121 {
122 m_nb_chunk = 0;
123 m_begin_time = 0;
124 m_end_time = 0;
125 }
126
127 private:
128
130 std::atomic<Int64> m_nb_chunk = 0;
131
132 // Temps de début d'exécution
133 Int64 m_begin_time = 0;
134
135 // Temps de fin d'exécution
136 Int64 m_end_time = 0;
137};
138
139/*---------------------------------------------------------------------------*/
140/*---------------------------------------------------------------------------*/
150class ARCANE_UTILS_EXPORT ProfilingRegistry
151{
152 public:
153
158 ARCANE_DEPRECATED_REASON("Y2023: Use _threadLocalForLoopInstance() instead")
159 static impl::ForLoopStatInfoList* threadLocalInstance();
160
167 static void setProfilingLevel(Int32 level);
168
170 static Int32 profilingLevel() { return m_profiling_level; }
171
173 static bool hasProfiling() { return m_profiling_level > 0; }
174
183 static void visitLoopStat(const std::function<void(const impl::ForLoopStatInfoList&)>& f);
184
193 static void visitAcceleratorStat(const std::function<void(const impl::AcceleratorStatInfoList&)>& f);
194
195 static const impl::ForLoopCumulativeStat& globalLoopStat();
196
197 public:
198
199 // API publique mais réservée à Arcane.
200
205 static impl::ForLoopStatInfoList* _threadLocalForLoopInstance();
206
211 static impl::AcceleratorStatInfoList* _threadLocalAcceleratorInstance();
212
213 private:
214
215 static Int32 m_profiling_level;
216};
217
218/*---------------------------------------------------------------------------*/
219/*---------------------------------------------------------------------------*/
220
221} // End namespace Arcane
222
223/*---------------------------------------------------------------------------*/
224/*---------------------------------------------------------------------------*/
225
226#endif
Déclarations des types utilisés dans Arcane.
Classe pour gérer le profiling d'une seule exécution d'une boucle.
Definition Profiling.h:93
void setEndTime(Int64 v)
Positionne le temps de fin de la boucle en nanoseconde.
Definition Profiling.h:107
void setBeginTime(Int64 v)
Positionne le temps de début de la boucle (en nanoseconde)
Definition Profiling.h:104
Int64 nbChunk() const
Nombre de chunks.
Definition Profiling.h:110
void incrementNbChunk()
Incrémente le nombre de chunk utilisé.
Definition Profiling.h:101
Int64 execTime() const
Temps d'exécution (en nanoseconde).
Definition Profiling.h:118
Informations de trace pour une boucle 'for'.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Gestionnaire pour le profiling.
Definition Profiling.h:151
static bool hasProfiling()
Indique si le profilage est actif.
Definition Profiling.h:173
static Int32 profilingLevel()
Niveau de profilage.
Definition Profiling.h:170
Statistiques pour les accélérateurs.
Statistiques cumulées sur le nombre de boucles exécutées.
Statistiques d'exécution des boucles.
Definition Profiling.h:56
ForLoopStatInfoListImpl * _internalImpl() const
Type opaque pour l'implémentation interne.
Definition Profiling.h:72
Classe permettant de récupérer le temps passé entre l'appel au constructeur et au destructeur.
Definition Profiling.h:38
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-