Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
VariableSynchronizer.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/* VariableSynchronizer.h (C) 2000-2024 */
9/* */
10/* Service de synchronisation des variables. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13#ifndef ARCANE_IMPL_INTERNAL_VARIABLESYNCHRONIZER_H
14#define ARCANE_IMPL_INTERNAL_VARIABLESYNCHRONIZER_H
15/*---------------------------------------------------------------------------*/
16/*---------------------------------------------------------------------------*/
17
18#include "arcane/utils/TraceAccessor.h"
19#include "arcane/utils/NotSupportedException.h"
20#include "arcane/utils/ITraceMng.h"
21#include "arcane/utils/Event.h"
22
24#include "arcane/core/ItemGroup.h"
25#include "arcane/core/IVariableSynchronizer.h"
26#include "arcane/core/IParallelMng.h"
27#include "arcane/core/DataTypeDispatchingDataVisitor.h"
28
29#include "arcane/impl/internal/IDataSynchronizeDispatcher.h"
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33
34namespace Arcane
35{
36class Timer;
37class INumericDataInternal;
38class DataSynchronizeResult;
39
40/*---------------------------------------------------------------------------*/
41/*---------------------------------------------------------------------------*/
50class ARCANE_IMPL_EXPORT VariableSynchronizer
51: public TraceAccessor
53{
55 class SyncMessage;
56
57 public:
58
61 ~VariableSynchronizer() override;
62
63 public:
64
66 {
67 return m_parallel_mng;
68 }
69
70 const ItemGroup& itemGroup() override { return m_item_group; }
71
72 void compute() override;
73
74 void changeLocalIds(Int32ConstArrayView old_to_new_ids) override;
75
76 void synchronize(IVariable* var) override;
77
78 void synchronize(IVariable* var, Int32ConstArrayView local_ids) override;
79
80 void synchronize(VariableCollection vars) override;
81
82 void synchronize(VariableCollection vars, Int32ConstArrayView local_ids) override;
83
84 Int32ConstArrayView communicatingRanks() override;
85
86 Int32ConstArrayView sharedItems(Int32 index) override;
87
88 Int32ConstArrayView ghostItems(Int32 index) override;
89
90 void synchronizeData(IData* data) override;
91
93 {
94 return m_on_synchronized;
95 }
96
97 public:
98
99 IVariableSynchronizerMng* synchronizeMng() const { return m_variable_synchronizer_mng; }
100
101 private:
102
103 IParallelMng* m_parallel_mng = nullptr;
104 ItemGroup m_item_group;
105 Ref<DataSynchronizeInfo> m_sync_info;
106 Timer* m_sync_timer = nullptr;
107 bool m_is_verbose = false;
108 bool m_allow_multi_sync = true;
109 bool m_trace_sync = false;
110 EventObservable<const VariableSynchronizerEventArgs&> m_on_synchronized;
111 Ref<IDataSynchronizeImplementationFactory> m_implementation_factory;
112 IVariableSynchronizerMng* m_variable_synchronizer_mng = nullptr;
113 SyncMessage* m_default_message = nullptr;
114 Runner* m_runner = nullptr;
115 // Pour les synchronisations sur un sous-ensemble des entités
116 Ref<DataSynchronizeInfo> m_partial_sync_info;
117 Ref<SyncMessage> m_partial_message;
118 UniqueArray<Int32> m_partial_local_ids;
119 bool m_is_check_coherence = false;
120
121 private:
122
123 void _synchronize(IVariable* var, SyncMessage* message);
124 void _synchronizeMulti(const VariableCollection& vars, SyncMessage* message);
125 bool _canSynchronizeMulti(const VariableCollection& vars);
126 DataSynchronizeResult _synchronize(INumericDataInternal* data, bool is_compare_sync);
127 SyncMessage* _buildMessage();
128 SyncMessage* _buildMessage(Ref<DataSynchronizeInfo>& sync_info);
129 void _rebuildMessage(Int32ConstArrayView local_ids);
130 void _sendBeginEvent(VariableSynchronizerEventArgs& args);
131 void _sendEndEvent(VariableSynchronizerEventArgs& args);
132 void _sendEvent(VariableSynchronizerEventArgs& args);
133 void _checkCreateTimer();
134 void _doSynchronize(SyncMessage* message);
135 void _setCurrentDevice();
136};
137
138/*---------------------------------------------------------------------------*/
139/*---------------------------------------------------------------------------*/
140
141} // End namespace Arcane
142
143/*---------------------------------------------------------------------------*/
144/*---------------------------------------------------------------------------*/
145
146#endif
Fichier contenant les mécanismes de gestion des évènements.
Fichier contenant les déclarations concernant le modèle de programmation par échange de message.
Interface d'une donnée.
Definition IData.h:33
Interface du gestionnaire de parallélisme pour un sous-domaine.
Interface du gestionnaire de synchronisation des variables.
Interface d'un service de synchronisation de variable.
Interface d'une variable.
Definition IVariable.h:54
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Collection de variables.
Calcule de la liste des entités à synchroniser.
Interface d'un service de synchronisation de variable.
IParallelMng * parallelMng() override
Gestionnaire parallèle associé
EventObservable< const VariableSynchronizerEventArgs & > & onSynchronized() override
Evènement envoyé en début et fin de synchronisation.
const ItemGroup & itemGroup() override
Groupe d'entité servant à la synchronisation.
Vue constante d'un tableau de type T.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-