Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ProfilingInternal.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/* ProfilingInternal.h (C) 2000-2024 */
9/* */
10/* Classes internes pour gérer le profilage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_INTERNAL_PROFILINGINTERNAL_H
13#define ARCANE_UTILS_INTERNAL_PROFILINGINTERNAL_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17// Note: ce fichier n'est pas disponible pour les utilisateurs de Arcane.
18// Il ne faut donc pas l'inclure dans un fichier d'en-tête public.
19
20#include "arcane/utils/String.h"
21#include "arcane/utils/FixedArray.h"
22
23#include <map>
24#include <atomic>
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29namespace Arcane::impl
30{
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
37struct ARCANE_UTILS_EXPORT ForLoopProfilingStat
38{
39 public:
40
42 void add(const ForLoopOneExecStat& s);
43
44 Int64 nbCall() const { return m_nb_call; }
45 Int64 nbChunk() const { return m_nb_chunk; }
46 Int64 execTime() const { return m_exec_time; }
47
48 private:
49
50 Int64 m_nb_call = 0;
51 Int64 m_nb_chunk = 0;
52 Int64 m_exec_time = 0;
53};
54
55/*---------------------------------------------------------------------------*/
56/*---------------------------------------------------------------------------*/
57
58class ARCANE_UTILS_EXPORT ForLoopStatInfoListImpl
59{
60 public:
61
62 void print(std::ostream& o);
63
64 public:
65
66 // TODO Utiliser un hash pour le map plutôt qu'une String pour accélérer les comparaisons
67 std::map<String, ForLoopProfilingStat> m_stat_map;
68};
69
70/*---------------------------------------------------------------------------*/
71/*---------------------------------------------------------------------------*/
75class ARCANE_UTILS_EXPORT ForLoopCumulativeStat
76{
77 public:
78
79 void merge(const ForLoopOneExecStat& s)
80 {
81 ++m_nb_loop_parallel_for;
82 m_nb_chunk_parallel_for += s.nbChunk();
83 m_total_time += s.execTime();
84 }
85
86 public:
87
88 Int64 nbLoopParallelFor() const { return m_nb_loop_parallel_for.load(); }
89 Int64 nbChunkParallelFor() const { return m_nb_chunk_parallel_for.load(); }
90 Int64 totalTime() const { return m_total_time.load(); }
91
92 private:
93
94 std::atomic<Int64> m_nb_loop_parallel_for = 0;
95 std::atomic<Int64> m_nb_chunk_parallel_for = 0;
96 std::atomic<Int64> m_total_time = 0;
97};
98
99/*---------------------------------------------------------------------------*/
100/*---------------------------------------------------------------------------*/
107class ARCANE_UTILS_EXPORT AcceleratorStatInfoList
108{
109 public:
110
113 {
114 public:
115
116 void merge(const MemoryTransferInfo& mem_info)
117 {
118 m_nb_byte += mem_info.m_nb_byte;
119 m_nb_call += mem_info.m_nb_call;
120 }
121
122 public:
123
124 Int64 m_nb_byte = 0;
125 Int64 m_nb_call = 0;
126 };
127
130 {
131 public:
132
133 void merge(const MemoryPageFaultInfo& mem_info)
134 {
135 m_nb_fault += mem_info.m_nb_fault;
136 m_nb_call += mem_info.m_nb_call;
137 }
138
139 public:
140
141 Int64 m_nb_fault = 0;
142 Int64 m_nb_call = 0;
143 };
144
145 enum class eMemoryTransferType
146 {
147 HostToDevice = 0,
148 DeviceToHost = 1
149 };
150 enum class eMemoryPageFaultType
151 {
152 Gpu = 0,
153 Cpu = 1
154 };
155
156 public:
157
158 void addMemoryTransfer(eMemoryTransferType type, Int64 nb_byte)
159 {
160 MemoryTransferInfo mem_info{ nb_byte, 1 };
161 m_managed_memory_transfer_list[(int)type].merge(mem_info);
162 }
163 const MemoryTransferInfo& memoryTransfer(eMemoryTransferType type) const
164 {
165 return m_managed_memory_transfer_list[(int)type];
166 }
167 void addMemoryPageFault(eMemoryPageFaultType type, Int64 nb_byte)
168 {
169 MemoryPageFaultInfo mem_info{ nb_byte, 1 };
170 m_managed_memory_page_fault_list[(int)type].merge(mem_info);
171 }
172 const MemoryPageFaultInfo& memoryPageFault(eMemoryPageFaultType type) const
173 {
174 return m_managed_memory_page_fault_list[(int)type];
175 }
176
177 public:
178
179 void print(std::ostream& ostr) const;
180
181 private:
182
183 // Doit avoir le même nombre d'éléments que 'eMemoryTransfertType'
184 FixedArray<MemoryTransferInfo, 2> m_managed_memory_transfer_list;
185
186 // Doit avoir le même nombre d'éléments que 'eMemoryPageFaultType'
187 FixedArray<MemoryPageFaultInfo, 2> m_managed_memory_page_fault_list;
188};
189
190/*---------------------------------------------------------------------------*/
191/*---------------------------------------------------------------------------*/
192
193} // namespace Arcane::impl
194
195/*---------------------------------------------------------------------------*/
196/*---------------------------------------------------------------------------*/
197
198#endif
Classe pour gérer le profiling d'une seule exécution d'une boucle.
Definition Profiling.h:93
Int64 nbChunk() const
Nombre de chunks.
Definition Profiling.h:110
Int64 execTime() const
Temps d'exécution (en nanoseconde).
Definition Profiling.h:118
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Informations sur les défauts de page sur CPU ou GPU.
Informations sur les transferts mémoire entre CPU et GPU.
Statistiques pour les accélérateurs.
Statistiques cumulées sur le nombre de boucles exécutées.
Statistiques d'exécution d'une boucle.