Arcane  v3.16.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;
41
42/*---------------------------------------------------------------------------*/
43/*---------------------------------------------------------------------------*/
52class ARCANE_IMPL_EXPORT VariableSynchronizer
53: public TraceAccessor
55{
56 friend class VariableSynchronizerComputeList;
57 class SyncMessage;
58
59 public:
60
61 VariableSynchronizer(IParallelMng* pm, const ItemGroup& group,
62 Ref<IDataSynchronizeImplementationFactory> implementation_factory);
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.
Informations sur le résultat d'une synchronisation.
Classe de base d'un handler d'évènement.
Definition Event.h:193
Interface d'une donnée.
Definition IData.h:33
Interface pour un 'IData' d'un type numérique.
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:56
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Référence à une instance.
Gestion d'un timer.
Definition Timer.h:62
TraceAccessor(ITraceMng *m)
Construit un accesseur via le gestionnaire de trace m.
Collection de variables.
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.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:569
std::int32_t Int32
Type entier signé sur 32 bits.