Arcane  v3.15.0.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/accelerator/core/Runner.h"
30
31#include "arcane/impl/internal/IDataSynchronizeDispatcher.h"
32
33/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
35
36namespace Arcane
37{
38class Timer;
39class INumericDataInternal;
40class DataSynchronizeResult;
41
42/*---------------------------------------------------------------------------*/
43/*---------------------------------------------------------------------------*/
52class ARCANE_IMPL_EXPORT VariableSynchronizer
53: public TraceAccessor
55{
57 class SyncMessage;
58
59 public:
60
63 ~VariableSynchronizer() override;
64
65 public:
66
68 {
69 return m_parallel_mng;
70 }
71
72 const ItemGroup& itemGroup() override { return m_item_group; }
73
74 void compute() override;
75
76 void changeLocalIds(Int32ConstArrayView old_to_new_ids) override;
77
78 void synchronize(IVariable* var) override;
79
80 void synchronize(IVariable* var, Int32ConstArrayView local_ids) override;
81
82 void synchronize(VariableCollection vars) override;
83
84 void synchronize(VariableCollection vars, Int32ConstArrayView local_ids) override;
85
86 Int32ConstArrayView communicatingRanks() override;
87
88 Int32ConstArrayView sharedItems(Int32 index) override;
89
90 Int32ConstArrayView ghostItems(Int32 index) override;
91
92 void synchronizeData(IData* data) override;
93
95 {
96 return m_on_synchronized;
97 }
98
99 public:
100
101 IVariableSynchronizerMng* synchronizeMng() const { return m_variable_synchronizer_mng; }
102
103 private:
104
105 IParallelMng* m_parallel_mng = nullptr;
106 ItemGroup m_item_group;
107 Ref<DataSynchronizeInfo> m_sync_info;
108 Timer* m_sync_timer = nullptr;
109 bool m_is_verbose = false;
110 bool m_allow_multi_sync = true;
111 bool m_trace_sync = false;
112 EventObservable<const VariableSynchronizerEventArgs&> m_on_synchronized;
113 Ref<IDataSynchronizeImplementationFactory> m_implementation_factory;
114 IVariableSynchronizerMng* m_variable_synchronizer_mng = nullptr;
115 SyncMessage* m_default_message = nullptr;
116 Runner m_runner;
117 // Pour les synchronisations sur un sous-ensemble des entités
118 Ref<DataSynchronizeInfo> m_partial_sync_info;
119 Ref<SyncMessage> m_partial_message;
120 UniqueArray<Int32> m_partial_local_ids;
121 bool m_is_check_coherence = false;
122
123 private:
124
125 void _synchronize(IVariable* var, SyncMessage* message);
126 void _synchronizeMulti(const VariableCollection& vars, SyncMessage* message);
127 bool _canSynchronizeMulti(const VariableCollection& vars);
128 DataSynchronizeResult _synchronize(INumericDataInternal* data, bool is_compare_sync);
129 SyncMessage* _buildMessage();
130 SyncMessage* _buildMessage(Ref<DataSynchronizeInfo>& sync_info);
131 void _rebuildMessage(Int32ConstArrayView local_ids);
132 void _sendBeginEvent(VariableSynchronizerEventArgs& args);
133 void _sendEndEvent(VariableSynchronizerEventArgs& args);
134 void _sendEvent(VariableSynchronizerEventArgs& args);
135 void _checkCreateTimer();
136 void _doSynchronize(SyncMessage* message);
137 void _setCurrentDevice();
138};
139
140/*---------------------------------------------------------------------------*/
141/*---------------------------------------------------------------------------*/
142
143} // End namespace Arcane
144
145/*---------------------------------------------------------------------------*/
146/*---------------------------------------------------------------------------*/
147
148#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:149
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 -*-