77class ARCANE_CORE_EXPORT ParallelMngDispatcher
82 using BaseClass = MP::MessagePassingMng;
91 class ARCANE_CORE_EXPORT DefaultControlDispatcher
92 :
public MP::IControlDispatcher
105 void barrier()
override;
106 Request nonBlockingBarrier()
override;
107 MessageId probe(
const PointToPointMessageInfo& message)
override;
108 MP::MessageSourceInfo legacyProbe(
const PointToPointMessageInfo& message)
override;
110 MP::IProfiler* profiler()
const override {
return nullptr; }
111 void setProfiler(MP::IProfiler* p)
override;
121 friend class ParallelMngInternal;
130 ~ParallelMngDispatcher()
override;
134 ParallelMngDispatcher(
const ParallelMngDispatcher&) =
delete;
135 ParallelMngDispatcher(ParallelMngDispatcher&&) =
delete;
136 ParallelMngDispatcher& operator=(ParallelMngDispatcher&&) =
delete;
137 ParallelMngDispatcher& operator=(
const ParallelMngDispatcher&) =
delete;
141 void _setArccoreDispatchers();
146 void broadcastString(
String& str,
Int32 rank)
override;
154 Int32 m_comm_rank = A_NULL_RANK;
155 Int32 m_comm_size = A_NULL_RANK;
156 MP::IDispatchers* m_dispatchers =
nullptr;
158 MP::Communicator m_communicator;
162#define ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(field, type) \
165 void allGather(ConstArrayView<type> send_buf, ArrayView<type> recv_buf) override; \
166 void gather(ConstArrayView<type> send_buf, ArrayView<type> recv_buf, Integer rank) override; \
167 void allGatherVariable(ConstArrayView<type> send_buf, Array<type>& recv_buf) override; \
168 void gatherVariable(ConstArrayView<type> send_buf, Array<type>& recv_buf, Integer rank) override; \
169 void scatterVariable(ConstArrayView<type> send_buf, ArrayView<type> recv_buf, Integer root) override; \
170 type reduce(eReduceType rt, type v) override; \
171 void reduce(eReduceType rt, ArrayView<type> v) override; \
172 void broadcast(ArrayView<type> send_buf, Integer id) override; \
173 void send(ConstArrayView<type> values, Integer id) override; \
174 void recv(ArrayView<type> values, Integer id) override; \
175 Request send(ConstArrayView<type> values, Int32 rank, bool is_blocked) override; \
176 Request send(Span<const type> values, const PointToPointMessageInfo& message) override; \
177 Request recv(ArrayView<type> values, Int32 rank, bool is_blocked) override; \
178 Request receive(Span<type> values, const PointToPointMessageInfo& message) override; \
179 void sendRecv(ConstArrayView<type> send_buf, ArrayView<type> recv_buf, Integer id) override; \
180 void allToAll(ConstArrayView<type> send_buf, ArrayView<type> recv_buf, Integer count) override; \
181 void allToAllVariable(ConstArrayView<type> send_buf, Int32ConstArrayView send_count, \
182 Int32ConstArrayView send_index, ArrayView<type> recv_buf, \
183 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) override; \
184 type scan(eReduceType rt, type v); \
185 void computeMinMaxSum(type val, type& min_val, type& max_val, type& sum_val, Int32& min_proc, Int32& max_proc) override; \
186 void computeMinMaxSum(ConstArrayView<type> values, \
187 ArrayView<type> min_values, \
188 ArrayView<type> max_values, \
189 ArrayView<type> sum_values, \
190 ArrayView<Int32> min_ranks, \
191 ArrayView<Int32> max_ranks) override; \
192 void scan(eReduceType rt, ArrayView<type> v) override; \
196 IParallelDispatchT<type>* field;
198 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_char,
char)
199 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_unsigned_char,
unsigned char)
200 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_signed_char,
signed char)
201 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_short,
short)
202 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_unsigned_short,
unsigned short)
203 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_int,
int)
204 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_unsigned_int,
unsigned int)
205 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_long,
long)
206 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_unsigned_long,
unsigned long)
207 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_long_long,
long long)
208 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_unsigned_long_long,
unsigned long long)
209 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_float,
float)
210 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_double,
double)
211 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_long_double,
long double)
212 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_apreal,
APReal)
213 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_real2,
Real2)
214 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_real3,
Real3)
215 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_real2x2,
Real2x2)
216 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_real3x3,
Real3x3)
217 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_hpreal,
HPReal)
219#undef ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE
246 template <
class CreatorType>
void
247 createDispatchers(CreatorType& ct)
249 m_char = ct.template create<char>();
250 m_signed_char = ct.template create<signed char>();
251 m_unsigned_char = ct.template create<unsigned char>();
252 m_short = ct.template create<short>();
253 m_unsigned_short = ct.template create<unsigned short>();
254 m_int = ct.template create<int>();
255 m_unsigned_int = ct.template create<unsigned int>();
256 m_long = ct.template create<long>();
257 m_unsigned_long = ct.template create<unsigned long>();
258 m_long_long = ct.template create<long long>();
259 m_unsigned_long_long = ct.template create<unsigned long long>();
261 m_float = ct.template create<float>();
262 m_double = ct.template create<double>();
263 m_long_double = ct.template create<long double>();
265 m_apreal = ct.template create<APReal>();
266 m_real2 = ct.template create<Real2>();
267 m_real3 = ct.template create<Real3>();
268 m_real2x2 = ct.template create<Real2x2>();
269 m_real3x3 = ct.template create<Real3x3>();
270 m_hpreal = ct.template create<HPReal>();
272 _setArccoreDispatchers();
280 MP::IDispatchers* dispatchers()
override;
282 MP::Communicator
communicator()
const override {
return m_communicator; }
302 MP::IMessagePassingMng* _messagePassingMng()
const {
return m_message_passing_mng; }
303 UniqueArray<Integer> _doWaitRequests(ArrayView<Request> requests, Parallel::eWaitType wait_type);
304 virtual ISerializeMessageList* _createSerializeMessageList() = 0;
305 virtual IParallelMng* _createSubParallelMng(Int32ConstArrayView kept_ranks) = 0;
306 virtual bool _isAcceleratorAware()
const {
return false; }
307 virtual Ref<IParallelMng> _createSubParallelMngRef(Int32 color, Int32 key);
311 TimeMetricAction _communicationTimeMetricAction()
const;
312 void _setControlDispatcher(MP::IControlDispatcher* d);
313 void _setSerializeDispatcher(MP::ISerializeDispatcher* d);
314 void _setCommunicator(MP::Communicator c) { m_communicator = c; }
318 ITimeStats* m_time_stats =
nullptr;
319 Ref<MP::Dispatchers> m_mp_dispatchers_ref;
320 MP::IMessagePassingMng* m_message_passing_mng =
nullptr;
321 MP::IControlDispatcher* m_control_dispatcher =
nullptr;
322 MP::ISerializeDispatcher* m_serialize_dispatcher =
nullptr;
323 IParallelMngInternal* m_parallel_mng_internal =
nullptr;