Arcane  v3.14.10.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-2022 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-2016 */
9/* */
10/* Interface du gestionnaire du parallélisme sur un domaine. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_PARALLELNONBLOCKINGCOLLECTIVEDISPATCHER_H
13#define ARCANE_PARALLELNONBLOCKINGCOLLECTIVEDISPATCHER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/IParallelNonBlockingCollective.h"
18#include "arcane/IParallelNonBlockingCollectiveDispatch.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23ARCANE_BEGIN_NAMESPACE
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28class ITimeStats;
29class IParallelMng;
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33
34template<typename T>
35class IParallelNonBlockingCollectiveDispatchT;
36
37/*---------------------------------------------------------------------------*/
38/*---------------------------------------------------------------------------*/
39/*!
40 * \internal
41 * \brief Redirige la gestion des messages des sous-domaines
42 * suivant le type de l'argument.
43 */
46{
47 public:
48
51
52 public:
53
54 virtual IParallelMng* parallelMng() const { return m_parallel_mng; }
55
56 protected:
57
69#ifdef ARCANE_REAL_NOT_BUILTIN
71#endif
80 );
81
82 ITimeStats* timeStats();
83
84 private:
85
86 IParallelMng* m_parallel_mng;
87
88 public:
89
90#define ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(field,type) \
91public: \
92 virtual Request allGather(ConstArrayView<type> send_buf,ArrayView<type> recv_buf); \
93 virtual Request gather(ConstArrayView<type> send_buf,ArrayView<type> recv_buf,Integer rank); \
94 virtual Request allGatherVariable(ConstArrayView<type> send_buf,Array<type>& recv_buf); \
95 virtual Request gatherVariable(ConstArrayView<type> send_buf,Array<type>& recv_buf,Integer rank); \
96 virtual Request scatterVariable(ConstArrayView<type> send_buf,ArrayView<type> recv_buf,Integer root); \
97 virtual Request allReduce(eReduceType rt,ConstArrayView<type> send_buf,ArrayView<type> v); \
98 virtual Request broadcast(ArrayView<type> send_buf,Int32 rank); \
99 virtual Request allToAll(ConstArrayView<type> send_buf,ArrayView<type> recv_buf,Integer count); \
100 virtual Request allToAllVariable(ConstArrayView<type> send_buf,Int32ConstArrayView send_count, \
101 Int32ConstArrayView send_index,ArrayView<type> recv_buf, \
102 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index); \
103protected: \
104 IParallelNonBlockingCollectiveDispatchT<type>* field;
105
106
107 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_char,char)
108 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_unsigned_char,unsigned char)
109 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_signed_char,signed char)
110 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_short,short)
111 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_unsigned_short,unsigned short)
112 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_int,int)
113 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_unsigned_int,unsigned int)
114 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_long,long)
115 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_unsigned_long,unsigned long)
116 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_long_long,long long)
117 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_unsigned_long_long,unsigned long long)
118 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_float,float)
119 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_double,double)
120 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_long_double,long double)
121#ifdef ARCANE_REAL_NOT_BUILTIN
122 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_real,Real)
123#endif
124 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_real2,Real2)
125 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_real3,Real3)
126 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_real2x2,Real2x2)
127 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_real3x3,Real3x3)
128 ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE(m_hpreal,HPReal)
129
130#undef ARCANE_PARALLEL_NONBLOCKINGCOLLECTIVE_DISPATCH_PROTOTYPE
131
132 public:
133
134 virtual IParallelNonBlockingCollectiveDispatchT<char>* dispatcher(char*);
135 virtual IParallelNonBlockingCollectiveDispatchT<signed char>* dispatcher(signed char*);
136 virtual IParallelNonBlockingCollectiveDispatchT<unsigned char>* dispatcher(unsigned char*);
137 virtual IParallelNonBlockingCollectiveDispatchT<short>* dispatcher(short*);
138 virtual IParallelNonBlockingCollectiveDispatchT<unsigned short>* dispatcher(unsigned short*);
139 virtual IParallelNonBlockingCollectiveDispatchT<int>* dispatcher(int*);
140 virtual IParallelNonBlockingCollectiveDispatchT<unsigned int>* dispatcher(unsigned int*);
141 virtual IParallelNonBlockingCollectiveDispatchT<long>* dispatcher(long*);
142 virtual IParallelNonBlockingCollectiveDispatchT<unsigned long>* dispatcher(unsigned long*);
143 virtual IParallelNonBlockingCollectiveDispatchT<long long>* dispatcher(long long*);
144 virtual IParallelNonBlockingCollectiveDispatchT<unsigned long long>* dispatcher(unsigned long long*);
145#ifdef ARCANE_REAL_NOT_BUILTIN
146 virtual IParallelNonBlockingCollectiveDispatchT<Real>* dispatcher(Real*);
147#endif
148 virtual IParallelNonBlockingCollectiveDispatchT<float>* dispatcher(float*);
149 virtual IParallelNonBlockingCollectiveDispatchT<double>* dispatcher(double*);
150 virtual IParallelNonBlockingCollectiveDispatchT<long double>* dispatcher(long double*);
156
157 public:
158
159 private:
160};
161
162/*---------------------------------------------------------------------------*/
163/*---------------------------------------------------------------------------*/
164
165ARCANE_END_NAMESPACE
166
167/*---------------------------------------------------------------------------*/
168/*---------------------------------------------------------------------------*/
169
170#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.
virtual IParallelMng * parallelMng() const
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