Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
ParallelNonBlockingCollectiveDispatcher.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* ParallelNonBlockingCollectiveDispatcher.h (C) 2000-2025 */
9/* */
10/* Interface of the parallelism manager on a domain. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_PARALLELNONBLOCKINGCOLLECTIVEDISPATCHER_H
13#define ARCANE_CORE_PARALLELNONBLOCKINGCOLLECTIVEDISPATCHER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/core/IParallelNonBlockingCollective.h"
18#include "arcane/core/IParallelNonBlockingCollectiveDispatch.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29template <typename T>
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34
40class ARCANE_CORE_EXPORT ParallelNonBlockingCollectiveDispatcher
42{
43 public:
44
45 explicit ParallelNonBlockingCollectiveDispatcher(IParallelMng* pm);
46 ~ParallelNonBlockingCollectiveDispatcher() override;
47
48 public:
49
50 IParallelMng* parallelMng() const override { return m_parallel_mng; }
51
52 protected:
53
65#ifdef ARCANE_REAL_NOT_BUILTIN
67#endif
76
77 ITimeStats* timeStats();
78
79 private:
80
81 IParallelMng* m_parallel_mng = nullptr;
82
83 public:
84
85#define ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(field, type) \
86 public: \
87\
88 virtual Request allGather(ConstArrayView<type> send_buf, ArrayView<type> recv_buf); \
89 virtual Request gather(ConstArrayView<type> send_buf, ArrayView<type> recv_buf, Integer rank); \
90 virtual Request allGatherVariable(ConstArrayView<type> send_buf, Array<type>& recv_buf); \
91 virtual Request gatherVariable(ConstArrayView<type> send_buf, Array<type>& recv_buf, Integer rank); \
92 virtual Request scatterVariable(ConstArrayView<type> send_buf, ArrayView<type> recv_buf, Integer root); \
93 virtual Request allReduce(eReduceType rt, ConstArrayView<type> send_buf, ArrayView<type> v); \
94 virtual Request broadcast(ArrayView<type> send_buf, Int32 rank); \
95 virtual Request allToAll(ConstArrayView<type> send_buf, ArrayView<type> recv_buf, Integer count); \
96 virtual Request allToAllVariable(ConstArrayView<type> send_buf, Int32ConstArrayView send_count, \
97 Int32ConstArrayView send_index, ArrayView<type> recv_buf, \
98 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index); \
99\
100 protected: \
101\
102 IParallelNonBlockingCollectiveDispatchT<type>* field;
103
104 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_char, char)
105 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_unsigned_char, unsigned char)
106 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_signed_char, signed char)
107 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_short, short)
108 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_unsigned_short, unsigned short)
109 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_int, int)
110 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_unsigned_int, unsigned int)
111 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_long, long)
112 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_unsigned_long, unsigned long)
113 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_long_long, long long)
114 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_unsigned_long_long, unsigned long long)
115 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_float, float)
116 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_double, double)
117 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_long_double, long double)
118#ifdef ARCANE_REAL_NOT_BUILTIN
119 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_real, Real)
120#endif
121 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_real2, Real2)
122 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_real3, Real3)
123 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_real2x2, Real2x2)
124 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_real3x3, Real3x3)
125 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_hpreal, HPReal)
126
127#undef ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE
128
129 public:
130
131 virtual IParallelNonBlockingCollectiveDispatchT<char>* dispatcher(char*);
132 virtual IParallelNonBlockingCollectiveDispatchT<signed char>* dispatcher(signed char*);
133 virtual IParallelNonBlockingCollectiveDispatchT<unsigned char>* dispatcher(unsigned char*);
134 virtual IParallelNonBlockingCollectiveDispatchT<short>* dispatcher(short*);
135 virtual IParallelNonBlockingCollectiveDispatchT<unsigned short>* dispatcher(unsigned short*);
136 virtual IParallelNonBlockingCollectiveDispatchT<int>* dispatcher(int*);
137 virtual IParallelNonBlockingCollectiveDispatchT<unsigned int>* dispatcher(unsigned int*);
138 virtual IParallelNonBlockingCollectiveDispatchT<long>* dispatcher(long*);
139 virtual IParallelNonBlockingCollectiveDispatchT<unsigned long>* dispatcher(unsigned long*);
140 virtual IParallelNonBlockingCollectiveDispatchT<long long>* dispatcher(long long*);
141 virtual IParallelNonBlockingCollectiveDispatchT<unsigned long long>* dispatcher(unsigned long long*);
142#ifdef ARCANE_REAL_NOT_BUILTIN
144#endif
145 virtual IParallelNonBlockingCollectiveDispatchT<float>* dispatcher(float*);
146 virtual IParallelNonBlockingCollectiveDispatchT<double>* dispatcher(double*);
147 virtual IParallelNonBlockingCollectiveDispatchT<long double>* dispatcher(long double*);
153};
154
155/*---------------------------------------------------------------------------*/
156/*---------------------------------------------------------------------------*/
157
158} // namespace Arcane
159
160/*---------------------------------------------------------------------------*/
161/*---------------------------------------------------------------------------*/
162
163#endif
Class implementing a High-Precision real number.
Definition HPReal.h:159
Interface of the parallelism manager for a subdomain.
Interface for non-blocking collectives for the type Type.
Interface for non-blocking collective parallel operations.
Interface managing execution time statistics.
Definition ITimeStats.h:44
IParallelMng * parallelMng() const override
Associated parallelism manager.
Class managing a 2-dimensional real vector.
Definition Real2.h:122
Class managing a 2x2 matrix of reals.
Definition Real2x2.h:55
Class managing a 3-dimensional real vector.
Definition Real3.h:132
Class managing a 3x3 real matrix.
Definition Real3x3.h:67
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
double Real
Type representing a real number.