Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
DataSynchronizeInfo.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* Information for synchronizing data. */
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/*---------------------------------------------------------------------------*/
46
51{
52 public:
53
54 eDataSynchronizeCompareStatus compareStatus() const { return m_compare_status; }
55 void setCompareStatus(eDataSynchronizeCompareStatus v) { m_compare_status = v; }
56
57 private:
58
60};
61
62/*---------------------------------------------------------------------------*/
63/*---------------------------------------------------------------------------*/
64
73class ARCANE_IMPL_EXPORT VariableSyncInfo
74{
75 public:
76
77 VariableSyncInfo(Int32ConstArrayView share_ids, Int32ConstArrayView ghost_ids, Int32 rank);
78 VariableSyncInfo(const VariableSyncInfo& rhs);
79 VariableSyncInfo();
80
81 public:
82
84 Int32 targetRank() const { return m_target_rank; }
85
90
92 Int32 nbShare() const { return m_share_ids.size(); }
94 Int32 nbGhost() const { return m_ghost_ids.size(); }
95
97 void changeLocalIds(Int32ConstArrayView old_to_new_ids);
98
99 private:
100
106 Int32 m_target_rank = A_NULL_RANK;
107
108 private:
109
110 void _changeIds(Array<Int32>& ids, Int32ConstArrayView old_to_new_ids);
111};
112
113/*---------------------------------------------------------------------------*/
114/*---------------------------------------------------------------------------*/
115
119class DataSynchronizeBufferInfoList
120{
121 friend DataSynchronizeInfo;
122
123 private:
124
125 DataSynchronizeBufferInfoList(const DataSynchronizeInfo* sync_info, bool is_share)
126 : m_sync_info(sync_info)
127 , m_is_share(is_share)
128 {
129 }
130
131 public:
132
133 Int32 nbRank() const { return m_displacements_base.size(); }
135 Int64 totalNbItem() const { return m_total_nb_item; }
137 Int64 bufferDisplacement(Int32 index) const { return m_displacements_base[index]; }
141 Int32 nbItem(Int32 index) const;
142
143 private:
144
151 Int64 m_total_nb_item = 0;
152 const DataSynchronizeInfo* m_sync_info = nullptr;
154 bool m_is_share = false;
155};
156
157/*---------------------------------------------------------------------------*/
158/*---------------------------------------------------------------------------*/
159
171class ARCANE_IMPL_EXPORT DataSynchronizeInfo
172: private ReferenceCounterImpl
173{
174 friend class DataSynchronizeBufferInfoList;
175
176 private:
177
178 static constexpr int SEND = 0;
179 static constexpr int RECEIVE = 1;
180
181 private:
182
183 DataSynchronizeInfo() = default;
184
185 public:
186
187 DataSynchronizeInfo(const DataSynchronizeInfo&) = delete;
188 DataSynchronizeInfo operator=(const DataSynchronizeInfo&) = delete;
189 DataSynchronizeInfo(DataSynchronizeInfo&&) = delete;
190 DataSynchronizeInfo operator=(DataSynchronizeInfo&&) = delete;
191
192 public:
193
194 static Ref<DataSynchronizeInfo> create()
195 {
196 return makeRef(new DataSynchronizeInfo());
197 }
198
199 public:
200
201 void clear()
202 {
203 m_ranks_info.clear();
204 m_communicating_ranks.clear();
205 }
206 Int32 size() const { return m_ranks_info.size(); }
207 void add(const VariableSyncInfo& s);
208
210 const DataSynchronizeBufferInfoList& sendInfo() const { return m_buffer_infos[SEND]; }
212 const DataSynchronizeBufferInfoList& receiveInfo() const { return m_buffer_infos[RECEIVE]; }
213
215 Int32 targetRank(Int32 index) const { return m_ranks_info[index].targetRank(); }
216
218 ConstArrayView<Int32> communicatingRanks() const { return m_communicating_ranks; }
219
221 void changeLocalIds(ConstArrayView<Int32> old_to_new_ids);
222
224 void recompute();
225
226 public:
227
228 void addReference() { ReferenceCounterImpl::addReference(); }
229 void removeReference() { ReferenceCounterImpl::removeReference(); }
230
231 public:
232
233 ARCANE_DEPRECATED_REASON("Y2023: do not use")
234 ConstArrayView<VariableSyncInfo> infos() const { return m_ranks_info; }
235
236 ARCANE_DEPRECATED_REASON("Y2023: do not use")
237 ArrayView<VariableSyncInfo> infos() { return m_ranks_info; }
238
239 ARCANE_DEPRECATED_REASON("Y2023: do not use")
240 VariableSyncInfo& operator[](Int32 i) { return m_ranks_info[i]; }
241 ARCANE_DEPRECATED_REASON("Y2023: do not use")
242 const VariableSyncInfo& operator[](Int32 i) const { return m_ranks_info[i]; }
243
244 ARCANE_DEPRECATED_REASON("Y2023: do not use")
245 VariableSyncInfo& rankInfo(Int32 i) { return m_ranks_info[i]; }
246 ARCANE_DEPRECATED_REASON("Y2023: do not use")
247 const VariableSyncInfo& rankInfo(Int32 i) const { return m_ranks_info[i]; }
248
249 private:
250
251 UniqueArray<Int32> m_communicating_ranks;
252 UniqueArray<VariableSyncInfo> m_ranks_info;
253 std::array<DataSynchronizeBufferInfoList, 2> m_buffer_infos = { { { this, true }, { this, false } } };
254
255 private:
256
257 DataSynchronizeBufferInfoList& _sendInfo() { return m_buffer_infos[SEND]; }
258 DataSynchronizeBufferInfoList& _receiveInfo() { return m_buffer_infos[RECEIVE]; }
259};
260
261/*---------------------------------------------------------------------------*/
262/*---------------------------------------------------------------------------*/
263
264} // namespace Arcane
265
266/*---------------------------------------------------------------------------*/
267/*---------------------------------------------------------------------------*/
268
269#endif
Declarations of Arcane's general types.
File containing declarations concerning the message passing model.
Base class for 1D data vectors.
Constant view of an array of type T.
bool m_is_share
If true, it is the send buffer, otherwise it is the receive buffer.
ConstArrayView< Int32 > localIds(Int32 index) const
Local IDs of entities for rank index.
Int64 totalNbItem() const
Total number of items.
UniqueArray< Int64 > m_displacements_base
Offsets in the global buffer for each rank.
Int32 nbItem(Int32 index) const
Number of entities for rank index.
Int64 bufferDisplacement(Int32 index) const
Displacement in the buffer for rank index.
Information necessary to synchronize entities across a group.
Int32 targetRank(Int32 index) const
Rank of the index-th target.
const DataSynchronizeBufferInfoList & receiveInfo() const
Receive (ghost) information.
ConstArrayView< Int32 > communicatingRanks() const
Ranks of all targets.
const DataSynchronizeBufferInfoList & sendInfo() const
Send (shared) information.
Information about the result of a synchronization.
Reference to an instance.
Thread-safe implementation of a reference counter.
1D data vector with value semantics (STL style).
Information about the list of shared/ghost entities for a given rank for a synchronization.
ConstArrayView< Int32 > ghostIds() const
localIds() of entities to receive from rank targetRank()
ConstArrayView< Int32 > shareIds() const
localIds() of entities to send to rank targetRank()
Int32 m_target_rank
Target processor rank.
UniqueArray< Int32 > m_share_ids
localIds() of entities to send to processor m_rank
Int32 nbGhost() const
Number of ghost entities.
Int32 targetRank() const
Target processor rank.
Int32 nbShare() const
Number of shared entities.
UniqueArray< Int32 > m_ghost_ids
localIds() of entities to receive from processor m_rank
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
std::int64_t Int64
Signed integer type of 64 bits.
ConstArrayView< Int32 > Int32ConstArrayView
C equivalent of a 1D array of 32-bit integers.
Definition UtilsTypes.h:482
@ Unknown
Unknown or not initialized.
Definition MeshKind.h:32
@ Same
Compares with a reference.
eDataSynchronizeCompareStatus
Comparison of ghost entity values before/after synchronization.
@ Different
Different values before and after synchronization.
@ Unknown
No comparison or unknown result.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Creates a reference on a pointer.
std::int32_t Int32
Signed integer type of 32 bits.