46class MpiParallelDispatchT
78 ARCANE_MPI_EXPORT ~MpiParallelDispatchT()
override;
79 ARCANE_MPI_EXPORT
void finalize()
override;
85 m_mp_dispatcher->broadcast(send_buf, rank);
89 m_mp_dispatcher->allGather(send_buf, recv_buf);
91 void allGatherVariable(ConstArrayView<Type> send_buf, Array<Type>& recv_buf)
override
93 m_mp_dispatcher->allGatherVariable(send_buf, recv_buf);
95 void gather(ConstArrayView<Type> send_buf, ArrayView<Type> recv_buf,
Int32 rank)
override
97 m_mp_dispatcher->gather(send_buf, recv_buf, rank);
99 void gatherVariable(ConstArrayView<Type> send_buf, Array<Type>& recv_buf,
Int32 rank)
override
101 m_mp_dispatcher->gatherVariable(send_buf, recv_buf, rank);
103 void scatterVariable(ConstArrayView<Type> send_buf, ArrayView<Type> recv_buf,
Int32 root)
override
105 m_mp_dispatcher->scatterVariable(send_buf, recv_buf, root);
107 void allToAll(ConstArrayView<Type> send_buf, ArrayView<Type> recv_buf,
Integer count)
override
109 m_mp_dispatcher->allToAll(send_buf, recv_buf, count);
115 m_mp_dispatcher->allToAllVariable(send_buf, send_count, send_index, recv_buf, recv_count, recv_index);
117 Request send(ConstArrayView<Type> send_buffer,
Int32 rank,
bool is_blocked)
override
119 return m_mp_dispatcher->send(send_buffer, rank, is_blocked);
121 Request send(Span<const Type> recv_buffer,
const PointToPointMessageInfo& message)
override
123 return m_mp_dispatcher->send(recv_buffer, message);
125 Request recv(ArrayView<Type> recv_buffer,
Int32 rank,
bool is_blocked)
override
127 return m_mp_dispatcher->receive(recv_buffer, rank, is_blocked);
129 Request receive(Span<Type> recv_buffer,
const PointToPointMessageInfo& message)
override
131 return m_mp_dispatcher->receive(recv_buffer, message);
133 void send(ConstArrayView<Type> send_buffer,
Int32 rank)
override
135 m_mp_dispatcher->send(send_buffer, rank,
true);
137 void recv(ArrayView<Type> recv_buffer,
Int32 rank)
override
139 m_mp_dispatcher->receive(recv_buffer, rank,
true);
141 Type allReduce(eReduceType op,
Type send_buf)
override
143 return m_mp_dispatcher->allReduce(op, send_buf);
145 void allReduce(eReduceType op, ArrayView<Type> send_buf)
override
147 m_mp_dispatcher->allReduce(op, send_buf);
149 void allReduce(eReduceType op, ConstArrayView<Type> send_buf, ArrayView<Type> receive_buf)
override
151 m_mp_dispatcher->allReduce(op, send_buf, receive_buf);
156 ARCANE_MPI_EXPORT
void sendRecv(ConstArrayView<Type> send_buffer, ArrayView<Type> recv_buffer,
Int32 rank)
override;
157 ARCANE_MPI_EXPORT
Type scan(eReduceType op,
Type send_buf)
override;
158 ARCANE_MPI_EXPORT
void scan(eReduceType op, ArrayView<Type> send_buf)
override;
159 ARCANE_MPI_EXPORT
void computeMinMaxSum(
Type val,
Type& min_val,
Type& max_val,
Type& sum_val,
161 Int32& max_rank)
override;
162 ARCANE_MPI_EXPORT
void computeMinMaxSum(ConstArrayView<Type> values,
163 ArrayView<Type> min_values,
164 ArrayView<Type> max_values,
165 ArrayView<Type> sum_values,
166 ArrayView<Int32> min_ranks,
167 ArrayView<Int32> max_ranks)
override;
171 ITypeDispatcher<Type>* toArccoreDispatcher()
override;
172 MpiDatatype* datatype()
const;
176 virtual ARCANE_MPI_EXPORT
void computeMinMaxSumNoInit(
Type& min_val,
Type& max_val,
Type& sum_val,
181 MP::Mpi::MpiTypeDispatcher<Type>* m_mp_dispatcher;
185 MPI_Datatype m_min_max_sum_datatype;
186 MPI_Op m_min_max_sum_operator;
191 MPI_Datatype _mpiDatatype();
192 MpiAdapter* _adapter();
193 MPI_Op _mpiReduceOperator(eReduceType rt);
194 static void ARCANE_MPIOP_CALL _MinMaxSumOperator(
void* a,
void* b,
int* len, MPI_Datatype* type);