Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
DataSynchronizeBuffer.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/* DataSynchronizeBuffer.h (C) 2000-2023 */
9/* */
10/* Implémentation d'un buffer générique pour la synchronisation de donnéess. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13#ifndef ARCANE_IMPL_DATASYNCHRONIZEBUFFER_H
14#define ARCANE_IMPL_DATASYNCHRONIZEBUFFER_H
15/*---------------------------------------------------------------------------*/
16/*---------------------------------------------------------------------------*/
17
18#include "arcane/utils/MemoryView.h"
19#include "arcane/utils/Array.h"
20#include "arcane/utils/SmallArray.h"
21#include "arcane/utils/TraceAccessor.h"
22
23#include "arcane/impl/IDataSynchronizeBuffer.h"
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27namespace Arcane
28{
29class IBufferCopier;
30class DataSynchronizeResult;
31class DataSynchronizeInfo;
32class DataSynchronizeBufferInfoList;
33class MemoryBuffer;
34
35/*---------------------------------------------------------------------------*/
36/*---------------------------------------------------------------------------*/
41class ARCANE_IMPL_EXPORT DataSynchronizeBufferBase
43{
45 {
47
48 public:
49
51 MutableMemoryView globalBuffer() { return m_memory_view; }
52
54 MutableMemoryView localBuffer(Int32 index);
55
57 Int64 displacement(Int32 index) const;
58
60 Int64 totalSize() const { return m_memory_view.bytes().size(); }
61
63 ConstArrayView<Int32> localIds(Int32 index) const;
64
65 void checkValid() const
66 {
67 ARCANE_CHECK_POINTER(m_buffer_info);
68 }
69
70 private:
71
72 MutableMemoryView m_memory_view;
73 Int32 m_datatype_size = 0;
74 const DataSynchronizeBufferInfoList* m_buffer_info = nullptr;
75 };
76
77 public:
78
79 Int32 nbRank() const final { return m_nb_rank; }
80 Int32 targetRank(Int32 index) const final;
81 bool hasGlobalBuffer() const final { return true; }
82
83 MutableMemoryView receiveBuffer(Int32 index) final { return m_ghost_buffer_info.localBuffer(index); }
84 MutableMemoryView sendBuffer(Int32 index) final { return m_share_buffer_info.localBuffer(index); }
85
86 Int64 receiveDisplacement(Int32 index) const final { return m_ghost_buffer_info.displacement(index); }
87 Int64 sendDisplacement(Int32 index) const final { return m_share_buffer_info.displacement(index); }
88
89 MutableMemoryView globalReceiveBuffer() final { return m_ghost_buffer_info.globalBuffer(); }
90 MutableMemoryView globalSendBuffer() final { return m_share_buffer_info.globalBuffer(); }
91
92 Int64 totalReceiveSize() const final { return m_ghost_buffer_info.totalSize(); }
93 Int64 totalSendSize() const final { return m_share_buffer_info.totalSize(); }
94
95 void barrier() final;
96
97 public:
98
100
101 public:
102
104 bool isCompareSynchronizedValues() const { return m_is_compare_sync_values; }
105
106 void setSynchronizeBuffer(Ref<MemoryBuffer> v)
107 {
108 m_memory = v;
109 }
110
122 virtual void prepareSynchronize(Int32 datatype_size, bool is_compare_sync) = 0;
123
124 protected:
125
126 void _allocateBuffers(Int32 datatype_size);
128 void _compute(Int32 datatype_size);
129
130 protected:
131
132 DataSynchronizeInfo* m_sync_info = nullptr;
139
140 protected:
141
142 Int32 m_nb_rank = 0;
143 bool m_is_compare_sync_values = false;
144
147
148 Ref<IBufferCopier> m_buffer_copier;
149};
150
151/*---------------------------------------------------------------------------*/
152/*---------------------------------------------------------------------------*/
156class ARCANE_IMPL_EXPORT SingleDataSynchronizeBuffer
158{
159 public:
160
163 {}
164
165 public:
166
167 void copyReceiveAsync(Int32 index) final;
168 void copySendAsync(Int32 index) final;
169
170 public:
171
172 void setDataView(MutableMemoryView v) { m_data_view = v; }
174 MutableMemoryView dataView() { return m_data_view; }
175 void prepareSynchronize(Int32 datatype_size, bool is_compare_sync) override;
176
180 DataSynchronizeResult finalizeSynchronize();
181
182 private:
183
186};
187
188/*---------------------------------------------------------------------------*/
189/*---------------------------------------------------------------------------*/
193class ARCANE_IMPL_EXPORT MultiDataSynchronizeBuffer
194: public TraceAccessor
196{
197
198 public:
199
204 {}
205
206 public:
207
208 void copyReceiveAsync(Int32 index) final;
209 void copySendAsync(Int32 index) final;
210
211 public:
212
213 void setNbData(Int32 nb_data)
214 {
215 m_data_views.resize(nb_data);
216 }
217 void setDataView(Int32 index, MutableMemoryView v) { m_data_views[index] = v; }
218
219 void prepareSynchronize(Int32 datatype_size, bool is_compare_sync) override;
220
221 private:
222
225};
226
227/*---------------------------------------------------------------------------*/
228/*---------------------------------------------------------------------------*/
229
230} // namespace Arcane
231
232/*---------------------------------------------------------------------------*/
233/*---------------------------------------------------------------------------*/
234
235#endif
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
Int64 totalSize() const
Taille totale en octet du buffer global.
MutableMemoryView globalBuffer()
Buffer global.
Classe de base de l'implémentation de IDataSynchronizeBuffer.
Int64 receiveDisplacement(Int32 index) const final
Déplacement (en octets) depuis le début de receiveBuffer() pour le index-ème rang.
virtual void prepareSynchronize(Int32 datatype_size, bool is_compare_sync)=0
Prépare la synchronisation.
BufferInfo m_compare_sync_buffer_info
Buffer pour tester si la synchronisation a modifié les valeurs des mailles fantômes.
Int32 nbRank() const final
Nombre de rangs.
Int64 sendDisplacement(Int32 index) const final
Déplacement (en octets) depuis le début de sendBuffer() pour le index-ème rang.
BufferInfo m_share_buffer_info
Buffer pour toutes les données des entités partagées qui serviront en envoi.
MutableMemoryView globalReceiveBuffer() final
Buffer de réception.
Int64 totalSendSize() const final
Taille totale à envoyer en octet.
MutableMemoryView globalSendBuffer() final
Buffer d'envoi.
MutableMemoryView receiveBuffer(Int32 index) final
Buffer de réception pour le index-ème rang.
Int64 totalReceiveSize() const final
Taille totale à recevoir en octet.
BufferInfo m_ghost_buffer_info
Buffer pour toutes les données des entités fantômes qui serviront en réception.
Ref< MemoryBuffer > m_memory
Buffer contenant les données concaténées en envoi et réception.
MutableMemoryView sendBuffer(Int32 index) final
Buffer d'envoi pour le index-ème rang.
bool hasGlobalBuffer() const final
Indique si les buffers sont globaux.
Informations pour les message d'envoi (share) ou de réception (ghost)
Informations nécessaires pour synchroniser les entités sur un groupe.
Informations sur le résultat d'une synchronisation.
Interface pour copier des éléments entre deux zones avec indexation.
Buffer générique pour la synchronisation de données.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Implémentation de IDataSynchronizeBuffer pour plusieurs données.
SmallArray< MutableMemoryView > m_data_views
Vue sur les données de la variable.
Implémentation de IDataSynchronizeBuffer pour une donnée.
MutableMemoryView m_data_view
Vue sur les données de la variable.
MutableMemoryView dataView()
Zone mémoire contenant les valeurs de la donnée à synchroniser.
Interface du gestionnaire de traces.
Référence à une instance.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Represents an in-memory output byte stream.