Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
DataSynchronizeInfo.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/* DataSynchronizeInfo.h (C) 2000-2024 */
9/* */
10/* Informations pour synchroniser les données. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13#ifndef ARCANE_IMPL_DATASYNCHRONIZERINFO_H
14#define ARCANE_IMPL_DATASYNCHRONIZERINFO_H
15/*---------------------------------------------------------------------------*/
16/*---------------------------------------------------------------------------*/
17
18#include "arcane/utils/UniqueArray.h"
19#include "arcane/utils/Ref.h"
21
24#include "arcane/core/VariableCollection.h"
25
26#include "arcane/impl/IDataSynchronizeImplementation.h"
27
28#include <array>
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32
33namespace Arcane
34{
35
38{
40 Unknown,
42 Same,
45};
46
47/*---------------------------------------------------------------------------*/
48/*---------------------------------------------------------------------------*/
53{
54 public:
55 public:
56
57 eDataSynchronizeCompareStatus compareStatus() const { return m_compare_status; }
58 void setCompareStatus(eDataSynchronizeCompareStatus v) { m_compare_status = v; }
59
60 private:
61
63};
64
65/*---------------------------------------------------------------------------*/
66/*---------------------------------------------------------------------------*/
75class ARCANE_IMPL_EXPORT VariableSyncInfo
76{
77 public:
78
82
83 public:
84
86 Int32 targetRank() const { return m_target_rank; }
87
89 ConstArrayView<Int32> shareIds() const { return m_share_ids; }
91 ConstArrayView<Int32> ghostIds() const { return m_ghost_ids; }
92
94 Int32 nbShare() const { return m_share_ids.size(); }
96 Int32 nbGhost() const { return m_ghost_ids.size(); }
97
99 void changeLocalIds(Int32ConstArrayView old_to_new_ids);
100
101 private:
102
108 Int32 m_target_rank = A_NULL_RANK;
109
110 private:
111
112 void _changeIds(Array<Int32>& ids, Int32ConstArrayView old_to_new_ids);
113};
114
115/*---------------------------------------------------------------------------*/
116/*---------------------------------------------------------------------------*/
121{
122 friend class DataSynchronizeInfo;
123
124 private:
125
127 : m_sync_info(sync_info)
128 , m_is_share(is_share)
129 {
130 }
131
132 public:
133
134 Int32 nbRank() const { return m_displacements_base.size(); }
136 Int64 totalNbItem() const { return m_total_nb_item; }
138 Int64 bufferDisplacement(Int32 index) const { return m_displacements_base[index]; }
140 ConstArrayView<Int32> localIds(Int32 index) const;
142 Int32 nbItem(Int32 index) const;
143
144 private:
145
146 UniqueArray<Int64> m_displacements_base;
147 Int64 m_total_nb_item = 0;
148 const DataSynchronizeInfo* m_sync_info = nullptr;
149 bool m_is_share = false;
150};
151
152/*---------------------------------------------------------------------------*/
153/*---------------------------------------------------------------------------*/
165class ARCANE_IMPL_EXPORT DataSynchronizeInfo
166: private ReferenceCounterImpl
167{
169
170 private:
171
172 static constexpr int SEND = 0;
173 static constexpr int RECEIVE = 1;
174
175 private:
176
177 DataSynchronizeInfo() = default;
178
179 public:
180
182 DataSynchronizeInfo operator=(const DataSynchronizeInfo&) = delete;
184 DataSynchronizeInfo operator=(DataSynchronizeInfo&&) = delete;
185
186 public:
187
188 static Ref<DataSynchronizeInfo> create()
189 {
190 return makeRef(new DataSynchronizeInfo());
191 }
192
193 public:
194
195 void clear() { m_ranks_info.clear(); m_communicating_ranks.clear(); }
196 Int32 size() const { return m_ranks_info.size(); }
197 void add(const VariableSyncInfo& s);
198
200 const DataSynchronizeBufferInfoList& sendInfo() const { return m_buffer_infos[SEND]; }
202 const DataSynchronizeBufferInfoList& receiveInfo() const { return m_buffer_infos[RECEIVE]; }
203
205 Int32 targetRank(Int32 index) const { return m_ranks_info[index].targetRank(); }
206
208 Int32ConstArrayView communicatingRanks() const { return m_communicating_ranks; }
209
211 void changeLocalIds(Int32ConstArrayView old_to_new_ids);
212
214 void recompute();
215
216 public:
217
218 void addReference() { ReferenceCounterImpl::addReference(); }
219 void removeReference() { ReferenceCounterImpl::removeReference(); }
220
221 public:
222
223 ARCANE_DEPRECATED_REASON("Y2023: do not use")
224 ConstArrayView<VariableSyncInfo> infos() const { return m_ranks_info; }
225
226 ARCANE_DEPRECATED_REASON("Y2023: do not use")
227 ArrayView<VariableSyncInfo> infos() { return m_ranks_info; }
228
229 ARCANE_DEPRECATED_REASON("Y2023: do not use")
230 VariableSyncInfo& operator[](Int32 i) { return m_ranks_info[i]; }
231 ARCANE_DEPRECATED_REASON("Y2023: do not use")
232 const VariableSyncInfo& operator[](Int32 i) const { return m_ranks_info[i]; }
233
234 ARCANE_DEPRECATED_REASON("Y2023: do not use")
235 VariableSyncInfo& rankInfo(Int32 i) { return m_ranks_info[i]; }
236 ARCANE_DEPRECATED_REASON("Y2023: do not use")
237 const VariableSyncInfo& rankInfo(Int32 i) const { return m_ranks_info[i]; }
238
239 private:
240
241 UniqueArray<Int32> m_communicating_ranks;
242 UniqueArray<VariableSyncInfo> m_ranks_info;
243 std::array<DataSynchronizeBufferInfoList, 2> m_buffer_infos = { { { this, true }, { this, false } } };
244
245 private:
246
247 DataSynchronizeBufferInfoList& _sendInfo() { return m_buffer_infos[SEND]; }
248 DataSynchronizeBufferInfoList& _receiveInfo() { return m_buffer_infos[RECEIVE]; }
249};
250
251/*---------------------------------------------------------------------------*/
252/*---------------------------------------------------------------------------*/
253
254} // namespace Arcane
255
256/*---------------------------------------------------------------------------*/
257/*---------------------------------------------------------------------------*/
258
259#endif
Déclarations des types généraux de Arcane.
Fichier contenant les déclarations concernant le modèle de programmation par échange de message.
Informations pour les message d'envoi (share) ou de réception (ghost)
ConstArrayView< Int32 > localIds(Int32 index) const
Numéros locaux des entités pour le rang index.
Int64 totalNbItem() const
Nombre total d'éléments.
Int32 nbItem(Int32 index) const
Nombre d'entités pour le rang index.
Int64 bufferDisplacement(Int32 index) const
Déplacement dans le buffer du rang index.
Informations nécessaires pour synchroniser les entités sur un groupe.
Int32 targetRank(Int32 index) const
Rang de la index-ème cible.
const DataSynchronizeBufferInfoList & receiveInfo() const
Informations de réception (fantômes)
Int32ConstArrayView communicatingRanks() const
Rangs de toutes les cibles.
const DataSynchronizeBufferInfoList & sendInfo() const
Informations d'envoi (partagées)
Informations sur le résultat d'une synchronisation.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Informations sur la liste des entités partagées/fantômes pour un rang donné pour une synchronisation.
ConstArrayView< Int32 > ghostIds() const
localIds() des entités à réceptionner du rang targetRank()
ConstArrayView< Int32 > shareIds() const
localIds() des entités à envoyer au rang targetRank()
UniqueArray< Int32 > m_share_ids
localIds() des entités à envoyer au processeur #m_rank
Int32 nbGhost() const
Nombre d'entités fantômes.
Int32 targetRank() const
Rang du processeur cible.
Int32 nbShare() const
Nombre d'entités partagées.
UniqueArray< Int32 > m_ghost_ids
localIds() des entités à réceptionner du processeur #m_rank
Integer size() const
Nombre d'éléments du vecteur.
Vue constante d'un tableau de type T.
Implémentation thread-safe d'un compteur de référence.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eDataSynchronizeCompareStatus
Comparaison des valeurs des entités fantômes avant/après une synchronisation.
@ Different
Valeurs différentes avant et après la synchronisation.
@ Unknown
Pas de comparaison ou résultat inconnue.
@ Same
Même valeurs avant et après la synchronisation.