Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
GatherMessageInfo.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/* GatherMessageInfo.h (C) 2000-2023 */
9/* */
10/* Informations pour les messages 'gather'. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCCORE_MESSAGEPASSING_GATHERMESSAGEINFO_H
13#define ARCCORE_MESSAGEPASSING_GATHERMESSAGEINFO_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arccore/collections/Array.h"
18#include "arccore/message_passing/MessageRank.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
24{
32class ARCCORE_MESSAGEPASSING_EXPORT GatherMessageInfoBase
33{
34 public:
35
37 enum class Mode
38 {
39 Gather,
40 GatherVariable,
41 GatherVariableNeedComputeInfo,
42 Null
43 };
44
45 public:
46
49
52 : m_destination_rank(dest_rank)
53 {}
54
57 : m_destination_rank(dest_rank)
58 , m_is_blocking(blocking_type == Blocking)
59 {}
60
61 public:
62
63 void setBlocking(bool is_blocking)
64 {
65 m_is_blocking = is_blocking;
66 }
68 bool isBlocking() const { return m_is_blocking; }
69
71 MessageRank destinationRank() const { return m_destination_rank; }
72
75 {
76 m_destination_rank = rank;
77 }
78
80 Mode mode() const { return m_mode; }
81
83 void print(std::ostream& o) const;
84
85 friend std::ostream& operator<<(std::ostream& o, const GatherMessageInfoBase& pmessage)
86 {
87 pmessage.print(o);
88 return o;
89 }
90
91 public:
92
93 // Indique si le message est valide (i.e: il a été initialisé avec un message valide)
94 bool isValid() const
95 {
96 if (m_mode == Mode::Null)
97 return false;
98 return true;
99 }
100
101 protected:
102
103 void _setType(Mode t)
104 {
105 m_mode = t;
106 }
107
108 private:
109
110 MessageRank m_destination_rank;
111 bool m_is_blocking = true;
112 Mode m_mode = Mode::Null;
113};
114
115/*---------------------------------------------------------------------------*/
116/*---------------------------------------------------------------------------*/
124template <typename DataType>
127{
128 public:
129
131
132 public:
133
135 GatherMessageInfo() = default;
136
138 explicit GatherMessageInfo(MessageRank dest_rank)
139 : BaseClass(dest_rank)
140 {}
141
144 : BaseClass(dest_rank, blocking_type)
145 {}
146
147 public:
148
157 {
158 _setType(Mode::Gather);
159 m_receive_buf = receive_buf;
160 m_send_buffer = send_buf;
161 }
162
179 {
180 _setType(Mode::GatherVariableNeedComputeInfo);
181 m_local_reception_buffer = receive_array;
182 m_send_buffer = send_buf;
183 }
184
194 Span<const Int32> receive_counts, Span<const Int32> receive_displacements)
195 {
196 _setType(Mode::GatherVariable);
197 m_receive_buf = receive_buf;
198 m_send_buffer = send_buf;
199 m_receive_displacements = receive_displacements;
200 m_receive_counts = receive_counts;
201 }
202
208 Array<DataType>* localReceptionBuffer() const { return m_local_reception_buffer; }
209
211 Span<const DataType> sendBuffer() const { return m_send_buffer; }
212
214 Span<DataType> receiveBuffer() const { return m_receive_buf; }
215
217 Span<const Int32> receiveDisplacement() { return m_receive_displacements; }
218
220 Span<const Int32> receiveCounts() const { return m_receive_counts; }
221
222 private:
223
224 Array<DataType>* m_local_reception_buffer = nullptr;
225 Span<const DataType> m_send_buffer;
226 Span<DataType> m_receive_buf;
227 Span<const Int32> m_receive_displacements;
228 Span<const Int32> m_receive_counts;
229};
230
231/*---------------------------------------------------------------------------*/
232/*---------------------------------------------------------------------------*/
233
234} // End namespace Arccore::MessagePassing
235
236/*---------------------------------------------------------------------------*/
237/*---------------------------------------------------------------------------*/
238
239#endif
Classe de base des vecteurs 1D de données.
Informations pour un message 'gather'.
MessageRank destinationRank() const
Rang de la destination du message.
bool isBlocking() const
Indique si le message est bloquant.
GatherMessageInfoBase()=default
Message pout tout le monde et bloquant.
GatherMessageInfoBase(MessageRank dest_rank, eBlockingType blocking_type)
Message ayant pour destination dest_rank et mode bloquant blocking_type.
void setDestinationRank(MessageRank rank)
Positionne le rang de la destination du message.
GatherMessageInfoBase(MessageRank dest_rank)
Message bloquant ayant pour destination rank.
void print(std::ostream &o) const
Affiche le message.
Informations pour un message 'gather' pour le type de données DataType.
void setGatherVariable(Span< const DataType > send_buf, Array< DataType > *receive_array)
Message équivalent à MPI_Gatherv ou MPI_Allgatherv.
void setGather(Span< const DataType > send_buf, Span< DataType > receive_buf)
Message équivalent à MPI_Gather ou MPI_Allgather.
GatherMessageInfo(MessageRank dest_rank, eBlockingType blocking_type)
Message ayant pour destination dest_rank et mode bloquant blocking_type.
Span< const Int32 > receiveDisplacement()
Tableau des déplacements. Utilisé en mode GatherVariable.
GatherMessageInfo()=default
Message pout tout le monde et bloquant.
GatherMessageInfo(MessageRank dest_rank)
Message bloquant ayant pour destination rank.
Array< DataType > * localReceptionBuffer() const
Buffer de réception pour le type T_GatherVariableNeedComputeInfo.
void setGatherVariable(Span< const DataType > send_buf, Span< DataType > receive_buf, Span< const Int32 > receive_counts, Span< const Int32 > receive_displacements)
Message équivalent à MPI_Gatherv ou MPI_Allgatherv.
Span< DataType > receiveBuffer() const
Buffer de réception. Utilisé en mode Gather et GatherVariable par les rangs qui recoivent.
Span< const DataType > sendBuffer() const
Buffer d'envoi. Il est utilisé dans tous les modes.
Span< const Int32 > receiveCounts() const
Tableau des tailles. Utilisé en mode GatherVariable.
Vue d'un tableau d'éléments de type T.
Definition Span.h:510
Espace de nommage contenant les types et déclarations qui gèrent le mécanisme de parallélisme par éch...
eBlockingType
Type indiquant si un message est bloquant ou non.