Arcane  v4.1.8.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
GatherGroup.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/* GatherGroup.h (C) 2000-2026 */
9/* */
10/* Classe permettant de gérer les regroupements de données sur le ou les */
11/* sous-domaines écrivains. */
12/*---------------------------------------------------------------------------*/
13/*---------------------------------------------------------------------------*/
14
15#ifndef ARCANE_CORE_INTERNAL_GATHERGROUP_H
16#define ARCANE_CORE_INTERNAL_GATHERGROUP_H
17
18/*---------------------------------------------------------------------------*/
19/*---------------------------------------------------------------------------*/
20
21#include "arcane/core/internal/IGatherGroup.h"
22
23#include "arcane/utils/Array.h"
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane
29{
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33
34class GatherGroupInfo;
35
36/*---------------------------------------------------------------------------*/
37/*---------------------------------------------------------------------------*/
38
46class ARCANE_CORE_EXPORT GatherGroup
47: public IGatherGroup
48{
49
50 public:
51
57 explicit GatherGroup(GatherGroupInfo* gather_group_info);
58
65
66 ~GatherGroup() override;
67
68 public:
69
70 bool isNeedGather() override;
71 void gatherToMasterIO(Int64 sizeof_elem, Span<const Byte> in, Span<Byte> out) override;
72
73 public:
74
81 void setGatherGroupInfo(GatherGroupInfo* gather_group_info);
82
94 template <class T>
96
108 template <class T>
110
111 private:
112
113 GatherGroupInfo* m_gather_group_info = nullptr;
114};
115
116/*---------------------------------------------------------------------------*/
117/*---------------------------------------------------------------------------*/
118
126class ARCANE_CORE_EXPORT GatherGroupInfo
127: public IGatherGroupInfo
128{
129 friend class GatherGroup;
130
131 public:
132
141 GatherGroupInfo(IParallelMng* parallel_mng, bool use_collective_io);
142
143 ~GatherGroupInfo() override;
144
145 public:
146
147 void computeSize(Int32 nb_elem_in) override;
148 void setNeedRecompute() override { m_is_computed = false; }
149 bool isComputed() override { return m_is_computed; }
150 Int32 nbElemOutput() override { return m_nb_elem_output; }
151 Int32 sizeOfOutput(Int32 sizeof_type) override { return m_nb_elem_output * sizeof_type; }
152 SmallSpan<Int32> nbElemRecvGatherToMasterIO() override;
153 Int32 nbWriterGlobal() override { return m_nb_writer_global; }
154
155 public:
156
157 void setCollectiveIO(bool enable) { m_use_collective_io = enable; }
158
169 template <class T>
170 void computeSizeT(Span<const T> in);
171
182 template <class T>
183 void computeSizeT(Span2<const T> in);
184
185 private:
186
187 IParallelMng* m_parallel_mng = nullptr;
188 bool m_use_collective_io = false;
189 UniqueArray<Int32> m_nb_elem_recv;
190 Int32 m_nb_elem_output = -1;
191 Int32 m_writer = -1;
192 Int32 m_nb_sender_to_writer = -1;
193 Int32 m_nb_writer_global = -1;
194 bool m_is_computed = false;
195};
196
197/*---------------------------------------------------------------------------*/
198/*---------------------------------------------------------------------------*/
199
200/*---------------------------------------------------------------------------*/
201/*---------------------------------------------------------------------------*/
202
203template <class T>
206{
207 out.clear();
208
209 Span<const Byte> in_b(reinterpret_cast<const Byte*>(in.data()), in.sizeBytes());
210
211 Int32 final_nb_elem = m_gather_group_info->m_nb_elem_output;
212 out.resizeNoInit(final_nb_elem);
213
214 Span<Byte> out_b(reinterpret_cast<Byte*>(out.data()), final_nb_elem * sizeof(T));
215
216 gatherToMasterIO(sizeof(T), in_b, out_b);
217}
218
219/*---------------------------------------------------------------------------*/
220/*---------------------------------------------------------------------------*/
221
222template <class T>
225{
226 out.clear();
227
228 Span<const Byte> in_b(reinterpret_cast<const Byte*>(in.data()), in.totalNbElement() * sizeof(T));
229
230 Int32 final_nb_elem = m_gather_group_info->m_nb_elem_output;
231 out.resizeNoInit(final_nb_elem, in.dim2Size());
232
233 Span<Byte> out_b(reinterpret_cast<Byte*>(out.span().data()), final_nb_elem * in.dim2Size() * sizeof(T));
234
235 gatherToMasterIO(in.dim2Size() * sizeof(T), in_b, out_b);
236}
237
238/*---------------------------------------------------------------------------*/
239/*---------------------------------------------------------------------------*/
240
241/*---------------------------------------------------------------------------*/
242/*---------------------------------------------------------------------------*/
243
244template <class T>
250
251/*---------------------------------------------------------------------------*/
252/*---------------------------------------------------------------------------*/
253
254template <class T>
260
261/*---------------------------------------------------------------------------*/
262/*---------------------------------------------------------------------------*/
263
264} // End namespace Arcane
265
266/*---------------------------------------------------------------------------*/
267/*---------------------------------------------------------------------------*/
268
269#endif
Tableau 2D d'items de types quelconques.
void resizeNoInit(Int64 new_size)
Redimensionne uniquement la première dimension en laissant la deuxième à l'identique.
Tableau d'items de types quelconques.
void clear()
Supprime les éléments du tableau.
void resizeNoInit(Int64 s)
Redimensionne sans initialiser les nouvelles valeurs.
const T * data() const
Accès à la racine du tableau hors toute protection.
Classe permettant de calculer et de conserver les informations de regroupements.
Int32 sizeOfOutput(Int32 sizeof_type) override
Méthode permettant de connaitre la taille, en octet, de l'ensemble des éléments que notre sous-domain...
void computeSizeT(Span< const T > in)
Méthode permettant de calculer les informations de regroupements.
void setNeedRecompute() override
Méthode permettant de demander un recalcul des informations de regroupements. Pour cela,...
void computeSize(Int32 nb_elem_in) override
Méthode permettant de calculer les informations de regroupements.
GatherGroupInfo(IParallelMng *parallel_mng, bool use_collective_io)
Constructeur.
Int32 nbWriterGlobal() override
Méthode pemettant de connaitre le nombre de sous-domaines écrivains.
Int32 nbElemOutput() override
Méthode permettant de connaitre le nombre d'éléments que notre sous-domaine devra traiter après récep...
bool isComputed() override
Méthode permettant de savoir si la méthode computeSize() a déjà été appelée.
GatherGroup()
Constructeur. Pour que l'objet soit utilisable, il est nécessaire d'appeler setGatherGroupInfo().
bool isNeedGather() override
Méthode permettant de savoir si l'on doit effectuer le regroupement ou si l'on peut directement écrir...
void gatherToMasterIOT(Span< const T > in, Array< T > &out)
Méthode permettant de regrouper les données de plusieurs sous-domaines sur un ou plusieurs sous-domai...
void gatherToMasterIO(Int64 sizeof_elem, Span< const Byte > in, Span< Byte > out) override
Méthode permettant de regrouper les données de plusieurs sous-domaines sur un ou plusieurs sous-domai...
void setGatherGroupInfo(GatherGroupInfo *gather_group_info)
Méthode permettant de définir les informations de regroupement.
GatherGroup(GatherGroupInfo *gather_group_info)
Constructeur.
Interface de classe permettant de calculer et de conserver les informations de regroupements.
Interface de classe permettant de regrouper les données de certains sous-domaines sur d'autres sous-d...
Interface du gestionnaire de parallélisme pour un sous-domaine.
Vue d'un tableau d'éléments de type T.
Definition Span.h:801
constexpr __host__ __device__ ElementType * data()
Pointeur sur la mémoire allouée.
Definition Span2.h:181
constexpr __host__ __device__ SizeType dim2Size() const
Nombre d'éléments de la deuxième dimension.
Definition Span2.h:107
constexpr __host__ __device__ SizeType totalNbElement() const
Nombre total d'éléments.
Definition Span2.h:109
constexpr __host__ __device__ SizeType dim1Size() const
Nombre d'éléments de la première dimension.
Definition Span2.h:105
Vue pour un tableau 2D dont la taille est un 'Int64'.
Definition Span2.h:301
constexpr __host__ __device__ pointer data() const noexcept
Pointeur sur le début de la vue.
Definition Span.h:537
constexpr __host__ __device__ SizeType size() const noexcept
Retourne la taille du tableau.
Definition Span.h:325
constexpr __host__ __device__ SizeType sizeBytes() const noexcept
Retourne la taille du tableau en octets.
Definition Span.h:327
Vue d'un tableau d'éléments de type T.
Definition Span.h:633
constexpr __host__ __device__ ElementType * data()
Pointeur sur la mémoire allouée.
Definition Span2.h:181
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::int64_t Int64
Type entier signé sur 64 bits.
unsigned char Byte
Type d'un octet.
Definition BaseTypes.h:43
std::int32_t Int32
Type entier signé sur 32 bits.