Arcane  v3.16.0.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-2023 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-2023 */
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/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27namespace Arcane
28{
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
36class ARCANE_IMPL_EXPORT VariableSynchronizerMng
37: public TraceAccessor
39{
40 public:
41
42 explicit VariableSynchronizerMng(IVariableMng* vm);
43 ~VariableSynchronizerMng();
44
45 public:
46
47 class InternalApi
48 : public TraceAccessor
50 {
51 class BufferList;
52
53 public:
54
55 explicit InternalApi(VariableSynchronizerMng* vms);
56 ~InternalApi();
57
58 public:
59
60 Ref<MemoryBuffer> createSynchronizeBuffer(IMemoryAllocator* allocator) override;
61 void releaseSynchronizeBuffer(IMemoryAllocator* allocator, MemoryBuffer* v) override;
62
63 public:
64
65 void dumpStats(std::ostream& ostr) const;
66
67 private:
68
69 VariableSynchronizerMng* m_synchronizer_mng = nullptr;
70 BufferList* m_buffer_list = nullptr;
71 };
72
73 public:
74
75 void initialize();
76
77 public:
78
79 IParallelMng* parallelMng() const override { return m_parallel_mng; }
80
82 {
83 return m_on_synchronized;
84 }
85
86 void setSynchronizationCompareLevel(Int32 v) final { m_synchronize_compare_level = v; }
87 Int32 synchronizationCompareLevel() const final { return m_synchronize_compare_level; }
88 bool isSynchronizationComparisonEnabled() const final { return m_synchronize_compare_level > 0; }
89
90 void dumpStats(std::ostream& ostr) const override;
91 void flushPendingStats() override;
92 IVariableSynchronizerMngInternal* _internalApi() override { return &m_internal_api; }
93 bool isDoingStats() const { return m_is_doing_stats || m_synchronize_compare_level > 0; }
94
95 private:
96
97 IVariableMng* m_variable_mng = nullptr;
98 IParallelMng* m_parallel_mng = nullptr;
99 InternalApi m_internal_api{ this };
100 EventObservable<const VariableSynchronizerEventArgs&> m_on_synchronized;
101 VariableSynchronizerStats* m_stats = nullptr;
102 Int32 m_synchronize_compare_level = 0;
103 bool m_is_doing_stats = false;
104};
105
106/*---------------------------------------------------------------------------*/
107/*---------------------------------------------------------------------------*/
108
109} // End namespace Arcane
110
111/*---------------------------------------------------------------------------*/
112/*---------------------------------------------------------------------------*/
113
114#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.