Arcane  v3.16.6.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
VariableSynchronizerMng.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 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/* VariableSynchronizerMng.h (C) 2000-2025 */
9/* */
10/* Gestionnaire des synchroniseurs de variables. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13#ifndef ARCANE_IMPL_INTERNAL_VARIABLESYNCHRONIZERMNG_H
14#define ARCANE_IMPL_INTERNAL_VARIABLESYNCHRONIZERMNG_H
15/*---------------------------------------------------------------------------*/
16/*---------------------------------------------------------------------------*/
17
18#include "arcane/utils/TraceAccessor.h"
19#include "arcane/utils/Event.h"
20
21#include "arcane/core/IVariableSynchronizerMng.h"
22#include "arcane/core/internal/IVariableSynchronizerMngInternal.h"
23
24#include <memory>
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29namespace Arcane
30{
32
33/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
38class ARCANE_IMPL_EXPORT VariableSynchronizerMng
39: public TraceAccessor
41{
42 public:
43
44 explicit VariableSynchronizerMng(IVariableMng* vm);
45 ~VariableSynchronizerMng();
46
47 public:
48
49 class InternalApi
50 : public TraceAccessor
52 {
53 class BufferList;
54
55 public:
56
57 explicit InternalApi(VariableSynchronizerMng* vms);
58 ~InternalApi();
59
60 public:
61
62 Ref<MemoryBuffer> createSynchronizeBuffer(IMemoryAllocator* allocator) override;
63 void releaseSynchronizeBuffer(IMemoryAllocator* allocator, MemoryBuffer* v) override;
64
65 public:
66
67 void dumpStats(std::ostream& ostr) const;
68
69 private:
70
71 VariableSynchronizerMng* m_synchronizer_mng = nullptr;
72 std::unique_ptr<BufferList> m_buffer_list;
73 };
74
75 public:
76
77 void initialize();
78
79 public:
80
81 IParallelMng* parallelMng() const override { return m_parallel_mng; }
82
84 {
85 return m_on_synchronized;
86 }
87
88 void setSynchronizationCompareLevel(Int32 v) final { m_synchronize_compare_level = v; }
89 Int32 synchronizationCompareLevel() const final { return m_synchronize_compare_level; }
90 bool isSynchronizationComparisonEnabled() const final { return m_synchronize_compare_level > 0; }
91
92 void dumpStats(std::ostream& ostr) const override;
93 void flushPendingStats() override;
94 IVariableSynchronizerMngInternal* _internalApi() override { return &m_internal_api; }
95 bool isDoingStats() const { return m_is_doing_stats || m_synchronize_compare_level > 0; }
96
97 private:
98
99 IVariableMng* m_variable_mng = nullptr;
100 IParallelMng* m_parallel_mng = nullptr;
101 InternalApi m_internal_api{ this };
102 EventObservable<const VariableSynchronizerEventArgs&> m_on_synchronized;
103 VariableSynchronizerStats* m_stats = nullptr;
104 Int32 m_synchronize_compare_level = 0;
105 bool m_is_doing_stats = false;
106};
107
108/*---------------------------------------------------------------------------*/
109/*---------------------------------------------------------------------------*/
110
111} // End namespace Arcane
112
113/*---------------------------------------------------------------------------*/
114/*---------------------------------------------------------------------------*/
115
116#endif
Fichier contenant les mécanismes de gestion des évènements.
Classe de base d'un handler d'évènement.
Definition Event.h:193
Interface du gestionnaire de parallélisme pour un sous-domaine.
Interface du gestionnaire de variables.
API interne à Arcane de IVariableSynchronizerMng.
Interface du gestionnaire de synchronisation des variables.
Gestion d'un buffer mémoire.
Référence à une instance.
TraceAccessor(ITraceMng *m)
Construit un accesseur via le gestionnaire de trace m.
Gère un pool de buffer associé à un allocateur.
void setSynchronizationCompareLevel(Int32 v) final
Positionne le niveau de comparaison entre les valeurs avant et après synchronisations.
bool isSynchronizationComparisonEnabled() const final
Indique si on effectue les comparaisons des valeurs avant et après synchronisation.
EventObservable< const VariableSynchronizerEventArgs & > & onSynchronized() override
Évènement envoyé en début et fin de synchronisation.
Int32 synchronizationCompareLevel() const final
Niveau de comparaison des valeurs avant et après synchronisation.
IParallelMng * parallelMng() const override
Gestionnaire de parallélisme associé
Statistiques de synchronisation.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::int32_t Int32
Type entier signé sur 32 bits.