40class ARCANE_CORE_EXPORT ParallelMngDispatcherBuildInfo
44 ARCANE_DEPRECATED_REASON(
"Y2022: Use overload with Ref<MP::MessagePassingMng> and Ref<MP::Dispatchers> instead")
45 ParallelMngDispatcherBuildInfo(MP::Dispatchers* dispatchers,
46 MP::MessagePassingMng* mpm);
49 ParallelMngDispatcherBuildInfo(
Int32 comm_rank,
Int32 comm_size);
53 Int32 commRank()
const {
return m_comm_rank; }
54 Int32 commSize()
const {
return m_comm_size; }
58 ARCANE_DEPRECATED_REASON(
"Y2022: Use messagePassingMngRef() instead")
59 MP::MessagePassingMng* messagePassingMng()
const {
return m_message_passing_mng; }
60 ARCANE_DEPRECATED_REASON(
"Y2022: Use dispatchersRef() instead")
61 MP::Dispatchers* dispatchers()
const {
return m_dispatchers; }
67 MP::Dispatchers* m_dispatchers;
69 MP::MessagePassingMng* m_message_passing_mng;
85class ARCANE_CORE_EXPORT ParallelMngDispatcher
92 class ARCANE_CORE_EXPORT DefaultControlDispatcher
93 :
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#define ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(field, type) \
157 void allGather(ConstArrayView<type> send_buf, ArrayView<type> recv_buf) override; \
158 void gather(ConstArrayView<type> send_buf, ArrayView<type> recv_buf, Integer rank) override; \
159 void allGatherVariable(ConstArrayView<type> send_buf, Array<type>& recv_buf) override; \
160 void gatherVariable(ConstArrayView<type> send_buf, Array<type>& recv_buf, Integer rank) override; \
161 void scatterVariable(ConstArrayView<type> send_buf, ArrayView<type> recv_buf, Integer root) override; \
162 type reduce(eReduceType rt, type v) override; \
163 void reduce(eReduceType rt, ArrayView<type> v) override; \
164 void broadcast(ArrayView<type> send_buf, Integer id) override; \
165 void send(ConstArrayView<type> values, Integer id) override; \
166 void recv(ArrayView<type> values, Integer id) override; \
167 Request send(ConstArrayView<type> values, Int32 rank, bool is_blocked) override; \
168 Request send(Span<const type> values, const PointToPointMessageInfo& message) override; \
169 Request recv(ArrayView<type> values, Int32 rank, bool is_blocked) override; \
170 Request receive(Span<type> values, const PointToPointMessageInfo& message) override; \
171 void sendRecv(ConstArrayView<type> send_buf, ArrayView<type> recv_buf, Integer id) override; \
172 void allToAll(ConstArrayView<type> send_buf, ArrayView<type> recv_buf, Integer count) override; \
173 void allToAllVariable(ConstArrayView<type> send_buf, Int32ConstArrayView send_count, \
174 Int32ConstArrayView send_index, ArrayView<type> recv_buf, \
175 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) override; \
176 type scan(eReduceType rt, type v); \
177 void computeMinMaxSum(type val, type& min_val, type& max_val, type& sum_val, Int32& min_proc, Int32& max_proc) override; \
178 void computeMinMaxSum(ConstArrayView<type> values, \
179 ArrayView<type> min_values, \
180 ArrayView<type> max_values, \
181 ArrayView<type> sum_values, \
182 ArrayView<Int32> min_ranks, \
183 ArrayView<Int32> max_ranks) override; \
184 void scan(eReduceType rt, ArrayView<type> v) override; \
188 IParallelDispatchT<type>* field;
190 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_char,
char)
191 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_unsigned_char,
unsigned char)
192 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_signed_char,
signed char)
193 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_short,
short)
194 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_unsigned_short,
unsigned short)
195 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_int,
int)
196 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_unsigned_int,
unsigned int)
197 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_long,
long)
198 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_unsigned_long,
unsigned long)
199 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_long_long,
long long)
200 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_unsigned_long_long,
unsigned long long)
201 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_float,
float)
202 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_double,
double)
203 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_long_double,
long double)
204 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_apreal,
APReal)
205 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_real2,
Real2)
206 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_real3,
Real3)
207 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_real2x2,
Real2x2)
208 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_real3x3,
Real3x3)
209 ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE(m_hpreal,
HPReal)
211#undef ARCANE_PARALLEL_MANAGER_DISPATCH_PROTOTYPE
238 template <
class CreatorType>
void
239 createDispatchers(CreatorType& ct)
241 m_char = ct.template create<char>();
242 m_signed_char = ct.template create<signed char>();
243 m_unsigned_char = ct.template create<unsigned char>();
244 m_short = ct.template create<short>();
245 m_unsigned_short = ct.template create<unsigned short>();
246 m_int = ct.template create<int>();
247 m_unsigned_int = ct.template create<unsigned int>();
248 m_long = ct.template create<long>();
249 m_unsigned_long = ct.template create<unsigned long>();
250 m_long_long = ct.template create<long long>();
251 m_unsigned_long_long = ct.template create<unsigned long long>();
253 m_float = ct.template create<float>();
254 m_double = ct.template create<double>();
255 m_long_double = ct.template create<long double>();
257 m_apreal = ct.template create<APReal>();
258 m_real2 = ct.template create<Real2>();
259 m_real3 = ct.template create<Real3>();
260 m_real2x2 = ct.template create<Real2x2>();
261 m_real3x3 = ct.template create<Real3x3>();
262 m_hpreal = ct.template create<HPReal>();
264 _setArccoreDispatchers();
288 MP::MessagePassingMng* _messagePassingMng()
const {
return m_message_passing_mng_ref.get(); }
289 UniqueArray<Integer> _doWaitRequests(ArrayView<Request> requests, Parallel::eWaitType wait_type);
290 virtual ISerializeMessageList* _createSerializeMessageList() = 0;
291 virtual IParallelMng* _createSubParallelMng(Int32ConstArrayView kept_ranks) = 0;
292 virtual bool _isAcceleratorAware()
const {
return false; }
293 virtual Ref<IParallelMng> _createSubParallelMngRef(Int32 color, Int32 key);
297 TimeMetricAction _communicationTimeMetricAction()
const;
298 void _setControlDispatcher(MP::IControlDispatcher* d);
299 void _setSerializeDispatcher(MP::ISerializeDispatcher* d);
303 ITimeStats* m_time_stats =
nullptr;
304 Ref<MP::Dispatchers> m_mp_dispatchers_ref;
305 Ref<MP::MessagePassingMng> m_message_passing_mng_ref;
306 MP::IControlDispatcher* m_control_dispatcher =
nullptr;
307 MP::ISerializeDispatcher* m_serialize_dispatcher =
nullptr;
308 IParallelMngInternal* m_parallel_mng_internal =
nullptr;