Arcane  v3.16.4.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IParallelNonBlockingCollective.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/* IParallelNonBlockingCollective.h (C) 2000-2025 */
9/* */
10/* Interface des opérations parallèles collectives non bloquantes. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_IPARALLELNONBLOCKINGCOLLECTIVE_H
13#define ARCANE_CORE_IPARALLELNONBLOCKINGCOLLECTIVE_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24/*!
25 * NOTE:
26 * Le but est est IParallelNonBlockingCollective possède les
27 * mêmes méthodes collectives que IParallelMng. Cependant, certaines
28 * méthodes collectives de IParallleMng font en fait appel dans leur
29 * implémentation à plusieurs appels collectifs. Il n'est donc pas
30 * possible de transformer cela directement en opérations collectives.
31 * Pour implémenter cela avec MPI, il faudrait pouvoir associer un callback
32 * à chaque requête (ce callback serait appelé lorsque la requête est terminée)
33 * qui permettrait de poursuivre les opérations. Mais cela
34 * n'est pas disponible actuellement (peut-être cela est-il possible
35 * avec les requêtes généralisées).
36 * En attendant, on supprime de l'interface ces appels en les protégeant
37 * par un define _NEED_ADVANCED_NBC.
38 */
39/*---------------------------------------------------------------------------*/
40/*---------------------------------------------------------------------------*/
41
42namespace Arcane
43{
44
45/*---------------------------------------------------------------------------*/
46/*---------------------------------------------------------------------------*/
47/*!
48 * \ingroup Parallel
49 * \brief Interface des opérations parallèles collectives non bloquantes.
50 */
51class ARCANE_CORE_EXPORT IParallelNonBlockingCollective
52{
53 public:
54
55 virtual ~IParallelNonBlockingCollective() = default; //!< Libère les ressources.
56
57 public:
58
59 typedef Parallel::Request Request;
60 typedef Parallel::eReduceType eReduceType;
61
62 public:
63
64 //! Construit l'instance.
65 virtual void build() = 0;
66
67 public:
68
69 //! Gestionnaire de parallélisme associé.
70 virtual IParallelMng* parallelMng() const = 0;
71
72 public:
73
74 //! @name allGather
75 //@{
76 /*!
77 * \brief Effectue un regroupement sur tous les processeurs.
78 * Il s'agit d'une opération collective. Le tableau \a send_buf
79 * doit avoir la même taille, notée \a n, pour tous les processeurs et
80 * le tableau \a recv_buf doit avoir une taille égale au nombre
81 * de processeurs multiplié par \a n.
82 */
83 virtual Request allGather(ConstArrayView<char> send_buf, ArrayView<char> recv_buf) = 0;
84 virtual Request allGather(ConstArrayView<unsigned char> send_buf, ArrayView<unsigned char> recv_buf) = 0;
85 virtual Request allGather(ConstArrayView<signed char> send_buf, ArrayView<signed char> recv_buf) = 0;
86 virtual Request allGather(ConstArrayView<int> send_buf, ArrayView<int> recv_buf) = 0;
87 virtual Request allGather(ConstArrayView<unsigned int> send_buf, ArrayView<unsigned int> recv_buf) = 0;
88 virtual Request allGather(ConstArrayView<short> send_buf, ArrayView<short> recv_buf) = 0;
89 virtual Request allGather(ConstArrayView<unsigned short> send_buf, ArrayView<unsigned short> recv_buf) = 0;
90 virtual Request allGather(ConstArrayView<long> send_buf, ArrayView<long> recv_buf) = 0;
91 virtual Request allGather(ConstArrayView<unsigned long> send_buf, ArrayView<unsigned long> recv_buf) = 0;
92 virtual Request allGather(ConstArrayView<long long> send_buf, ArrayView<long long> recv_buf) = 0;
94 virtual Request allGather(ConstArrayView<float> send_buf, ArrayView<float> recv_buf) = 0;
95 virtual Request allGather(ConstArrayView<double> send_buf, ArrayView<double> recv_buf) = 0;
96 virtual Request allGather(ConstArrayView<long double> send_buf, ArrayView<long double> recv_buf) = 0;
97#ifdef ARCANE_REAL_NOT_BUILTIN
98 virtual Request allGather(ConstArrayView<Real> send_buf, ArrayView<Real> recv_buf) = 0;
99#endif
100 virtual Request allGather(ConstArrayView<Real2> send_buf, ArrayView<Real2> recv_buf) = 0;
101 virtual Request allGather(ConstArrayView<Real3> send_buf, ArrayView<Real3> recv_buf) = 0;
102 virtual Request allGather(ConstArrayView<Real2x2> send_buf, ArrayView<Real2x2> recv_buf) = 0;
103 virtual Request allGather(ConstArrayView<Real3x3> send_buf, ArrayView<Real3x3> recv_buf) = 0;
104 virtual Request allGather(ConstArrayView<HPReal> send_buf, ArrayView<HPReal> recv_buf) = 0;
105 //virtual Request allGather(ISerializer* send_serializer,ISerializer* recv_serializer) =0;
106 //@}
107
108 //! @name gather
109 //@{
110 /*!
111 * \brief Effectue un regroupement sur un processeurs.
112 * Il s'agit d'une opération collective. Le tableau \a send_buf
113 * doit avoir la même taille, notée \a n, pour tous les processeurs et
114 * le tableau \a recv_buf pour le processeur \a rank doit avoir une taille égale au nombre
115 * de processeurs multiplié par \a n. Ce tableau \a recv_buf est inutilisé pour
116 * les autres rangs que \a rank.
117 */
118 virtual Request gather(ConstArrayView<char> send_buf, ArrayView<char> recv_buf, Integer rank) = 0;
119 virtual Request gather(ConstArrayView<unsigned char> send_buf, ArrayView<unsigned char> recv_buf, Integer rank) = 0;
120 virtual Request gather(ConstArrayView<signed char> send_buf, ArrayView<signed char> recv_buf, Integer rank) = 0;
121 virtual Request gather(ConstArrayView<int> send_buf, ArrayView<int> recv_buf, Integer rank) = 0;
122 virtual Request gather(ConstArrayView<unsigned int> send_buf, ArrayView<unsigned int> recv_buf, Integer rank) = 0;
123 virtual Request gather(ConstArrayView<short> send_buf, ArrayView<short> recv_buf, Integer rank) = 0;
124 virtual Request gather(ConstArrayView<unsigned short> send_buf, ArrayView<unsigned short> recv_buf, Integer rank) = 0;
125 virtual Request gather(ConstArrayView<long> send_buf, ArrayView<long> recv_buf, Integer rank) = 0;
126 virtual Request gather(ConstArrayView<unsigned long> send_buf, ArrayView<unsigned long> recv_buf, Integer rank) = 0;
127 virtual Request gather(ConstArrayView<long long> send_buf, ArrayView<long long> recv_buf, Integer rank) = 0;
128 virtual Request gather(ConstArrayView<unsigned long long> send_buf, ArrayView<unsigned long long> recv_buf, Integer rank) = 0;
129 virtual Request gather(ConstArrayView<float> send_buf, ArrayView<float> recv_buf, Integer rank) = 0;
130 virtual Request gather(ConstArrayView<double> send_buf, ArrayView<double> recv_buf, Integer rank) = 0;
131 virtual Request gather(ConstArrayView<long double> send_buf, ArrayView<long double> recv_buf, Integer rank) = 0;
132#ifdef ARCANE_REAL_NOT_BUILTIN
133 virtual Request gather(ConstArrayView<Real> send_buf, ArrayView<Real> recv_buf, Integer rank) = 0;
134#endif
135 virtual Request gather(ConstArrayView<Real2> send_buf, ArrayView<Real2> recv_buf, Integer rank) = 0;
136 virtual Request gather(ConstArrayView<Real3> send_buf, ArrayView<Real3> recv_buf, Integer rank) = 0;
137 virtual Request gather(ConstArrayView<Real2x2> send_buf, ArrayView<Real2x2> recv_buf, Integer rank) = 0;
138 virtual Request gather(ConstArrayView<Real3x3> send_buf, ArrayView<Real3x3> recv_buf, Integer rank) = 0;
139 virtual Request gather(ConstArrayView<HPReal> send_buf, ArrayView<HPReal> recv_buf, Integer rank) = 0;
140 //virtual void gather(ISerializer* send_serializer,ISerializer* recv_serializer,Integer rank) =0;
141 //@}
142
143 //! @name allGather variable
144 //@{
145
146#if _NEED_ADVANCED_NBC
147 /*!
148 * \brief Effectue un regroupement sur tous les processeurs.
149 *
150 * Il s'agit d'une opération collective. Le nombre d'éléments du tableau
151 * \a send_buf peut être différent pour chaque processeur. Le tableau
152 * \a recv_buf contient en sortie la concaténation des tableaux \a send_buf
153 * de chaque processeur. Ce tableau \a recv_buf est éventuellement redimensionné
154 * pour le processeurs de rang \a rank.
155 */
156 virtual Request gatherVariable(ConstArrayView<char> send_buf,
157 Array<char>& recv_buf, Integer rank) = 0;
158 virtual Request gatherVariable(ConstArrayView<signed char> send_buf,
159 Array<signed char>& recv_buf, Integer rank) = 0;
160 virtual Request gatherVariable(ConstArrayView<unsigned char> send_buf,
161 Array<unsigned char>& recv_buf, Integer rank) = 0;
162 virtual Request gatherVariable(ConstArrayView<int> send_buf,
163 Array<int>& recv_buf, Integer rank) = 0;
164 virtual Request gatherVariable(ConstArrayView<unsigned int> send_buf,
165 Array<unsigned int>& recv_buf, Integer rank) = 0;
166 virtual Request gatherVariable(ConstArrayView<short> send_buf,
167 Array<short>& recv_buf, Integer rank) = 0;
168 virtual Request gatherVariable(ConstArrayView<unsigned short> send_buf,
169 Array<unsigned short>& recv_buf, Integer rank) = 0;
170 virtual Request gatherVariable(ConstArrayView<long> send_buf,
171 Array<long>& recv_buf, Integer rank) = 0;
172 virtual Request gatherVariable(ConstArrayView<unsigned long> send_buf,
173 Array<unsigned long>& recv_buf, Integer rank) = 0;
174 virtual Request gatherVariable(ConstArrayView<long long> send_buf,
175 Array<long long>& recv_buf, Integer rank) = 0;
176 virtual Request gatherVariable(ConstArrayView<unsigned long long> send_buf,
177 Array<unsigned long long>& recv_buf, Integer rank) = 0;
178 virtual Request gatherVariable(ConstArrayView<float> send_buf,
179 Array<float>& recv_buf, Integer rank) = 0;
180 virtual Request gatherVariable(ConstArrayView<double> send_buf,
181 Array<double>& recv_buf, Integer rank) = 0;
182 virtual Request gatherVariable(ConstArrayView<long double> send_buf,
183 Array<long double>& recv_buf, Integer rank) = 0;
184#ifdef ARCANE_REAL_NOT_BUILTIN
185 virtual Request gatherVariable(ConstArrayView<Real> send_buf,
186 Array<Real>& recv_buf, Integer rank) = 0;
187#endif
188 virtual Request gatherVariable(ConstArrayView<Real2> send_buf,
189 Array<Real2>& recv_buf, Integer rank) = 0;
190 virtual Request gatherVariable(ConstArrayView<Real3> send_buf,
191 Array<Real3>& recv_buf, Integer rank) = 0;
192 virtual Request gatherVariable(ConstArrayView<Real2x2> send_buf,
193 Array<Real2x2>& recv_buf, Integer rank) = 0;
194 virtual Request gatherVariable(ConstArrayView<Real3x3> send_buf,
195 Array<Real3x3>& recv_buf, Integer rank) = 0;
196 virtual Request gatherVariable(ConstArrayView<HPReal> send_buf,
197 Array<HPReal>& recv_buf, Integer rank) = 0;
198 //@}
199#endif
200
201 //! @name allGather variable
202 //@{
203
204#if _NEED_ADVANCED_NBC
205 /*!
206 * \brief Effectue un regroupement sur tous les processeurs.
207 *
208 * Il s'agit d'une opération collective. Le nombre d'éléments du tableau
209 * \a send_buf peut être différent pour chaque processeur. Le tableau
210 * \a recv_buf contient en sortie la concaténation des tableaux \a send_buf
211 * de chaque processeur. Ce tableau \a recv_buf est éventuellement redimensionné.
212 */
213 virtual Request allGatherVariable(ConstArrayView<char> send_buf,
214 Array<char>& recv_buf) = 0;
215 virtual Request allGatherVariable(ConstArrayView<signed char> send_buf,
216 Array<signed char>& recv_buf) = 0;
217 virtual Request allGatherVariable(ConstArrayView<unsigned char> send_buf,
218 Array<unsigned char>& recv_buf) = 0;
219 virtual Request allGatherVariable(ConstArrayView<int> send_buf,
220 Array<int>& recv_buf) = 0;
221 virtual Request allGatherVariable(ConstArrayView<unsigned int> send_buf,
222 Array<unsigned int>& recv_buf) = 0;
223 virtual Request allGatherVariable(ConstArrayView<short> send_buf,
224 Array<short>& recv_buf) = 0;
225 virtual Request allGatherVariable(ConstArrayView<unsigned short> send_buf,
226 Array<unsigned short>& recv_buf) = 0;
227 virtual Request allGatherVariable(ConstArrayView<long> send_buf,
228 Array<long>& recv_buf) = 0;
229 virtual Request allGatherVariable(ConstArrayView<unsigned long> send_buf,
230 Array<unsigned long>& recv_buf) = 0;
231 virtual Request allGatherVariable(ConstArrayView<long long> send_buf,
232 Array<long long>& recv_buf) = 0;
233 virtual Request allGatherVariable(ConstArrayView<unsigned long long> send_buf,
234 Array<unsigned long long>& recv_buf) = 0;
235 virtual Request allGatherVariable(ConstArrayView<float> send_buf,
236 Array<float>& recv_buf) = 0;
237 virtual Request allGatherVariable(ConstArrayView<double> send_buf,
238 Array<double>& recv_buf) = 0;
239 virtual Request allGatherVariable(ConstArrayView<long double> send_buf,
240 Array<long double>& recv_buf) = 0;
241#ifdef ARCANE_REAL_NOT_BUILTIN
242 virtual Request allGatherVariable(ConstArrayView<Real> send_buf,
243 Array<Real>& recv_buf) = 0;
244#endif
245 virtual Request allGatherVariable(ConstArrayView<Real2> send_buf,
246 Array<Real2>& recv_buf) = 0;
247 virtual Request allGatherVariable(ConstArrayView<Real3> send_buf,
248 Array<Real3>& recv_buf) = 0;
249 virtual Request allGatherVariable(ConstArrayView<Real2x2> send_buf,
250 Array<Real2x2>& recv_buf) = 0;
251 virtual Request allGatherVariable(ConstArrayView<Real3x3> send_buf,
252 Array<Real3x3>& recv_buf) = 0;
253 virtual Request allGatherVariable(ConstArrayView<HPReal> send_buf,
254 Array<HPReal>& recv_buf) = 0;
255 //@}
256#endif
257
258#if _NEED_ADVANCED_NBC
259 //! @name opérations de réduction sur un scalaire
260 //@{
261 /*!
262 * \brief Scinde un tableau sur plusieurs processeurs.
263 */
264 virtual Request scatterVariable(ConstArrayView<char> send_buf,
265 ArrayView<char> recv_buf, Integer root) = 0;
266 virtual Request scatterVariable(ConstArrayView<signed char> send_buf,
267 ArrayView<signed char> recv_buf, Integer root) = 0;
268 virtual Request scatterVariable(ConstArrayView<unsigned char> send_buf,
269 ArrayView<unsigned char> recv_buf, Integer root) = 0;
270 virtual Request scatterVariable(ConstArrayView<int> send_buf,
271 ArrayView<int> recv_buf, Integer root) = 0;
272 virtual Request scatterVariable(ConstArrayView<unsigned int> send_buf,
273 ArrayView<unsigned int> recv_buf, Integer root) = 0;
274 virtual Request scatterVariable(ConstArrayView<long> send_buf,
275 ArrayView<long> recv_buf, Integer root) = 0;
276 virtual Request scatterVariable(ConstArrayView<unsigned long> send_buf,
277 ArrayView<unsigned long> recv_buf, Integer root) = 0;
278 virtual Request scatterVariable(ConstArrayView<long long> send_buf,
279 ArrayView<long long> recv_buf, Integer root) = 0;
280 virtual Request scatterVariable(ConstArrayView<unsigned long long> send_buf,
281 ArrayView<unsigned long long> recv_buf, Integer root) = 0;
282 virtual Request scatterVariable(ConstArrayView<float> send_buf,
283 ArrayView<float> recv_buf, Integer root) = 0;
284 virtual Request scatterVariable(ConstArrayView<double> send_buf,
285 ArrayView<double> recv_buf, Integer root) = 0;
286 virtual Request scatterVariable(ConstArrayView<long double> send_buf,
287 ArrayView<long double> recv_buf, Integer root) = 0;
288#ifdef ARCANE_REAL_NOT_BUILTIN
289 virtual Request scatterVariable(ConstArrayView<Real> send_buf,
290 ArrayView<Real> recv_buf, Integer root) = 0;
291#endif
292 virtual Request scatterVariable(ConstArrayView<Real2> send_buf,
293 ArrayView<Real2> recv_buf, Integer root) = 0;
294 virtual Request scatterVariable(ConstArrayView<Real3> send_buf,
295 ArrayView<Real3> recv_buf, Integer root) = 0;
296 virtual Request scatterVariable(ConstArrayView<Real2x2> send_buf,
297 ArrayView<Real2x2> recv_buf, Integer root) = 0;
298 virtual Request scatterVariable(ConstArrayView<Real3x3> send_buf,
299 ArrayView<Real3x3> recv_buf, Integer root) = 0;
300 virtual Request scatterVariable(ConstArrayView<HPReal> send_buf,
301 ArrayView<HPReal> recv_buf, Integer root) = 0;
302 //@}
303#endif
304
305 //! @name opérations de réduction sur un tableau
306 //@{
307 /*!
308 * \brief Effectue la réduction de type \a rt sur le tableau \a send_buf et
309 * stoque le résultat dans \a recv_buf.
310 */
311 virtual Request allReduce(eReduceType rt, ConstArrayView<char> send_buf, ArrayView<char> recv_buf) = 0;
312 virtual Request allReduce(eReduceType rt, ConstArrayView<signed char> send_buf, ArrayView<signed char> recv_buf) = 0;
313 virtual Request allReduce(eReduceType rt, ConstArrayView<unsigned char> send_buf, ArrayView<unsigned char> recv_buf) = 0;
314 virtual Request allReduce(eReduceType rt, ConstArrayView<short> send_buf, ArrayView<short> recv_buf) = 0;
315 virtual Request allReduce(eReduceType rt, ConstArrayView<unsigned short> send_buf, ArrayView<unsigned short> recv_buf) = 0;
316 virtual Request allReduce(eReduceType rt, ConstArrayView<int> send_buf, ArrayView<int> recv_buf) = 0;
317 virtual Request allReduce(eReduceType rt, ConstArrayView<unsigned int> send_buf, ArrayView<unsigned int> recv_buf) = 0;
318 virtual Request allReduce(eReduceType rt, ConstArrayView<long> send_buf, ArrayView<long> recv_buf) = 0;
319 virtual Request allReduce(eReduceType rt, ConstArrayView<unsigned long> send_buf, ArrayView<unsigned long> recv_buf) = 0;
320 virtual Request allReduce(eReduceType rt, ConstArrayView<long long> send_buf, ArrayView<long long> recv_buf) = 0;
321 virtual Request allReduce(eReduceType rt, ConstArrayView<unsigned long long> send_buf, ArrayView<unsigned long long> recv_buf) = 0;
322 virtual Request allReduce(eReduceType rt, ConstArrayView<float> send_buf, ArrayView<float> recv_buf) = 0;
323 virtual Request allReduce(eReduceType rt, ConstArrayView<double> send_buf, ArrayView<double> recv_buf) = 0;
324 virtual Request allReduce(eReduceType rt, ConstArrayView<long double> send_buf, ArrayView<long double> recv_buf) = 0;
325#ifdef ARCANE_REAL_NOT_BUILTIN
326 virtual Request allReduce(eReduceType rt, ConstArrayView<Real> send_buf, ArrayView<Real> recv_buf) = 0;
327#endif
328 virtual Request allReduce(eReduceType rt, ConstArrayView<Real2> send_buf, ArrayView<Real2> recv_buf) = 0;
329 virtual Request allReduce(eReduceType rt, ConstArrayView<Real3> send_buf, ArrayView<Real3> recv_buf) = 0;
330 virtual Request allReduce(eReduceType rt, ConstArrayView<Real2x2> send_buf, ArrayView<Real2x2> recv_buf) = 0;
331 virtual Request allReduce(eReduceType rt, ConstArrayView<Real3x3> send_buf, ArrayView<Real3x3> recv_buf) = 0;
332 virtual Request allReduce(eReduceType rt, ConstArrayView<HPReal> send_buf, ArrayView<HPReal> recv_buf) = 0;
333 //@}
334
335 /*!
336 * @name opérations de broadcast
337 *
338 * \brief Envoie un tableau de valeurs sur tous les sous-domaines.
339 *
340 * Cette opération envoie le tableau de valeur \a send_buf sur tous
341 * les sous-domaines. Le tableau utilisé est celui dont le rang (commRank) est \a rank.
342 * Tous les sous-domaines participants doivent appelés cette méthode avec
343 * le même paramètre \a rank et avoir un tableau \a send_buf
344 * contenant le même nombre d'éléments.
345 */
346 //@{
347 virtual Request broadcast(ArrayView<char> send_buf, Integer rank) = 0;
348 virtual Request broadcast(ArrayView<signed char> send_buf, Integer rank) = 0;
349 virtual Request broadcast(ArrayView<unsigned char> send_buf, Integer rank) = 0;
350 virtual Request broadcast(ArrayView<short> send_buf, Integer rank) = 0;
351 virtual Request broadcast(ArrayView<unsigned short> send_buf, Integer rank) = 0;
352 virtual Request broadcast(ArrayView<int> send_buf, Integer rank) = 0;
353 virtual Request broadcast(ArrayView<unsigned int> send_buf, Integer rank) = 0;
354 virtual Request broadcast(ArrayView<long> send_buf, Integer rank) = 0;
355 virtual Request broadcast(ArrayView<unsigned long> send_buf, Integer rank) = 0;
356 virtual Request broadcast(ArrayView<long long> send_buf, Integer rank) = 0;
357 virtual Request broadcast(ArrayView<unsigned long long> send_buf, Integer rank) = 0;
358 virtual Request broadcast(ArrayView<float> send_buf, Integer rank) = 0;
359 virtual Request broadcast(ArrayView<double> send_buf, Integer rank) = 0;
360 virtual Request broadcast(ArrayView<long double> send_buf, Integer rank) = 0;
361#ifdef ARCANE_REAL_NOT_BUILTIN
362 virtual Request broadcast(ArrayView<Real> send_buf, Integer rank) = 0;
363#endif
364 virtual Request broadcast(ArrayView<Real2> send_buf, Integer rank) = 0;
365 virtual Request broadcast(ArrayView<Real3> send_buf, Integer rank) = 0;
366 virtual Request broadcast(ArrayView<Real2x2> send_buf, Integer rank) = 0;
367 virtual Request broadcast(ArrayView<Real3x3> send_buf, Integer rank) = 0;
368 virtual Request broadcast(ArrayView<HPReal> send_buf, Integer rank) = 0;
369 //virtual Request broadcastString(String& str,Integer rank) =0;
370
371 //virtual Request broadcastSerializer(ISerializer* values,Integer rank) =0;
372 /*! \brief Effectue un broadcast d'une zone mémoire.
373 *
374 * Le processeur qui effectue le broacast est donnée par \id. Le tableau
375 * envoyé est alors donnée par \a bytes. Les processeurs réceptionnent
376 * le tableau dans \a bytes. Ce tableau est alloué automatiquement, les processeurs
377 * réceptionnant n'ont pas besoin de connaitre le nombre d'octets devant être envoyés.
378 *
379 */
380 //virtual Request broadcastMemoryBuffer(ByteArray& bytes,Integer rank) =0;
381 //@}
382
383 virtual Request allToAll(ConstArrayView<char> send_buf, ArrayView<char> recv_buf,
384 Integer count) = 0;
385 virtual Request allToAll(ConstArrayView<signed char> send_buf, ArrayView<signed char> recv_buf,
386 Integer count) = 0;
387 virtual Request allToAll(ConstArrayView<unsigned char> send_buf, ArrayView<unsigned char> recv_buf,
388 Integer count) = 0;
389 virtual Request allToAll(ConstArrayView<int> send_buf, ArrayView<int> recv_buf, Integer count) = 0;
390 virtual Request allToAll(ConstArrayView<unsigned int> send_buf, ArrayView<unsigned int> recv_buf,
391 Integer count) = 0;
392 virtual Request allToAll(ConstArrayView<short> send_buf, ArrayView<short> recv_buf, Integer count) = 0;
393 virtual Request allToAll(ConstArrayView<unsigned short> send_buf, ArrayView<unsigned short> recv_buf,
394 Integer count) = 0;
395 virtual Request allToAll(ConstArrayView<long> send_buf, ArrayView<long> recv_buf, Integer count) = 0;
396 virtual Request allToAll(ConstArrayView<unsigned long> send_buf, ArrayView<unsigned long> recv_buf,
397 Integer count) = 0;
398 virtual Request allToAll(ConstArrayView<long long> send_buf, ArrayView<long long> recv_buf,
399 Integer count) = 0;
400 virtual Request allToAll(ConstArrayView<unsigned long long> send_buf,
401 ArrayView<unsigned long long> recv_buf, Integer count) = 0;
402 virtual Request allToAll(ConstArrayView<float> send_buf, ArrayView<float> recv_buf,
403 Integer count) = 0;
404 virtual Request allToAll(ConstArrayView<double> send_buf, ArrayView<double> recv_buf,
405 Integer count) = 0;
406 virtual Request allToAll(ConstArrayView<long double> send_buf, ArrayView<long double> recv_buf,
407 Integer count) = 0;
408#ifdef ARCANE_REAL_NOT_BUILTIN
409 virtual Request allToAll(ConstArrayView<Real> send_buf, ArrayView<Real> recv_buf,
410 Integer count) = 0;
411#endif
412 virtual Request allToAll(ConstArrayView<Real2> send_buf, ArrayView<Real2> recv_buf,
413 Integer count) = 0;
414 virtual Request allToAll(ConstArrayView<Real3> send_buf, ArrayView<Real3> recv_buf,
415 Integer count) = 0;
416 virtual Request allToAll(ConstArrayView<Real2x2> send_buf, ArrayView<Real2x2> recv_buf,
417 Integer count) = 0;
418 virtual Request allToAll(ConstArrayView<Real3x3> send_buf, ArrayView<Real3x3> recv_buf,
419 Integer count) = 0;
420 virtual Request allToAll(ConstArrayView<HPReal> send_buf, ArrayView<HPReal> recv_buf,
421 Integer count) = 0;
422
423 /*! @name allToAll variable
424 *
425 * \brief Effectue un allToAll variable
426 *
427 */
428 //@{
429 virtual Request allToAllVariable(ConstArrayView<char> send_buf, Int32ConstArrayView send_count,
430 Int32ConstArrayView send_index, ArrayView<char> recv_buf,
431 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) = 0;
432 virtual Request allToAllVariable(ConstArrayView<signed char> send_buf, Int32ConstArrayView send_count,
433 Int32ConstArrayView send_index, ArrayView<signed char> recv_buf,
434 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) = 0;
435 virtual Request allToAllVariable(ConstArrayView<unsigned char> send_buf, Int32ConstArrayView send_count,
437 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) = 0;
438 virtual Request allToAllVariable(ConstArrayView<int> send_buf, Int32ConstArrayView send_count,
439 Int32ConstArrayView send_index, ArrayView<int> recv_buf,
440 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) = 0;
441 virtual Request allToAllVariable(ConstArrayView<unsigned int> send_buf, Int32ConstArrayView send_count,
442 Int32ConstArrayView send_index, ArrayView<unsigned int> recv_buf,
443 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) = 0;
444 virtual Request allToAllVariable(ConstArrayView<short> send_buf, Int32ConstArrayView send_count,
445 Int32ConstArrayView send_index, ArrayView<short> recv_buf,
446 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) = 0;
447 virtual Request allToAllVariable(ConstArrayView<unsigned short> send_buf, Int32ConstArrayView send_count,
449 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) = 0;
450 virtual Request allToAllVariable(ConstArrayView<long> send_buf, Int32ConstArrayView send_count,
451 Int32ConstArrayView send_index, ArrayView<long> recv_buf,
452 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) = 0;
453 virtual Request allToAllVariable(ConstArrayView<unsigned long> send_buf, Int32ConstArrayView send_count,
455 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) = 0;
456 virtual Request allToAllVariable(ConstArrayView<long long> send_buf, Int32ConstArrayView send_count,
457 Int32ConstArrayView send_index, ArrayView<long long> recv_buf,
458 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) = 0;
459 virtual Request allToAllVariable(ConstArrayView<unsigned long long> send_buf, Int32ConstArrayView send_count,
461 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) = 0;
462 virtual Request allToAllVariable(ConstArrayView<float> send_buf, Int32ConstArrayView send_count,
463 Int32ConstArrayView send_index, ArrayView<float> recv_buf,
464 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) = 0;
465 virtual Request allToAllVariable(ConstArrayView<double> send_buf, Int32ConstArrayView send_count,
466 Int32ConstArrayView send_index, ArrayView<double> recv_buf,
467 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) = 0;
468 virtual Request allToAllVariable(ConstArrayView<long double> send_buf, Int32ConstArrayView send_count,
469 Int32ConstArrayView send_index, ArrayView<long double> recv_buf,
470 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) = 0;
471#ifdef ARCANE_REAL_NOT_BUILTIN
472 virtual Request allToAllVariable(ConstArrayView<Real> send_buf, Int32ConstArrayView send_count,
473 Int32ConstArrayView send_index, ArrayView<Real> recv_buf,
474 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) = 0;
475#endif
476 virtual Request allToAllVariable(ConstArrayView<Real2> send_buf, Int32ConstArrayView send_count,
477 Int32ConstArrayView send_index, ArrayView<Real2> recv_buf,
478 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) = 0;
479 virtual Request allToAllVariable(ConstArrayView<Real3> send_buf, Int32ConstArrayView send_count,
480 Int32ConstArrayView send_index, ArrayView<Real3> recv_buf,
481 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) = 0;
482 virtual Request allToAllVariable(ConstArrayView<Real2x2> send_buf, Int32ConstArrayView send_count,
483 Int32ConstArrayView send_index, ArrayView<Real2x2> recv_buf,
484 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) = 0;
485 virtual Request allToAllVariable(ConstArrayView<Real3x3> send_buf, Int32ConstArrayView send_count,
486 Int32ConstArrayView send_index, ArrayView<Real3x3> recv_buf,
487 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) = 0;
488 virtual Request allToAllVariable(ConstArrayView<HPReal> send_buf, Int32ConstArrayView send_count,
489 Int32ConstArrayView send_index, ArrayView<HPReal> recv_buf,
490 Int32ConstArrayView recv_count, Int32ConstArrayView recv_index) = 0;
491 //@}
492
493 //! @name opérations de synchronisation et opérations asynchrones
494 //@{
495 //! Effectue une barière
496 virtual Request barrier() = 0;
497 //@}
498
499 /*!
500 * \brief Indique si l'implémentation autorise les réductions sur les types
501 * dérivés.
502 *
503 * Les version de OpenMPI jusqu'à la version 1.8.4 incluses semblent avoir
504 * un bug (qui se traduit par un plantage) avec les réductions non bloquantes
505 * lorsque l'opérateur de réduction est redéfini. C'est le cas avec les
506 * types dérivés tels que Real3, Real2, ...
507 */
508 virtual bool hasValidReduceForDerivedType() const = 0;
509};
510
511/*---------------------------------------------------------------------------*/
512/*---------------------------------------------------------------------------*/
513
514} // namespace Arcane
515
516/*---------------------------------------------------------------------------*/
517/*---------------------------------------------------------------------------*/
518
519#endif
Fichier contenant les déclarations concernant le modèle de programmation par échange de message.
Déclarations des types utilisés dans Arcane.
Vue modifiable d'un tableau d'un type T.
Classe de base des vecteurs 1D de données.
Vue constante d'un tableau de type T.
Interface du gestionnaire de parallélisme pour un sous-domaine.
Interface des opérations parallèles collectives non bloquantes.
virtual Request barrier()=0
Effectue une barière.
virtual ~IParallelNonBlockingCollective()=default
Libère les ressources.
virtual void build()=0
Construit l'instance.
virtual Request allGather(ConstArrayView< char > send_buf, ArrayView< char > recv_buf)=0
Effectue un regroupement sur tous les processeurs. Il s'agit d'une opération collective....
virtual bool hasValidReduceForDerivedType() const =0
Indique si l'implémentation autorise les réductions sur les types dérivés.
virtual IParallelMng * parallelMng() const =0
Gestionnaire de parallélisme associé.
virtual Request allReduce(eReduceType rt, ConstArrayView< char > send_buf, ArrayView< char > recv_buf)=0
Effectue la réduction de type rt sur le tableau send_buf et stoque le résultat dans recv_buf.
virtual Request gather(ConstArrayView< char > send_buf, ArrayView< char > recv_buf, Integer rank)=0
Effectue un regroupement sur un processeurs. Il s'agit d'une opération collective....
virtual Request allToAll(ConstArrayView< char > send_buf, ArrayView< char > recv_buf, Integer count)=0
Effectue un broadcast d'une zone mémoire.
Requête d'un message.
Definition Request.h:77
eReduceType
Types des réductions supportées.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:569