Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
EnumeratorTraceWrapper.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/* EnumeratorTraceWrapper.h (C) 2000-2024 */
9/* */
10/* Enumérateur sur des groupes d'entités du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ENUMERATORTRACEWRAPPER_H
13#define ARCANE_ENUMERATORTRACEWRAPPER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/ArrayView.h"
18#include "arcane/utils/TraceInfo.h"
19
20#include <array>
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25#ifndef ARCANE_TRACE_ENUMERATOR
26// Décommenter si on souhaite toujours activer les traces des énumérateurs
27//#define ARCANE_TRACE_ENUMERATOR
28#endif
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32
33namespace Arcane
34{
35
36/*---------------------------------------------------------------------------*/
37/*---------------------------------------------------------------------------*/
42{
43 public:
44
46 Int64ArrayView counters() { return Int64ArrayView(8, m_counters.data()); }
47
49 Int64 beginTime() const { return m_begin_time; }
50
52 void setBeginTime(Int64 v) { m_begin_time = v; }
53
56 {
57 if (ti) {
58 m_trace_info = *ti;
59 m_has_trace_info = true;
60 }
61 else
62 m_has_trace_info = false;
63 }
64
66 const TraceInfo* traceInfo() const
67 {
68 return (m_has_trace_info) ? &m_trace_info : nullptr;
69 }
70
71 private:
72
73 std::array<Int64, 8> m_counters = {};
74 Int64 m_begin_time = 0;
75 TraceInfo m_trace_info;
76 bool m_has_trace_info = false;
77};
78
79/*---------------------------------------------------------------------------*/
80/*---------------------------------------------------------------------------*/
91template <typename TrueEnumerator, typename TracerInterface>
93: public TrueEnumerator
94{
95 public:
96
97 ARCCORE_HOST_DEVICE EnumeratorTraceWrapper(TrueEnumerator&& tenum)
98 : TrueEnumerator(tenum)
99 {
100#ifndef ARCCORE_DEVICE_CODE
101 m_tracer = TracerInterface::singleton();
102 if (m_tracer)
103 m_tracer->enterEnumerator(*this, m_infos);
104#endif
105 }
106 ARCCORE_HOST_DEVICE EnumeratorTraceWrapper(TrueEnumerator&& tenum, [[maybe_unused]] const TraceInfo& ti)
107 : TrueEnumerator(tenum)
108 {
109#ifndef ARCCORE_DEVICE_CODE
110 m_tracer = TracerInterface::singleton();
111 if (m_tracer) {
112 m_infos.setTraceInfo(&ti);
113 m_tracer->enterEnumerator(*this, m_infos);
114 }
115#endif
116 }
117 ARCCORE_HOST_DEVICE ~EnumeratorTraceWrapper() ARCANE_NOEXCEPT_FALSE
118 {
119#ifndef ARCCORE_DEVICE_CODE
120 if (m_tracer)
121 m_tracer->exitEnumerator(*this, m_infos);
122#endif
123 }
124
125 private:
126
127 TracerInterface* m_tracer = nullptr;
128 EnumeratorTraceInfo m_infos;
129};
130
131/*---------------------------------------------------------------------------*/
132/*---------------------------------------------------------------------------*/
133
134#if defined(ARCANE_TRACE_ENUMERATOR)
135#define A_TRACE_ITEM_ENUMERATOR(_EnumeratorClassName) \
136 ::Arcane::EnumeratorTraceWrapper<_EnumeratorClassName, ::Arcane::IItemEnumeratorTracer>
137#define A_TRACE_ENUMERATOR_WHERE , A_FUNCINFO
138#else
139#define A_TRACE_ITEM_ENUMERATOR(_EnumeratorClassName) \
140 _EnumeratorClassName
141#define A_TRACE_ENUMERATOR_WHERE
142#endif
143
144/*---------------------------------------------------------------------------*/
145/*---------------------------------------------------------------------------*/
146
147} // namespace Arcane
148
149/*---------------------------------------------------------------------------*/
150/*---------------------------------------------------------------------------*/
151
152#endif
Informations pour les traces d'un énumérator.
const TraceInfo * traceInfo() const
Informations de trace (ou nullptr) si aucune.
Int64 beginTime() const
Temps du début en nanoseconde.
Int64ArrayView counters()
Valeurs de compteurs hardware.
void setTraceInfo(const TraceInfo *ti)
Positionne les informations de trace.
void setBeginTime(Int64 v)
Positionne le temps de début.
Wrapper autour d'un énumérator pour les traces.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Vue modifiable d'un tableau d'un type T.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
ArrayView< Int64 > Int64ArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
Definition UtilsTypes.h:609