51 ARCCORE_INTERNAL_DEFINE_REFERENCE_COUNTED_INCLASS_METHODS();
71 ARCANE_MPI_EXPORT
void finalize()
override;
74 { m_mp_dispatcher->broadcast(send_buf,rank); }
76 { m_mp_dispatcher->allGather(send_buf,recv_buf); }
77 void allGatherVariable(ConstArrayView<Type> send_buf, Array<Type>& recv_buf)
override
78 { m_mp_dispatcher->allGatherVariable(send_buf,recv_buf); }
79 void gather(ConstArrayView<Type> send_buf, ArrayView<Type> recv_buf,
Int32 rank)
override
80 { m_mp_dispatcher->gather(send_buf,recv_buf,rank); }
81 void gatherVariable(ConstArrayView<Type> send_buf, Array<Type>& recv_buf,
Int32 rank)
override
82 { m_mp_dispatcher->gatherVariable(send_buf,recv_buf,rank); }
83 void scatterVariable(ConstArrayView<Type> send_buf, ArrayView<Type> recv_buf,
Int32 root)
override
84 { m_mp_dispatcher->scatterVariable(send_buf,recv_buf,root); }
85 void allToAll(ConstArrayView<Type> send_buf, ArrayView<Type> recv_buf, Integer count)
override
86 { m_mp_dispatcher->allToAll(send_buf,recv_buf,count); }
90 { m_mp_dispatcher->allToAllVariable(send_buf,send_count,send_index,recv_buf,recv_count,recv_index); }
91 Request send(ConstArrayView<Type> send_buffer,
Int32 rank,
bool is_blocked)
override
92 {
return m_mp_dispatcher->send(send_buffer,rank,is_blocked); }
93 Request send(Span<const Type> recv_buffer,
const PointToPointMessageInfo& message)
override
94 {
return m_mp_dispatcher->send(recv_buffer,message); }
95 Request recv(ArrayView<Type> recv_buffer,
Int32 rank,
bool is_blocked)
override
96 {
return m_mp_dispatcher->receive(recv_buffer,rank,is_blocked); }
97 Request receive(Span<Type> recv_buffer,
const PointToPointMessageInfo& message)
override
98 {
return m_mp_dispatcher->receive(recv_buffer,message); }
99 void send(ConstArrayView<Type> send_buffer,
Int32 rank)
override
100 { m_mp_dispatcher->send(send_buffer,rank,
true); }
101 void recv(ArrayView<Type> recv_buffer,
Int32 rank)
override
102 { m_mp_dispatcher->receive(recv_buffer,rank,
true); }
103 Type allReduce(eReduceType op,
Type send_buf)
override
104 {
return m_mp_dispatcher->allReduce(op,send_buf); }
105 void allReduce(eReduceType op, ArrayView<Type> send_buf)
override
106 { m_mp_dispatcher->allReduce(op,send_buf); }
109 ARCANE_MPI_EXPORT
void sendRecv(ConstArrayView<Type> send_buffer, ArrayView<Type> recv_buffer,
Int32 rank)
override;
110 ARCANE_MPI_EXPORT
Type scan(eReduceType op,
Type send_buf)
override;
111 ARCANE_MPI_EXPORT
void scan(eReduceType op, ArrayView<Type> send_buf)
override;
112 ARCANE_MPI_EXPORT
void computeMinMaxSum(
Type val,
Type& min_val,
Type& max_val,
Type& sum_val,
114 Int32& max_rank)
override;
115 ARCANE_MPI_EXPORT
void computeMinMaxSum(ConstArrayView<Type> values,
116 ArrayView<Type> min_values,
117 ArrayView<Type> max_values,
118 ArrayView<Type> sum_values,
119 ArrayView<Int32> min_ranks,
120 ArrayView<Int32> max_ranks)
override;
124 ITypeDispatcher<Type>* toArccoreDispatcher()
override;
125 MpiDatatype* datatype()
const;
129 virtual ARCANE_MPI_EXPORT
void computeMinMaxSumNoInit(
Type& min_val,
Type& max_val,
Type& sum_val,
132 MP::Mpi::MpiTypeDispatcher<Type>* m_mp_dispatcher;
135 MPI_Datatype m_min_max_sum_datatype;
136 MPI_Op m_min_max_sum_operator;
140 MPI_Datatype _mpiDatatype();
141 MpiAdapter* _adapter();
142 MPI_Op _mpiReduceOperator(eReduceType rt);
143 static void ARCANE_MPIOP_CALL _MinMaxSumOperator(
void* a,
void* b,
int* len,MPI_Datatype* type);