Arcane  v3.16.4.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ParallelNonBlockingCollectiveDispatcher.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 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 du gestionnaire du parallélisme sur un domaine. */
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/*!
35 * \internal
36 * \brief Redirige la gestion des messages des sous-domaines
37 * suivant le type de l'argument.
38 */
39class ARCANE_CORE_EXPORT ParallelNonBlockingCollectiveDispatcher
41{
42 public:
43
44 explicit ParallelNonBlockingCollectiveDispatcher(IParallelMng* pm);
45 ~ParallelNonBlockingCollectiveDispatcher() override;
46
47 public:
48
49 IParallelMng* parallelMng() const override { return m_parallel_mng; }
50
51 protected:
52
64#ifdef ARCANE_REAL_NOT_BUILTIN
66#endif
75 );
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) \
86public: \
87 virtual Request allGather(ConstArrayView<type> send_buf,ArrayView<type> recv_buf); \
88 virtual Request gather(ConstArrayView<type> send_buf,ArrayView<type> recv_buf,Integer rank); \
89 virtual Request allGatherVariable(ConstArrayView<type> send_buf,Array<type>& recv_buf); \
90 virtual Request gatherVariable(ConstArrayView<type> send_buf,Array<type>& recv_buf,Integer rank); \
91 virtual Request scatterVariable(ConstArrayView<type> send_buf,ArrayView<type> recv_buf,Integer root); \
92 virtual Request allReduce(eReduceType rt,ConstArrayView<type> send_buf,ArrayView<type> v); \
93 virtual Request broadcast(ArrayView<type> send_buf,Int32 rank); \
94 virtual Request allToAll(ConstArrayView<type> send_buf,ArrayView<type> recv_buf,Integer count); \
95 virtual Request allToAllVariable(ConstArrayView<type> send_buf,Int32ConstArrayView send_count, \
96 Int32ConstArrayView send_index,ArrayView<type> recv_buf, \
97 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index); \
98protected: \
99 IParallelNonBlockingCollectiveDispatchT<type>* field;
100
101
102 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_char,char)
103 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_unsigned_char,unsigned char)
104 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_signed_char,signed char)
105 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_short,short)
106 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_unsigned_short,unsigned short)
107 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_int,int)
108 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_unsigned_int,unsigned int)
109 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_long,long)
110 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_unsigned_long,unsigned long)
111 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_long_long,long long)
112 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_unsigned_long_long,unsigned long long)
113 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_float,float)
114 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_double,double)
115 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_long_double,long double)
116#ifdef ARCANE_REAL_NOT_BUILTIN
117 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_real,Real)
118#endif
119 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_real2,Real2)
120 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_real3,Real3)
121 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_real2x2,Real2x2)
122 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_real3x3,Real3x3)
123 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_hpreal,HPReal)
124
125#undef ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE
126
127 public:
128
129 virtual IParallelNonBlockingCollectiveDispatchT<char>* dispatcher(char*);
130 virtual IParallelNonBlockingCollectiveDispatchT<signed char>* dispatcher(signed char*);
131 virtual IParallelNonBlockingCollectiveDispatchT<unsigned char>* dispatcher(unsigned char*);
132 virtual IParallelNonBlockingCollectiveDispatchT<short>* dispatcher(short*);
133 virtual IParallelNonBlockingCollectiveDispatchT<unsigned short>* dispatcher(unsigned short*);
134 virtual IParallelNonBlockingCollectiveDispatchT<int>* dispatcher(int*);
135 virtual IParallelNonBlockingCollectiveDispatchT<unsigned int>* dispatcher(unsigned int*);
136 virtual IParallelNonBlockingCollectiveDispatchT<long>* dispatcher(long*);
137 virtual IParallelNonBlockingCollectiveDispatchT<unsigned long>* dispatcher(unsigned long*);
138 virtual IParallelNonBlockingCollectiveDispatchT<long long>* dispatcher(long long*);
139 virtual IParallelNonBlockingCollectiveDispatchT<unsigned long long>* dispatcher(unsigned long long*);
140#ifdef ARCANE_REAL_NOT_BUILTIN
142#endif
143 virtual IParallelNonBlockingCollectiveDispatchT<float>* dispatcher(float*);
144 virtual IParallelNonBlockingCollectiveDispatchT<double>* dispatcher(double*);
145 virtual IParallelNonBlockingCollectiveDispatchT<long double>* dispatcher(long double*);
151};
152
153/*---------------------------------------------------------------------------*/
154/*---------------------------------------------------------------------------*/
155
156} // namespace Arcane
157
158/*---------------------------------------------------------------------------*/
159/*---------------------------------------------------------------------------*/
160
161#endif
Classe implémentant un réel Haute Précision.
Definition HPReal.h:161
Interface du gestionnaire de parallélisme pour un sous-domaine.
Interface des opérations parallèles collectives non bloquantes.
IParallelMng * parallelMng() const override
Gestionnaire de parallélisme associé.
Classe gérant un vecteur de réel de dimension 2.
Definition Real2.h:121
Classe gérant une matrice de réel de dimension 2x2.
Definition Real2x2.h:53
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
Classe gérant une matrice de réel de dimension 3x3.
Definition Real3x3.h:66
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
double Real
Type représentant un réel.