Arcane  v3.16.8.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-2025 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-2025 */
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
19
22#include "arcane/core/VariableCollection.h"
23
24#include <array>
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29namespace Arcane
30{
32
43
44/*---------------------------------------------------------------------------*/
45/*---------------------------------------------------------------------------*/
50{
51 public:
52
53 eDataSynchronizeCompareStatus compareStatus() const { return m_compare_status; }
54 void setCompareStatus(eDataSynchronizeCompareStatus v) { m_compare_status = v; }
55
56 private:
57
59};
60
61/*---------------------------------------------------------------------------*/
62/*---------------------------------------------------------------------------*/
71class ARCANE_IMPL_EXPORT VariableSyncInfo
72{
73 public:
74
75 VariableSyncInfo(Int32ConstArrayView share_ids, Int32ConstArrayView ghost_ids, Int32 rank);
76 VariableSyncInfo(const VariableSyncInfo& rhs);
77 VariableSyncInfo();
78
79 public:
80
82 Int32 targetRank() const { return m_target_rank; }
83
88
90 Int32 nbShare() const { return m_share_ids.size(); }
92 Int32 nbGhost() const { return m_ghost_ids.size(); }
93
95 void changeLocalIds(Int32ConstArrayView old_to_new_ids);
96
97 private:
98
104 Int32 m_target_rank = A_NULL_RANK;
105
106 private:
107
108 void _changeIds(Array<Int32>& ids, Int32ConstArrayView old_to_new_ids);
109};
110
111/*---------------------------------------------------------------------------*/
112/*---------------------------------------------------------------------------*/
116class DataSynchronizeBufferInfoList
117{
118 friend DataSynchronizeInfo;
119
120 private:
121
122 DataSynchronizeBufferInfoList(const DataSynchronizeInfo* sync_info, bool is_share)
123 : m_sync_info(sync_info)
124 , m_is_share(is_share)
125 {
126 }
127
128 public:
129
130 Int32 nbRank() const { return m_displacements_base.size(); }
132 Int64 totalNbItem() const { return m_total_nb_item; }
134 Int64 bufferDisplacement(Int32 index) const { return m_displacements_base[index]; }
138 Int32 nbItem(Int32 index) const;
139
140 private:
141
148 Int64 m_total_nb_item = 0;
149 const DataSynchronizeInfo* m_sync_info = nullptr;
151 bool m_is_share = false;
152};
153
154/*---------------------------------------------------------------------------*/
155/*---------------------------------------------------------------------------*/
167class ARCANE_IMPL_EXPORT DataSynchronizeInfo
168: private ReferenceCounterImpl
169{
170 friend class DataSynchronizeBufferInfoList;
171
172 private:
173
174 static constexpr int SEND = 0;
175 static constexpr int RECEIVE = 1;
176
177 private:
178
179 DataSynchronizeInfo() = default;
180
181 public:
182
183 DataSynchronizeInfo(const DataSynchronizeInfo&) = delete;
184 DataSynchronizeInfo operator=(const DataSynchronizeInfo&) = delete;
185 DataSynchronizeInfo(DataSynchronizeInfo&&) = delete;
186 DataSynchronizeInfo operator=(DataSynchronizeInfo&&) = delete;
187
188 public:
189
190 static Ref<DataSynchronizeInfo> create()
191 {
192 return makeRef(new DataSynchronizeInfo());
193 }
194
195 public:
196
197 void clear() { m_ranks_info.clear(); m_communicating_ranks.clear(); }
198 Int32 size() const { return m_ranks_info.size(); }
199 void add(const VariableSyncInfo& s);
200
202 const DataSynchronizeBufferInfoList& sendInfo() const { return m_buffer_infos[SEND]; }
204 const DataSynchronizeBufferInfoList& receiveInfo() const { return m_buffer_infos[RECEIVE]; }
205
207 Int32 targetRank(Int32 index) const { return m_ranks_info[index].targetRank(); }
208
210 ConstArrayView<Int32> communicatingRanks() const { return m_communicating_ranks; }
211
213 void changeLocalIds(ConstArrayView<Int32> old_to_new_ids);
214
216 void recompute();
217
218 public:
219
220 void addReference() { ReferenceCounterImpl::addReference(); }
221 void removeReference() { ReferenceCounterImpl::removeReference(); }
222
223 public:
224
225 ARCANE_DEPRECATED_REASON("Y2023: do not use")
226 ConstArrayView<VariableSyncInfo> infos() const { return m_ranks_info; }
227
228 ARCANE_DEPRECATED_REASON("Y2023: do not use")
229 ArrayView<VariableSyncInfo> infos() { return m_ranks_info; }
230
231 ARCANE_DEPRECATED_REASON("Y2023: do not use")
232 VariableSyncInfo& operator[](Int32 i) { return m_ranks_info[i]; }
233 ARCANE_DEPRECATED_REASON("Y2023: do not use")
234 const VariableSyncInfo& operator[](Int32 i) const { return m_ranks_info[i]; }
235
236 ARCANE_DEPRECATED_REASON("Y2023: do not use")
237 VariableSyncInfo& rankInfo(Int32 i) { return m_ranks_info[i]; }
238 ARCANE_DEPRECATED_REASON("Y2023: do not use")
239 const VariableSyncInfo& rankInfo(Int32 i) const { return m_ranks_info[i]; }
240
241 private:
242
243 UniqueArray<Int32> m_communicating_ranks;
244 UniqueArray<VariableSyncInfo> m_ranks_info;
245 std::array<DataSynchronizeBufferInfoList, 2> m_buffer_infos = { { { this, true }, { this, false } } };
246
247 private:
248
249 DataSynchronizeBufferInfoList& _sendInfo() { return m_buffer_infos[SEND]; }
250 DataSynchronizeBufferInfoList& _receiveInfo() { return m_buffer_infos[RECEIVE]; }
251};
252
253/*---------------------------------------------------------------------------*/
254/*---------------------------------------------------------------------------*/
255
256} // namespace Arcane
257
258/*---------------------------------------------------------------------------*/
259/*---------------------------------------------------------------------------*/
260
261#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.
Tableau d'items de types quelconques.
Vue constante d'un tableau de type T.
bool m_is_share
Si vrai, il s'agit du buffer d'envoi, sinon de réception.
ConstArrayView< Int32 > localIds(Int32 index) const
Numéros locaux des entités pour le rang index.
Int64 totalNbItem() const
Nombre total d'éléments.
UniqueArray< Int64 > m_displacements_base
Offsets dans le buffer global pour chaque rang.
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)
ConstArrayView< Int32 > communicatingRanks() const
Rangs de toutes les cibles.
const DataSynchronizeBufferInfoList & sendInfo() const
Informations d'envoi (partagées)
Informations sur le résultat d'une synchronisation.
Référence à une instance.
Implémentation thread-safe d'un compteur de référence.
Vecteur 1D de données avec sémantique par valeur (style STL).
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()
Int32 m_target_rank
Rang du processeur cible.
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
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::int64_t Int64
Type entier signé sur 64 bits.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:569
@ Same
Compare avec une référence.
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.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Créé une référence sur un pointeur.
std::int32_t Int32
Type entier signé sur 32 bits.