14#include "arcane/materials/EnumeratorTracer.h"
16#include "arcane/utils/IPerformanceCounterService.h"
17#include "arcane/utils/Profiling.h"
18#include "arcane/utils/PlatformUtils.h"
19#include "arcane/utils/ForLoopTraceInfo.h"
21#include "arcane/materials/MatItemEnumerator.h"
35EnumeratorTracer(ITraceMng* tm, Ref<IPerformanceCounterService> perf_service)
37, m_perf_counter(perf_service)
52void EnumeratorTracer::
53_beginLoop(EnumeratorTraceInfo& eti)
56 m_perf_counter->getCounters(eti.counters(),
false);
57 eti.setBeginTime(platform::getRealTimeNS());
63void EnumeratorTracer::
64_endLoop(EnumeratorTraceInfo& eti)
66 m_perf_counter->getCounters(eti.counters(),
true);
67 const TraceInfo* ti = eti.traceInfo();
68 ForLoopTraceInfo loop_trace_info;
70 loop_trace_info = ForLoopTraceInfo(*ti);
71 ForLoopOneExecStat exec_stat;
72 exec_stat.setBeginTime(eti.beginTime());
73 exec_stat.setEndTime(platform::getRealTimeNS());
74 ProfilingRegistry::_threadLocalForLoopInstance()->merge(exec_stat, loop_trace_info);
80void EnumeratorTracer::
81enterEnumerator(
const ComponentEnumerator& e, EnumeratorTraceInfo& eti)
84 const TraceInfo* ti = eti.traceInfo();
85 if (ti && m_is_verbose)
86 info() <<
"Enum size=" << e.m_size <<
" where=" << *ti;
92void EnumeratorTracer::
93exitEnumerator(
const ComponentEnumerator&, EnumeratorTraceInfo& eti)
97 info() <<
"EndLoop: Component counters=" << eti.counters();
103void EnumeratorTracer::
104enterEnumerator(
const MatEnumerator&, EnumeratorTraceInfo& eti)
112void EnumeratorTracer::
113exitEnumerator(
const MatEnumerator&, EnumeratorTraceInfo& eti)
121void EnumeratorTracer::
122enterEnumerator(
const EnvEnumerator&, EnumeratorTraceInfo& eti)
130void EnumeratorTracer::
131exitEnumerator(
const EnvEnumerator&, EnumeratorTraceInfo& eti)
139void EnumeratorTracer::
140enterEnumerator(
const ComponentCellEnumerator& e, EnumeratorTraceInfo& eti)
142 ++m_nb_call_component_cell;
143 m_nb_loop_component_cell += e.m_size;
144 const TraceInfo* ti = eti.traceInfo();
145 if (ti && m_is_verbose)
146 info() <<
"ComponentCell size=" << e.m_size <<
" where=" << *ti;
153void EnumeratorTracer::
154exitEnumerator(
const ComponentCellEnumerator&, EnumeratorTraceInfo& eti)
158 info() <<
"EndLoop: ComponentCell counters=" << eti.counters();
164void EnumeratorTracer::
165enterEnumerator(
const AllEnvCellEnumerator& e, EnumeratorTraceInfo& eti)
167 ++m_nb_call_all_env_cell;
168 m_nb_loop_all_env_cell += e.m_size;
170 const TraceInfo* ti = eti.traceInfo();
171 if (ti && m_is_verbose)
172 info() <<
"ComponentCell size=" << e.m_size <<
" where=" << *ti;
179void EnumeratorTracer::
180exitEnumerator(
const AllEnvCellEnumerator&, EnumeratorTraceInfo& eti)
184 info() <<
"EndLoop: AllEnvCell counters=" << eti.counters();
190void EnumeratorTracer::
191enterEnumerator(
const CellComponentCellEnumerator& e, EnumeratorTraceInfo& eti)
193 ++m_nb_call_cell_component_cell;
194 m_nb_loop_cell_component_cell += e.m_size;
201void EnumeratorTracer::
202exitEnumerator(
const CellComponentCellEnumerator&, EnumeratorTraceInfo& eti)
210void EnumeratorTracer::
211enterEnumerator(
const ComponentPartSimdCellEnumerator&, EnumeratorTraceInfo& eti)
219void EnumeratorTracer::
220exitEnumerator(
const ComponentPartSimdCellEnumerator&, EnumeratorTraceInfo& eti)
228void EnumeratorTracer::
229enterEnumerator(
const ComponentPartCellEnumerator&, EnumeratorTraceInfo& eti)
237void EnumeratorTracer::
238exitEnumerator(
const ComponentPartCellEnumerator&, EnumeratorTraceInfo& eti)
246void EnumeratorTracer::
249 info() <<
"ENUMERATOR_TRACER_DUMP_STATS nb_call=" << m_nb_call;
250 info() <<
" nb_call_all_env_cell=" << m_nb_call_all_env_cell
251 <<
" nb_loop_all_env_cell=" << m_nb_loop_all_env_cell
252 <<
" ratio=" << (
Real)m_nb_loop_all_env_cell / (Real)(m_nb_call_all_env_cell + 1);
253 info() <<
" nb_call_component_cell=" << m_nb_call_component_cell
254 <<
" nb_loop_component_cell=" << m_nb_loop_component_cell
255 <<
" ratio=" << (
Real)m_nb_loop_component_cell / (Real)(m_nb_call_component_cell + 1);
256 info() <<
" nb_call_cell_component_cell=" << m_nb_call_cell_component_cell
257 <<
" nb_loop_cell_component_cell=" << m_nb_loop_cell_component_cell
258 <<
" ratio=" << (
Real)m_nb_loop_cell_component_cell / (Real)(m_nb_call_cell_component_cell + 1);
Always enables tracing in Arcane parts concerning materials.
double Real
Type representing a real number.