Arcane  v4.1.1.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IParallelMng.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/* IParallelMng.h (C) 2000-2025 */
9/* */
10/* Interface du gestionnaire du parallélisme sur un sous-domaine. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_IPARALLELMNG_H
13#define ARCANE_CORE_IPARALLELMNG_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30/*!
31 * \ingroup Parallel
32 * \brief Interface du gestionnaire de parallélisme pour un sous-domaine.
33 *
34 * Ce gestionnaire propose une interface pour accéder à
35 * l'ensemble des fonctionnalités liées au parallélisme.
36 *
37 * Il existe plusieurs implémentations possibles:
38 * - mode séquentiel.
39 * - mode parallèle via MPI
40 * - mode parallèle via les threads.
41 * - mode parallèle mixte MPI/threads.
42 * Le choix de l'implémentation se fait lors du lancement de l'application.
43 *
44 * Lorsqu'une opération est collective, tous les gestionnaires associés doivent
45 * participer.
46 *
47 * Il est possible de créer à partir d'une instance un autre gestionnaire
48 * contenant un sous-ensemble de rang via createSubParallelMng().
49 *
50 */
51class ARCANE_CORE_EXPORT IParallelMng
52{
54 // Classe pour accéder à _internalUtilsFactory()
55 friend class ParallelMngUtilsAccessor;
56
57 public:
58
59 // NOTE: Laisse temporairement ce destructeur publique tant que
60 // les méthodes createParallelMng() existent pour des raisons de
61 // compatibilité avec l'existant
62 virtual ~IParallelMng() = default; //!< Libère les ressources.
63
64 public:
65
66 typedef Parallel::Request Request;
67 using PointToPointMessageInfo = Parallel::PointToPointMessageInfo;
68 using MessageId = Parallel::MessageId;
69 using MessageSourceInfo = Parallel::MessageSourceInfo;
70 typedef Parallel::eReduceType eReduceType;
71 typedef Parallel::IStat IStat;
72
73 public:
74
75 //! Construit l'instance.
76 virtual void build() =0;
77
78 public:
79
80 /*!
81 * \brief Retourne \a true si l'exécution est parallèle.
82 *
83 * L'exécution est parallèle si l'instance implémente
84 * un mécanisme d'échange de message tel que MPI.
85 */
86 virtual bool isParallel() const =0;
87
88 private:
89
90 // NOTE: on laisse temporairement ces deux méthodes pour garder la compatibilité binaire.
91
92 //! Numéro du sous-domaine associé à ce gestionnaire.
93 virtual ARCANE_DEPRECATED Integer subDomainId() const final { return commRank(); }
94
95 //! Nombre total de sous-domaines.
96 virtual ARCANE_DEPRECATED Integer nbSubDomain() const final { return commSize(); }
97
98 public:
99
100 //! Rang de cette instance dans le communicateur
101 virtual Int32 commRank() const =0;
102
103 //! Nombre d'instance dans le communicateur
104 virtual Int32 commSize() const =0;
105
106 /*!
107 * \brief Adresse du communicateur MPI associé à ce gestionnaire.
108 *
109 * Le communicateur n'est valide que si on utilise MPI. Sinon, l'adresse
110 * retournée est 0. La valeur retournée est de type (MPI_Comm*).
111 */
112 virtual void* getMPICommunicator() =0;
113
114 /*!
115 * \brief Adresse du communicateur MPI associé à ce gestionnaire.
116 *
117 * \deprecated Utiliser getMPICommunicator() à la place.
118 */
119 virtual ARCANE_DEPRECATED_120 void* mpiCommunicator();
120
121 /*!
122 * \brief Communicateur MPI associé à ce gestionnaire
123 *
124 * Le communicateur n'est valide que si on utilise MPI. Il est possible
125 * de tester la validité en appelant la méthode Communicator::isValid().
126 * S'il est valide, il est possible de récupérer sa valeur via un cast:
127 * \code
128 * IParallelMng* pm = ...;
129 * MPI_Comm c = static_cast<MPI_Comm>(pm->communicator());
130 * \endcode
131 */
133
134 /**
135 * \brief Communicateur MPI issus du communicateur \a communicator()
136 * réunissant tous les processus du noeud de calcul.
137 *
138 * Le communicateur n'est valide que si on utilise MPI. Il est possible
139 * de tester la validité en appelant la méthode Communicator::isValid().
140 * S'il est valide, il est possible de récupérer sa valeur via un cast:
141 * \code
142 * IParallelMng* pm = ...;
143 * MPI_Comm mc = static_cast<MPI_Comm>(pm->machineCommunicator());
144 * \endcode
145 */
146 virtual Parallel::Communicator machineCommunicator() const { return {}; }
147
148 /*!
149 * \brief Indique si l'implémentation utilise les threads.
150 *
151 * L'implémentation utilise les threads soit en mode
152 * thread pure, soit en mode mixte MPI/thread.
153 */
154 virtual bool isThreadImplementation() const =0;
155
156 /*!
157 * \brief Indique si l'implémentation utilise le mode hybride.
158 *
159 * L'implémentation utilise le mode mixte MPI/thread.
160 */
161 virtual bool isHybridImplementation() const =0;
162
163 //! Positionne le gestionnaire de statistiques
164 virtual void setTimeStats(ITimeStats* time_stats) =0;
165
166 //! Gestionnaire de statistiques associé (peut être nul)
167 virtual ITimeStats* timeStats() const =0;
168
169 //! Gestionnaire de traces
170 virtual ITraceMng* traceMng() const =0;
171
172 //! Gestionnaire de threads
173 virtual IThreadMng* threadMng() const =0;
174
175 //! Gestionnaire de timers
176 virtual ITimerMng* timerMng() const =0;
177
178 //! Gestionnaire des entrées/sorties
179 virtual IIOMng* ioMng() const =0;
180
181 //! Gestionnaire de parallélisme sur l'ensemble des ressources allouées
182 virtual IParallelMng* worldParallelMng() const =0;
183
184 //! Initialise le gestionnaire du parallélisme
185 virtual void initialize() =0;
186
187 //! Collecteur Arccore des statistiques temporelles (peut être nul)
189
190 public:
191
192
193 public:
194
195 //! \a true si l'instance est un gestionnaire maître des entrées/sorties.
196 virtual bool isMasterIO() const =0;
197
198 /*!
199 \brief Rang de l'instance gérant les entrées/sorties (pour laquelle isMasterIO() est vrai)
200 *
201 * Dans l'implémentation actuelle, il s'agit toujours du processeur de rang 0.
202 */
203 virtual Integer masterIORank() const =0;
204
205 //! @name allGather
206 //@{
207 /*!
208 * \brief Effectue un regroupement sur tous les processeurs.
209 * Il s'agit d'une opération collective. Le tableau \a send_buf
210 * doit avoir la même taille, notée \a n, pour tous les processeurs et
211 * le tableau \a recv_buf doit avoir une taille égale au nombre
212 * de processeurs multiplié par \a n.
213 */
214 virtual void allGather(ConstArrayView<char> send_buf,ArrayView<char> recv_buf) =0;
215 virtual void allGather(ConstArrayView<unsigned char> send_buf,ArrayView<unsigned char> recv_buf) =0;
216 virtual void allGather(ConstArrayView<signed char> send_buf,ArrayView<signed char> recv_buf) =0;
217 virtual void allGather(ConstArrayView<short> send_buf,ArrayView<short> recv_buf) =0;
218 virtual void allGather(ConstArrayView<unsigned short> send_buf,ArrayView<unsigned short> recv_buf) =0;
219 virtual void allGather(ConstArrayView<int> send_buf,ArrayView<int> recv_buf) =0;
220 virtual void allGather(ConstArrayView<unsigned int> send_buf,ArrayView<unsigned int> recv_buf) =0;
221 virtual void allGather(ConstArrayView<long> send_buf,ArrayView<long> recv_buf) =0;
222 virtual void allGather(ConstArrayView<unsigned long> send_buf,ArrayView<unsigned long> recv_buf) =0;
223 virtual void allGather(ConstArrayView<long long> send_buf,ArrayView<long long> recv_buf) =0;
225 virtual void allGather(ConstArrayView<float> send_buf,ArrayView<float> recv_buf) =0;
226 virtual void allGather(ConstArrayView<double> send_buf,ArrayView<double> recv_buf) =0;
227 virtual void allGather(ConstArrayView<long double> send_buf,ArrayView<long double> recv_buf) =0;
228 virtual void allGather(ConstArrayView<APReal> send_buf,ArrayView<APReal> recv_buf) =0;
229 virtual void allGather(ConstArrayView<Real2> send_buf,ArrayView<Real2> recv_buf) =0;
230 virtual void allGather(ConstArrayView<Real3> send_buf,ArrayView<Real3> recv_buf) =0;
231 virtual void allGather(ConstArrayView<Real2x2> send_buf,ArrayView<Real2x2> recv_buf) =0;
232 virtual void allGather(ConstArrayView<Real3x3> send_buf,ArrayView<Real3x3> recv_buf) =0;
233 virtual void allGather(ConstArrayView<HPReal> send_buf,ArrayView<HPReal> recv_buf) =0;
234 virtual void allGather(ISerializer* send_serializer,ISerializer* recv_serializer) =0;
235 //@}
236
237 //! @name gather
238 //@{
239 /*!
240 * \brief Effectue un regroupement sur un processeurs.
241 * Il s'agit d'une opération collective. Le tableau \a send_buf
242 * doit avoir la même taille, notée \a n, pour tous les processeurs et
243 * le tableau \a recv_buf pour le processeur \a rank doit avoir une taille égale au nombre
244 * de processeurs multiplié par \a n. Ce tableau \a recv_buf est inutilisé pour
245 * les autres rangs que \a rank.
246 */
247 virtual void gather(ConstArrayView<char> send_buf,ArrayView<char> recv_buf,Int32 rank) =0;
248 virtual void gather(ConstArrayView<unsigned char> send_buf,ArrayView<unsigned char> recv_buf,Int32 rank) =0;
249 virtual void gather(ConstArrayView<signed char> send_buf,ArrayView<signed char> recv_buf,Int32 rank) =0;
250 virtual void gather(ConstArrayView<short> send_buf,ArrayView<short> recv_buf,Int32 rank) =0;
251 virtual void gather(ConstArrayView<unsigned short> send_buf,ArrayView<unsigned short> recv_buf,Int32 rank) =0;
252 virtual void gather(ConstArrayView<int> send_buf,ArrayView<int> recv_buf,Int32 rank) =0;
253 virtual void gather(ConstArrayView<unsigned int> send_buf,ArrayView<unsigned int> recv_buf,Int32 rank) =0;
254 virtual void gather(ConstArrayView<long> send_buf,ArrayView<long> recv_buf,Int32 rank) =0;
255 virtual void gather(ConstArrayView<unsigned long> send_buf,ArrayView<unsigned long> recv_buf,Int32 rank) =0;
256 virtual void gather(ConstArrayView<long long> send_buf,ArrayView<long long> recv_buf,Int32 rank) =0;
258 virtual void gather(ConstArrayView<float> send_buf,ArrayView<float> recv_buf,Int32 rank) =0;
259 virtual void gather(ConstArrayView<double> send_buf,ArrayView<double> recv_buf,Int32 rank) =0;
260 virtual void gather(ConstArrayView<long double> send_buf,ArrayView<long double> recv_buf,Int32 rank) =0;
261 virtual void gather(ConstArrayView<APReal> send_buf,ArrayView<APReal> recv_buf,Int32 rank) =0;
262 virtual void gather(ConstArrayView<Real2> send_buf,ArrayView<Real2> recv_buf,Int32 rank) =0;
263 virtual void gather(ConstArrayView<Real3> send_buf,ArrayView<Real3> recv_buf,Int32 rank) =0;
264 virtual void gather(ConstArrayView<Real2x2> send_buf,ArrayView<Real2x2> recv_buf,Int32 rank) =0;
265 virtual void gather(ConstArrayView<Real3x3> send_buf,ArrayView<Real3x3> recv_buf,Int32 rank) =0;
266 virtual void gather(ConstArrayView<HPReal> send_buf,ArrayView<HPReal> recv_buf,Int32 rank) =0;
267 //@}
268
269 //! @name allGather variable
270 //@{
271
272 /*!
273 * \brief Effectue un regroupement sur tous les processeurs.
274 *
275 * Il s'agit d'une opération collective. Le nombre d'éléments du tableau
276 * \a send_buf peut être différent pour chaque processeur. Le tableau
277 * \a recv_buf contient en sortie la concaténation des tableaux \a send_buf
278 * de chaque processeur. Ce tableau \a recv_buf est éventuellement redimensionné
279 * pour le processeurs de rang \a rank.
280 */
282 Array<char>& recv_buf,Int32 rank) =0;
283 virtual void gatherVariable(ConstArrayView<signed char> send_buf,
284 Array<signed char>& recv_buf,Int32 rank) =0;
285 virtual void gatherVariable(ConstArrayView<unsigned char> send_buf,
286 Array<unsigned char>& recv_buf,Int32 rank) =0;
287 virtual void gatherVariable(ConstArrayView<short> send_buf,
288 Array<short>& recv_buf,Int32 rank) =0;
290 Array<unsigned short>& recv_buf,Int32 rank) =0;
291 virtual void gatherVariable(ConstArrayView<int> send_buf,
292 Array<int>& recv_buf,Int32 rank) =0;
293 virtual void gatherVariable(ConstArrayView<unsigned int> send_buf,
294 Array<unsigned int>& recv_buf,Int32 rank) =0;
295 virtual void gatherVariable(ConstArrayView<long> send_buf,
296 Array<long>& recv_buf,Int32 rank) =0;
297 virtual void gatherVariable(ConstArrayView<unsigned long> send_buf,
298 Array<unsigned long>& recv_buf,Int32 rank) =0;
299 virtual void gatherVariable(ConstArrayView<long long> send_buf,
300 Array<long long>& recv_buf,Int32 rank) =0;
302 Array<unsigned long long>& recv_buf,Int32 rank) =0;
303 virtual void gatherVariable(ConstArrayView<float> send_buf,
304 Array<float>& recv_buf,Int32 rank) =0;
305 virtual void gatherVariable(ConstArrayView<double> send_buf,
306 Array<double>& recv_buf,Int32 rank) =0;
307 virtual void gatherVariable(ConstArrayView<long double> send_buf,
308 Array<long double>& recv_buf,Int32 rank) =0;
309 virtual void gatherVariable(ConstArrayView<APReal> send_buf,
310 Array<APReal>& recv_buf,Int32 rank) =0;
311 virtual void gatherVariable(ConstArrayView<Real2> send_buf,
312 Array<Real2>& recv_buf,Int32 rank) =0;
313 virtual void gatherVariable(ConstArrayView<Real3> send_buf,
314 Array<Real3>& recv_buf,Int32 rank) =0;
315 virtual void gatherVariable(ConstArrayView<Real2x2> send_buf,
316 Array<Real2x2>& recv_buf,Int32 rank) =0;
317 virtual void gatherVariable(ConstArrayView<Real3x3> send_buf,
318 Array<Real3x3>& recv_buf,Int32 rank) =0;
319 virtual void gatherVariable(ConstArrayView<HPReal> send_buf,
320 Array<HPReal>& recv_buf,Int32 rank) =0;
321 //@}
322
323 //! @name allGather variable
324 //@{
325
326 /*!
327 * \brief Effectue un regroupement sur tous les processeurs.
328 *
329 * Il s'agit d'une opération collective. Le nombre d'éléments du tableau
330 * \a send_buf peut être différent pour chaque processeur. Le tableau
331 * \a recv_buf contient en sortie la concaténation des tableaux \a send_buf
332 * de chaque processeur. Ce tableau \a recv_buf est éventuellement redimensionné.
333 */
335 Array<char>& recv_buf) =0;
337 Array<signed char>& recv_buf) =0;
339 Array<unsigned char>& recv_buf) =0;
340 virtual void allGatherVariable(ConstArrayView<short> send_buf,
341 Array<short>& recv_buf) =0;
343 Array<unsigned short>& recv_buf) =0;
344 virtual void allGatherVariable(ConstArrayView<int> send_buf,
345 Array<int>& recv_buf) =0;
347 Array<unsigned int>& recv_buf) =0;
348 virtual void allGatherVariable(ConstArrayView<long> send_buf,
349 Array<long>& recv_buf) =0;
351 Array<unsigned long>& recv_buf) =0;
352 virtual void allGatherVariable(ConstArrayView<long long> send_buf,
353 Array<long long>& recv_buf) =0;
355 Array<unsigned long long>& recv_buf) =0;
356 virtual void allGatherVariable(ConstArrayView<float> send_buf,
357 Array<float>& recv_buf) =0;
358 virtual void allGatherVariable(ConstArrayView<double> send_buf,
359 Array<double>& recv_buf) =0;
361 Array<long double>& recv_buf) =0;
362 virtual void allGatherVariable(ConstArrayView<APReal> send_buf,
363 Array<APReal>& recv_buf) =0;
364 virtual void allGatherVariable(ConstArrayView<Real2> send_buf,
365 Array<Real2>& recv_buf) =0;
366 virtual void allGatherVariable(ConstArrayView<Real3> send_buf,
367 Array<Real3>& recv_buf) =0;
368 virtual void allGatherVariable(ConstArrayView<Real2x2> send_buf,
369 Array<Real2x2>& recv_buf) =0;
370 virtual void allGatherVariable(ConstArrayView<Real3x3> send_buf,
371 Array<Real3x3>& recv_buf) =0;
372 virtual void allGatherVariable(ConstArrayView<HPReal> send_buf,
373 Array<HPReal>& recv_buf) =0;
374 //@}
375
376 //! @name opérations de réduction sur un scalaire
377 //@{
378 /*!
379 * \brief Scinde un tableau sur plusieurs processeurs.
380 */
382 ArrayView<char> recv_buf,Integer root) =0;
383 virtual void scatterVariable(ConstArrayView<signed char> send_buf,
384 ArrayView<signed char> recv_buf,Integer root) =0;
386 ArrayView<unsigned char> recv_buf,Integer root) =0;
387 virtual void scatterVariable(ConstArrayView<short> send_buf,
388 ArrayView<short> recv_buf,Integer root) =0;
390 ArrayView<unsigned short> recv_buf,Integer root) =0;
391 virtual void scatterVariable(ConstArrayView<int> send_buf,
392 ArrayView<int> recv_buf,Integer root) =0;
393 virtual void scatterVariable(ConstArrayView<unsigned int> send_buf,
394 ArrayView<unsigned int> recv_buf,Integer root) =0;
395 virtual void scatterVariable(ConstArrayView<long> send_buf,
396 ArrayView<long> recv_buf,Integer root) =0;
398 ArrayView<unsigned long> recv_buf,Integer root) =0;
399 virtual void scatterVariable(ConstArrayView<long long> send_buf,
400 ArrayView<long long> recv_buf,Integer root) =0;
402 ArrayView<unsigned long long> recv_buf,Integer root) =0;
403 virtual void scatterVariable(ConstArrayView<float> send_buf,
404 ArrayView<float> recv_buf,Integer root) =0;
405 virtual void scatterVariable(ConstArrayView<double> send_buf,
406 ArrayView<double> recv_buf,Integer root) =0;
407 virtual void scatterVariable(ConstArrayView<long double> send_buf,
408 ArrayView<long double> recv_buf,Integer root) =0;
409 virtual void scatterVariable(ConstArrayView<APReal> send_buf,
410 ArrayView<APReal> recv_buf,Integer root) =0;
411 virtual void scatterVariable(ConstArrayView<Real2> send_buf,
412 ArrayView<Real2> recv_buf,Integer root) =0;
413 virtual void scatterVariable(ConstArrayView<Real3> send_buf,
414 ArrayView<Real3> recv_buf,Integer root) =0;
415 virtual void scatterVariable(ConstArrayView<Real2x2> send_buf,
416 ArrayView<Real2x2> recv_buf,Integer root) =0;
417 virtual void scatterVariable(ConstArrayView<Real3x3> send_buf,
418 ArrayView<Real3x3> recv_buf,Integer root) =0;
419 virtual void scatterVariable(ConstArrayView<HPReal> send_buf,
420 ArrayView<HPReal> recv_buf,Integer root) =0;
421 //@}
422
423 //! @name opérations de réduction sur un scalaire
424 //@{
425 /*!
426 * \brief Effectue la réduction de type \a rt sur le réel \a v et retourne la valeur
427 */
428 virtual char reduce(eReduceType rt,char v) =0;
429 virtual signed char reduce(eReduceType rt,signed char v) =0;
430 virtual unsigned char reduce(eReduceType rt,unsigned char v) =0;
431 virtual short reduce(eReduceType rt,short v) =0;
432 virtual unsigned short reduce(eReduceType rt,unsigned short v) =0;
433 virtual int reduce(eReduceType rt,int v) =0;
434 virtual unsigned int reduce(eReduceType rt,unsigned int v) =0;
435 virtual long reduce(eReduceType rt,long v) =0;
436 virtual unsigned long reduce(eReduceType rt,unsigned long v) =0;
437 virtual long long reduce(eReduceType rt,long long v) =0;
438 virtual unsigned long long reduce(eReduceType rt,unsigned long long v) =0;
439 virtual float reduce(eReduceType rt,float v) =0;
440 virtual double reduce(eReduceType rt,double v) =0;
441 virtual long double reduce(eReduceType rt,long double v) =0;
442 virtual APReal reduce(eReduceType rt,APReal v) =0;
443 virtual Real2 reduce(eReduceType rt,Real2 v) =0;
444 virtual Real3 reduce(eReduceType rt,Real3 v) =0;
445 virtual Real2x2 reduce(eReduceType rt,Real2x2 v) =0;
446 virtual Real3x3 reduce(eReduceType rt,Real3x3 v) =0;
447 virtual HPReal reduce(eReduceType rt,HPReal v) =0;
448 //@}
449
450 //! @name opérations de réduction sur un scalaire
451 //@{
452 /*!
453 * \brief Calcule en une opération la somme, le min, le max d'une valeur.
454 *
455 * Calcule le minimum, le maximum et la somme de la valeur \a val.
456 * \param val valeur servant pour le calcul
457 * \param[out] min_val valeur minimale
458 * \param[out] max_val valeur maximale
459 * \param[out] sum_val somme des valeurs
460 * \param[out] min_rank rang du processeur ayant la valeur minimale
461 * \param[out] max_rank rang du processeur ayant la valeur maximale
462 */
463 virtual void computeMinMaxSum(char val,char& min_val,
464 char& max_val,char& sum_val,
465 Int32& min_rank,Int32& max_rank) =0;
466 virtual void computeMinMaxSum(signed char val,signed char& min_val,
467 signed char& max_val,signed char& sum_val,
468 Int32& min_rank,Int32& max_rank) =0;
469 virtual void computeMinMaxSum(unsigned char val,unsigned char& min_val,
470 unsigned char& max_val,unsigned char& sum_val,
471 Int32& min_rank,Int32& max_rank) =0;
472 virtual void computeMinMaxSum(short val,short& min_val,
473 short& max_val,short& sum_val,
474 Int32& min_rank,Int32& max_rank) =0;
475 virtual void computeMinMaxSum(unsigned short val,unsigned short& min_val,
476 unsigned short& max_val,unsigned short& sum_val,
477 Int32& min_rank,Int32& max_rank) =0;
478 virtual void computeMinMaxSum(int val,int& min_val,
479 int& max_val,int& sum_val,
480 Int32& min_rank,Int32& max_rank) =0;
481 virtual void computeMinMaxSum(unsigned int val,unsigned int& min_val,
482 unsigned int& max_val,unsigned int& sum_val,
483 Int32& min_rank,Int32& max_rank) =0;
484 virtual void computeMinMaxSum(long val,long& min_val,
485 long& max_val,long& sum_val,
486 Int32& min_rank,Int32& max_rank) =0;
487 virtual void computeMinMaxSum(unsigned long val,unsigned long& min_val,
488 unsigned long& max_val,unsigned long& sum_val,
489 Int32& min_rank,Int32& max_rank) =0;
490 virtual void computeMinMaxSum(long long val,long long& min_val,
491 long long& max_val,long long& sum_val,
492 Int32& min_rank,Int32& max_rank) =0;
493 virtual void computeMinMaxSum(unsigned long long val,unsigned long long& min_val,
494 unsigned long long& max_val,unsigned long long& sum_val,
495 Int32& min_rank,Int32& max_rank) =0;
496 virtual void computeMinMaxSum(float val,float& min_val,
497 float& max_val,float& sum_val,
498 Int32& min_rank,Int32& max_rank) =0;
499 virtual void computeMinMaxSum(double val,double& min_val,
500 double& max_val,double& sum_val,
501 Int32& min_rank,Int32& max_rank) =0;
502 virtual void computeMinMaxSum(long double val,long double& min_val,
503 long double& max_val,long double& sum_val,
504 Int32& min_rank,Int32& max_rank) =0;
505 virtual void computeMinMaxSum(APReal val,APReal& min_val,
506 APReal& max_val,APReal& sum_val,
507 Int32& min_rank,Int32& max_rank) =0;
508 virtual void computeMinMaxSum(Real2 val,Real2& min_val,
509 Real2& max_val,Real2& sum_val,
510 Int32& min_rank,Int32& max_rank) =0;
511 virtual void computeMinMaxSum(Real3 val,Real3& min_val,
512 Real3& max_val,Real3& sum_val,
513 Int32& min_rank,Int32& max_rank) =0;
514 virtual void computeMinMaxSum(Real2x2 val,Real2x2& min_val,
515 Real2x2& max_val,Real2x2& sum_val,
516 Int32& min_rank,Int32& max_rank) =0;
517 virtual void computeMinMaxSum(Real3x3 val,Real3x3& min_val,
518 Real3x3& max_val,Real3x3& sum_val,
519 Int32& min_rank,Int32& max_rank) =0;
520 virtual void computeMinMaxSum(HPReal val,HPReal& min_val,
521 HPReal& max_val,HPReal& sum_val,
522 Int32& min_rank,Int32& max_rank) =0;
523 //@}
524
525 //! @name opérations de réduction sur un vecteur
526 //@{
527 /*!
528 * \brief Calcule en une opération la somme, le min, le max d'une valeur.
529 *
530 * Calcule le minimum, le maximum et la somme de la valeur \a val.
531 * \param val valeur servant pour le calcul
532 * \param[out] min_val valeur minimale
533 * \param[out] max_val valeur maximale
534 * \param[out] sum_val somme des valeurs
535 * \param[out] min_rank rang du processeur ayant la valeur minimale
536 * \param[out] max_rank rang du processeur ayant la valeur maximale
537 */
539 ArrayView<char> max_values, ArrayView<char> sum_values,
540 ArrayView<Int32> min_ranks, ArrayView<Int32> max_ranks) =0;
542 ArrayView<signed char> max_values, ArrayView<signed char> sum_values,
543 ArrayView<Int32> min_ranks, ArrayView<Int32> max_ranks) =0;
546 ArrayView<Int32> min_ranks, ArrayView<Int32> max_ranks) =0;
547 virtual void computeMinMaxSum(ConstArrayView<short> values, ArrayView<short> min_values,
548 ArrayView<short> max_values, ArrayView<short> sum_values,
549 ArrayView<Int32> min_ranks, ArrayView<Int32> max_ranks) =0;
552 ArrayView<Int32> min_ranks, ArrayView<Int32> max_ranks) =0;
553 virtual void computeMinMaxSum(ConstArrayView<int> values, ArrayView<int> min_values,
554 ArrayView<int> max_values, ArrayView<int> sum_values,
555 ArrayView<Int32> min_ranks, ArrayView<Int32> max_ranks) =0;
558 ArrayView<Int32> min_ranks, ArrayView<Int32> max_ranks) =0;
559 virtual void computeMinMaxSum(ConstArrayView<long> values, ArrayView<long> min_values,
560 ArrayView<long> max_values, ArrayView<long> sum_values,
561 ArrayView<Int32> min_ranks, ArrayView<Int32> max_ranks) =0;
564 ArrayView<Int32> min_ranks, ArrayView<Int32> max_ranks) =0;
566 ArrayView<long long> max_values, ArrayView<long long> sum_values,
567 ArrayView<Int32> min_ranks, ArrayView<Int32> max_ranks) =0;
570 ArrayView<Int32> min_ranks, ArrayView<Int32> max_ranks) =0;
571 virtual void computeMinMaxSum(ConstArrayView<float> values, ArrayView<float> min_values,
572 ArrayView<float> max_values, ArrayView<float> sum_values,
573 ArrayView<Int32> min_ranks, ArrayView<Int32> max_ranks) =0;
574 virtual void computeMinMaxSum(ConstArrayView<double> values, ArrayView<double> min_values,
575 ArrayView<double> max_values, ArrayView<double> sum_values,
576 ArrayView<Int32> min_ranks, ArrayView<Int32> max_ranks) =0;
578 ArrayView<long double> max_values, ArrayView<long double> sum_values,
579 ArrayView<Int32> min_ranks, ArrayView<Int32> max_ranks) =0;
580 virtual void computeMinMaxSum(ConstArrayView<APReal> values, ArrayView<APReal> min_values,
581 ArrayView<APReal> max_values, ArrayView<APReal> sum_values,
582 ArrayView<Int32> min_ranks, ArrayView<Int32> max_ranks) =0;
583 virtual void computeMinMaxSum(ConstArrayView<Real2> values, ArrayView<Real2> min_values,
584 ArrayView<Real2> max_values, ArrayView<Real2> sum_values,
585 ArrayView<Int32> min_ranks, ArrayView<Int32> max_ranks) =0;
586 virtual void computeMinMaxSum(ConstArrayView<Real3> values, ArrayView<Real3> min_values,
587 ArrayView<Real3> max_values, ArrayView<Real3> sum_values,
588 ArrayView<Int32> min_ranks, ArrayView<Int32> max_ranks) =0;
589 virtual void computeMinMaxSum(ConstArrayView<Real2x2> values, ArrayView<Real2x2> min_values,
590 ArrayView<Real2x2> max_values, ArrayView<Real2x2> sum_values,
591 ArrayView<Int32> min_ranks, ArrayView<Int32> max_ranks) =0;
592 virtual void computeMinMaxSum(ConstArrayView<Real3x3> values, ArrayView<Real3x3> min_values,
593 ArrayView<Real3x3> max_values, ArrayView<Real3x3> sum_values,
594 ArrayView<Int32> min_ranks, ArrayView<Int32> max_ranks) =0;
595 virtual void computeMinMaxSum(ConstArrayView<HPReal> values, ArrayView<HPReal> min_values,
596 ArrayView<HPReal> max_values, ArrayView<HPReal> sum_values,
597 ArrayView<Int32> min_ranks, ArrayView<Int32> max_ranks) =0;
598 //@}
599
600
601 //! @name opérations de réduction sur un tableau
602 //@{
603 /*!
604 * \brief Effectue la réduction de type \a rt sur le tableau \a v.
605 */
606 virtual void reduce(eReduceType rt,ArrayView<char> v) =0;
607 virtual void reduce(eReduceType rt,ArrayView<signed char> v) =0;
608 virtual void reduce(eReduceType rt,ArrayView<unsigned char> v) =0;
609 virtual void reduce(eReduceType rt,ArrayView<short> v) =0;
610 virtual void reduce(eReduceType rt,ArrayView<unsigned short> v) =0;
611 virtual void reduce(eReduceType rt,ArrayView<int> v) =0;
612 virtual void reduce(eReduceType rt,ArrayView<unsigned int> v) =0;
613 virtual void reduce(eReduceType rt,ArrayView<long> v) =0;
614 virtual void reduce(eReduceType rt,ArrayView<unsigned long> v) =0;
615 virtual void reduce(eReduceType rt,ArrayView<long long> v) =0;
616 virtual void reduce(eReduceType rt,ArrayView<unsigned long long> v) =0;
617 virtual void reduce(eReduceType rt,ArrayView<float> v) =0;
618 virtual void reduce(eReduceType rt,ArrayView<double> v) =0;
619 virtual void reduce(eReduceType rt,ArrayView<long double> v) =0;
620 virtual void reduce(eReduceType rt,ArrayView<APReal> v) =0;
621 virtual void reduce(eReduceType rt,ArrayView<Real2> v) =0;
622 virtual void reduce(eReduceType rt,ArrayView<Real3> v) =0;
623 virtual void reduce(eReduceType rt,ArrayView<Real2x2> v) =0;
624 virtual void reduce(eReduceType rt,ArrayView<Real3x3> v) =0;
625 virtual void reduce(eReduceType rt,ArrayView<HPReal> v) =0;
626 //@}
627
628 /*!
629 * @name opérations de broadcast
630 *
631 * \brief Envoie un tableau de valeurs sur tous les sous-domaines.
632 *
633 * Cette opération envoie le tableau de valeur \a send_buf sur tous
634 * les sous-domaines. Le tableau utilisé est celui dont le rang (commRank) est \a rank.
635 * Tous les sous-domaines participants doivent appelés cette méthode avec
636 * le même paramètre \a rank et avoir un tableau \a send_buf
637 * contenant le même nombre d'éléments.
638 */
639 //@{
640 virtual void broadcast(ArrayView<char> send_buf,Int32 rank) =0;
641 virtual void broadcast(ArrayView<signed char> send_buf,Int32 rank) =0;
642 virtual void broadcast(ArrayView<unsigned char> send_buf,Int32 rank) =0;
643 virtual void broadcast(ArrayView<short> send_buf,Int32 rank) =0;
644 virtual void broadcast(ArrayView<unsigned short> send_buf,Int32 rank) =0;
645 virtual void broadcast(ArrayView<int> send_buf,Int32 rank) =0;
646 virtual void broadcast(ArrayView<unsigned int> send_buf,Int32 rank) =0;
647 virtual void broadcast(ArrayView<long> send_buf,Int32 rank) =0;
648 virtual void broadcast(ArrayView<unsigned long> send_buf,Int32 rank) =0;
649 virtual void broadcast(ArrayView<long long> send_buf,Int32 rank) =0;
650 virtual void broadcast(ArrayView<unsigned long long> send_buf,Int32 rank) =0;
651 virtual void broadcast(ArrayView<float> send_buf,Int32 rank) =0;
652 virtual void broadcast(ArrayView<double> send_buf,Int32 rank) =0;
653 virtual void broadcast(ArrayView<long double> send_buf,Int32 rank) =0;
654 virtual void broadcast(ArrayView<APReal> send_buf,Int32 rank) =0;
655 virtual void broadcast(ArrayView<Real2> send_buf,Int32 rank) =0;
656 virtual void broadcast(ArrayView<Real3> send_buf,Int32 rank) =0;
657 virtual void broadcast(ArrayView<Real2x2> send_buf,Int32 rank) =0;
658 virtual void broadcast(ArrayView<Real3x3> send_buf,Int32 rank) =0;
659 virtual void broadcast(ArrayView<HPReal> send_buf,Int32 rank) =0;
660 virtual void broadcastString(String& str,Int32 rank) =0;
661
662 virtual void broadcastSerializer(ISerializer* values,Int32 rank) =0;
663 /*! \brief Effectue un broadcast d'une zone mémoire.
664 *
665 * Le processeur qui effectue le broadcast est donnée par \id. Le tableau
666 * envoyé est alors donnée par \a bytes. Les processeurs réceptionnent
667 * le tableau dans \a bytes. Ce tableau est alloué automatiquement, les processeurs
668 * réceptionnant n'ont pas besoin de connaitre le nombre d'octets devant être envoyés.
669 *
670 */
671 virtual void broadcastMemoryBuffer(ByteArray& bytes,Int32 rank) =0;
672 //@}
673
674 /*!
675 * @name opérations d'envoie de messages
676 *
677 * \brief Envoie bloquant d'un tableau de valeurs à un sous-domaine.
678 *
679 * Envoie les valeurs du tableau \a values au sous-domaine \a rank.
680 * Le sous-domaine doit effectuer une réception correspondante (le numéro
681 * de sous-domaine doit être celui de ce gestionnaire et le type et la
682 * taille du tableau doit correspondre) avec la fonction recvValues().
683 * L'envoie est bloquant.
684 */
685 //@{
686 virtual void send(ConstArrayView<char> values,Int32 rank) =0;
687 virtual void send(ConstArrayView<signed char> values,Int32 rank) =0;
688 virtual void send(ConstArrayView<unsigned char> values,Int32 rank) =0;
689 virtual void send(ConstArrayView<short> values,Int32 rank) =0;
690 virtual void send(ConstArrayView<unsigned short> values,Int32 rank) =0;
691 virtual void send(ConstArrayView<int> values,Int32 rank) =0;
692 virtual void send(ConstArrayView<unsigned int> values,Int32 rank) =0;
693 virtual void send(ConstArrayView<long> values,Int32 rank) =0;
694 virtual void send(ConstArrayView<unsigned long> values,Int32 rank) =0;
695 virtual void send(ConstArrayView<long long> values,Int32 rank) =0;
696 virtual void send(ConstArrayView<unsigned long long> values,Int32 rank) =0;
697 virtual void send(ConstArrayView<float> values,Int32 rank) =0;
698 virtual void send(ConstArrayView<double> values,Int32 rank) =0;
699 virtual void send(ConstArrayView<long double> values,Int32 rank) =0;
700 virtual void send(ConstArrayView<APReal> values,Int32 rank) =0;
701 virtual void send(ConstArrayView<Real2> values,Int32 rank) =0;
702 virtual void send(ConstArrayView<Real3> values,Int32 rank) =0;
703 virtual void send(ConstArrayView<Real2x2> values,Int32 rank) =0;
704 virtual void send(ConstArrayView<Real3x3> values,Int32 rank) =0;
705 virtual void send(ConstArrayView<HPReal> values,Int32 rank) =0;
706
707 virtual void sendSerializer(ISerializer* values,Int32 rank) =0;
708 /*!
709 * la requête donnée en retour doit être utilisée dans waitAllRequests() ou
710 * libérée par appel à freeRequests().
711 */
712 ARCCORE_DEPRECATED_2019("Use createSendSerializer(Int32 rank) instead")
713 virtual Parallel::Request sendSerializer(ISerializer* values,Int32 rank,ByteArray& bytes) =0;
714
715 /*!
716 * \brief Créé un message non bloquant pour envoyer des données sérialisées au rang \a rank.
717 *
718 * Le message est traité uniquement lors de l'appel à processMessages().
719 */
721 //@}
722
723 //! @name opérations de réception de messages.
724 //@{
725 /*! Reception du rang \a rank le tableau \a values */
726 virtual void recv(ArrayView<char> values,Int32 rank) =0;
727 virtual void recv(ArrayView<signed char> values,Int32 rank) =0;
728 virtual void recv(ArrayView<unsigned char> values,Int32 rank) =0;
729 virtual void recv(ArrayView<short> values,Int32 rank) =0;
730 virtual void recv(ArrayView<unsigned short> values,Int32 rank) =0;
731 virtual void recv(ArrayView<int> values,Int32 rank) =0;
732 virtual void recv(ArrayView<unsigned int> values,Int32 rank) =0;
733 virtual void recv(ArrayView<long> values,Int32 rank) =0;
734 virtual void recv(ArrayView<unsigned long> values,Int32 rank) =0;
735 virtual void recv(ArrayView<long long> values,Int32 rank) =0;
736 virtual void recv(ArrayView<unsigned long long> values,Int32 rank) =0;
737 virtual void recv(ArrayView<float> values,Int32 rank) =0;
738 virtual void recv(ArrayView<double> values,Int32 rank) =0;
739 virtual void recv(ArrayView<long double> values,Int32 rank) =0;
740 virtual void recv(ArrayView<APReal> values,Int32 rank) =0;
741 virtual void recv(ArrayView<Real2> values,Int32 rank) =0;
742 virtual void recv(ArrayView<Real3> values,Int32 rank) =0;
743 virtual void recv(ArrayView<Real2x2> values,Int32 rank) =0;
744 virtual void recv(ArrayView<Real3x3> values,Int32 rank) =0;
745 virtual void recv(ArrayView<HPReal> values,Int32 rank) =0;
746 virtual void recvSerializer(ISerializer* values,Int32 rank) =0;
747 //@}
748
749 /*!
750 * \brief Créé un message non bloquant pour recevoir des données sérialisées du rang \a rank.
751 *
752 * Le message est traité uniquement lors de l'appel à processMessages().
753 */
755
756 /*!
757 * \brief Exécute les opérations des messages \a messages
758 */
760
761 /*!
762 * \brief Exécute les opérations des messages \a messages
763 */
765
766 /*!
767 * \brief Libère les requêtes.
768 */
769 virtual void freeRequests(ArrayView<Parallel::Request> requests) =0;
770
771 /*! @name opérations d'envoie de messages non bloquants
772 *
773 * \brief Envoie un tableau de valeurs à un rang \a rank.
774 *
775 * Envoie les valeurs du tableau \a values à l'instance de rang \a rank.
776 * Le destinataire doit effectuer une réception correspondante (dont le
777 * rang doit être celui de ce gestionnaire et le type et la
778 * taille du tableau doit correspondre) avec la fonction recvValues().
779 * L'envoie est bloquant si \a is_blocking vaut \a true, non bloquant s'il vaut \a false.
780 * Dans ce dernier cas, la requête retournée doit être utilisée dans waitAllRequests()
781 * ou libérée par freeRequests().
782 */
783 //@{
784 virtual Request send(ConstArrayView<char> values,Int32 rank,bool is_blocking) =0;
785 virtual Request send(ConstArrayView<signed char> values,Int32 rank,bool is_blocking) =0;
786 virtual Request send(ConstArrayView<unsigned char> values,Int32 rank,bool is_blocking) =0;
787 virtual Request send(ConstArrayView<short> values,Int32 rank,bool is_blocking) =0;
788 virtual Request send(ConstArrayView<unsigned short> values,Int32 rank,bool is_blocking) =0;
789 virtual Request send(ConstArrayView<int> values,Int32 rank,bool is_blocking) =0;
790 virtual Request send(ConstArrayView<unsigned int> values,Int32 rank,bool is_blocking) =0;
791 virtual Request send(ConstArrayView<long> values,Int32 rank,bool is_blocking) =0;
792 virtual Request send(ConstArrayView<unsigned long> values,Int32 rank,bool is_blocking) =0;
793 virtual Request send(ConstArrayView<long long> values,Int32 rank,bool is_blocking) =0;
794 virtual Request send(ConstArrayView<unsigned long long> values,Int32 rank,bool is_blocking) =0;
795 virtual Request send(ConstArrayView<float> values,Int32 rank,bool is_blocking) =0;
796 virtual Request send(ConstArrayView<double> values,Int32 rank,bool is_blocking) =0;
797 virtual Request send(ConstArrayView<long double> values,Int32 rank,bool is_blocking) =0;
798 virtual Request send(ConstArrayView<APReal> values,Int32 rank,bool is_blocking) =0;
799 virtual Request send(ConstArrayView<Real2> values,Int32 rank,bool is_blocking) =0;
800 virtual Request send(ConstArrayView<Real3> values,Int32 rank,bool is_blocking) =0;
801 virtual Request send(ConstArrayView<Real2x2> values,Int32 rank,bool is_blocking) =0;
802 virtual Request send(ConstArrayView<Real3x3> values,Int32 rank,bool is_blocking) =0;
803 virtual Request send(ConstArrayView<HPReal> values,Int32 rank,bool is_blocking) =0;
804 //@}
805
806 //! @name opérations de réception de messages non bloquantes.
807 //@{
808 /*! Recoie du sous-domaine \a rank le tableau \a values */
809 virtual Request recv(ArrayView<char> values,Int32 rank,bool is_blocking) =0;
810 virtual Request recv(ArrayView<signed char> values,Int32 rank,bool is_blocking) =0;
811 virtual Request recv(ArrayView<unsigned char> values,Int32 rank,bool is_blocking) =0;
812 virtual Request recv(ArrayView<short> values,Int32 rank,bool is_blocking) =0;
813 virtual Request recv(ArrayView<unsigned short> values,Int32 rank,bool is_blocking) =0;
814 virtual Request recv(ArrayView<int> values,Int32 rank,bool is_blocking) =0;
815 virtual Request recv(ArrayView<unsigned int> values,Int32 rank,bool is_blocking) =0;
816 virtual Request recv(ArrayView<long> values,Int32 rank,bool is_blocking) =0;
817 virtual Request recv(ArrayView<unsigned long> values,Int32 rank,bool is_blocking) =0;
818 virtual Request recv(ArrayView<long long > values,Int32 rank,bool is_blocking) =0;
819 virtual Request recv(ArrayView<unsigned long long> values,Int32 rank,bool is_blocking) =0;
820 virtual Request recv(ArrayView<float> values,Int32 rank,bool is_blocking) =0;
821 virtual Request recv(ArrayView<double> values,Int32 rank,bool is_blocking) =0;
822 virtual Request recv(ArrayView<long double> values,Int32 rank,bool is_blocking) =0;
823 virtual Request recv(ArrayView<APReal> values,Int32 rank,bool is_blocking) =0;
824 virtual Request recv(ArrayView<Real2> values,Int32 rank,bool is_blocking) =0;
825 virtual Request recv(ArrayView<Real3> values,Int32 rank,bool is_blocking) =0;
826 virtual Request recv(ArrayView<Real2x2> values,Int32 rank,bool is_blocking) =0;
827 virtual Request recv(ArrayView<Real3x3> values,Int32 rank,bool is_blocking) =0;
828 virtual Request recv(ArrayView<HPReal> values,Int32 rank,bool is_blocking) =0;
829 //@}
830
831 //! @name opérations de réception génériques de messages
832 //@{
833 /*! Reception du message \a message le tableau \a values */
834 virtual Request receive(Span<char> values,const PointToPointMessageInfo& message) =0;
835 virtual Request receive(Span<signed char> values,const PointToPointMessageInfo& message) =0;
836 virtual Request receive(Span<unsigned char> values,const PointToPointMessageInfo& message) =0;
837 virtual Request receive(Span<short> values,const PointToPointMessageInfo& message) =0;
838 virtual Request receive(Span<unsigned short> values,const PointToPointMessageInfo& message) =0;
839 virtual Request receive(Span<int> values,const PointToPointMessageInfo& message) =0;
840 virtual Request receive(Span<unsigned int> values,const PointToPointMessageInfo& message) =0;
841 virtual Request receive(Span<long> values,const PointToPointMessageInfo& message) =0;
842 virtual Request receive(Span<unsigned long> values,const PointToPointMessageInfo& message) =0;
843 virtual Request receive(Span<long long> values,const PointToPointMessageInfo& message) =0;
844 virtual Request receive(Span<unsigned long long> values,const PointToPointMessageInfo& message) =0;
845 virtual Request receive(Span<float> values,const PointToPointMessageInfo& message) =0;
846 virtual Request receive(Span<double> values,const PointToPointMessageInfo& message) =0;
847 virtual Request receive(Span<long double> values,const PointToPointMessageInfo& message) =0;
848 virtual Request receive(Span<APReal> values,const PointToPointMessageInfo& message) =0;
849 virtual Request receive(Span<Real2> values,const PointToPointMessageInfo& message) =0;
850 virtual Request receive(Span<Real3> values,const PointToPointMessageInfo& message) =0;
851 virtual Request receive(Span<Real2x2> values,const PointToPointMessageInfo& message) =0;
852 virtual Request receive(Span<Real3x3> values,const PointToPointMessageInfo& message) =0;
853 virtual Request receive(Span<HPReal> values,const PointToPointMessageInfo& message) =0;
854 virtual Request receiveSerializer(ISerializer* values,const PointToPointMessageInfo& message) =0;
855 //@}
856
857 //! @name opérations d'envoie génériques de messages
858 //@{
859 /*! Envoie du message \a message avec les valeurs du tableau \a values */
860 virtual Request send(Span<const char> values,const PointToPointMessageInfo& message) =0;
861 virtual Request send(Span<const signed char> values,const PointToPointMessageInfo& message) =0;
862 virtual Request send(Span<const unsigned char> values,const PointToPointMessageInfo& message) =0;
863 virtual Request send(Span<const short> values,const PointToPointMessageInfo& message) =0;
864 virtual Request send(Span<const unsigned short> values,const PointToPointMessageInfo& message) =0;
865 virtual Request send(Span<const int> values,const PointToPointMessageInfo& message) =0;
866 virtual Request send(Span<const unsigned int> values,const PointToPointMessageInfo& message) =0;
867 virtual Request send(Span<const long> values,const PointToPointMessageInfo& message) =0;
868 virtual Request send(Span<const unsigned long> values,const PointToPointMessageInfo& message) =0;
869 virtual Request send(Span<const long long> values,const PointToPointMessageInfo& message) =0;
870 virtual Request send(Span<const unsigned long long> values,const PointToPointMessageInfo& message) =0;
871 virtual Request send(Span<const float> values,const PointToPointMessageInfo& message) =0;
872 virtual Request send(Span<const double> values,const PointToPointMessageInfo& message) =0;
873 virtual Request send(Span<const long double> values,const PointToPointMessageInfo& message) =0;
874 virtual Request send(Span<const APReal> values,const PointToPointMessageInfo& message) =0;
875 virtual Request send(Span<const Real2> values,const PointToPointMessageInfo& message) =0;
876 virtual Request send(Span<const Real3> values,const PointToPointMessageInfo& message) =0;
877 virtual Request send(Span<const Real2x2> values,const PointToPointMessageInfo& message) =0;
878 virtual Request send(Span<const Real3x3> values,const PointToPointMessageInfo& message) =0;
879 virtual Request send(Span<const HPReal> values,const PointToPointMessageInfo& message) =0;
880 virtual Request sendSerializer(const ISerializer* values,const PointToPointMessageInfo& message) =0;
881 //@}
882
883 /*!
884 * \brief Sonde si des messages sont disponibles.
885 *
886 * \sa Arccore::MessagePassing::mpProbe().
887 */
888 virtual MessageId probe(const PointToPointMessageInfo& message) =0;
889
890 /*!
891 * \brief Sonde si des messages sont disponibles.
892 *
893 * \sa Arccore::MessagePassing::mpLegacyProbe().
894 */
895 virtual MessageSourceInfo legacyProbe(const PointToPointMessageInfo& message) =0;
896
897 virtual void sendRecv(ConstArrayView<char> send_buf,
898 ArrayView<char> recv_buf,Int32 rank) =0;
899 virtual void sendRecv(ConstArrayView<signed char> send_buf,
900 ArrayView<signed char> recv_buf,Int32 rank) =0;
901 virtual void sendRecv(ConstArrayView<unsigned char> send_buf,
902 ArrayView<unsigned char> recv_buf,Int32 rank) =0;
903 virtual void sendRecv(ConstArrayView<short> send_buf,
904 ArrayView<short> recv_buf,Int32 rank) =0;
905 virtual void sendRecv(ConstArrayView<unsigned short> send_buf,
906 ArrayView<unsigned short> recv_buf,Int32 rank) =0;
907 virtual void sendRecv(ConstArrayView<int> send_buf,
908 ArrayView<int> recv_buf,Int32 rank) =0;
909 virtual void sendRecv(ConstArrayView<unsigned int> send_buf,
910 ArrayView<unsigned int> recv_buf,Int32 rank) =0;
911 virtual void sendRecv(ConstArrayView<long> send_buf,
912 ArrayView<long> recv_buf,Int32 rank) =0;
913 virtual void sendRecv(ConstArrayView<unsigned long> send_buf,
914 ArrayView<unsigned long> recv_buf,Int32 rank) =0;
915 virtual void sendRecv(ConstArrayView<long long> send_buf,
916 ArrayView<long long> recv_buf,Int32 rank) =0;
917 virtual void sendRecv(ConstArrayView<unsigned long long> send_buf,
918 ArrayView<unsigned long long> recv_buf,Int32 rank) =0;
919 virtual void sendRecv(ConstArrayView<float> send_buf,
920 ArrayView<float> recv_buf,Int32 rank) =0;
921 virtual void sendRecv(ConstArrayView<double> send_buf,
922 ArrayView<double> recv_buf,Int32 rank) =0;
923 virtual void sendRecv(ConstArrayView<long double> send_buf,
924 ArrayView<long double> recv_buf,Int32 rank) =0;
925 virtual void sendRecv(ConstArrayView<APReal> send_buf,
926 ArrayView<APReal> recv_buf,Int32 rank) =0;
927 virtual void sendRecv(ConstArrayView<Real2> send_buf,
928 ArrayView<Real2> recv_buf,Int32 rank) =0;
929 virtual void sendRecv(ConstArrayView<Real3> send_buf,
930 ArrayView<Real3> recv_buf,Int32 rank) =0;
931 virtual void sendRecv(ConstArrayView<Real2x2> send_buf,
932 ArrayView<Real2x2> recv_buf,Int32 rank) =0;
933 virtual void sendRecv(ConstArrayView<Real3x3> send_buf,
934 ArrayView<Real3x3> recv_buf,Int32 rank) =0;
935 virtual void sendRecv(ConstArrayView<HPReal> send_buf,
936 ArrayView<HPReal> recv_buf,Int32 rank) =0;
937
938 virtual void allToAll(ConstArrayView<char> send_buf,ArrayView<char> recv_buf,
939 Integer count) =0;
940 virtual void allToAll(ConstArrayView<signed char> send_buf,ArrayView<signed char> recv_buf,
941 Integer count) =0;
942 virtual void allToAll(ConstArrayView<unsigned char> send_buf,ArrayView<unsigned char> recv_buf,
943 Integer count) =0;
944 virtual void allToAll(ConstArrayView<short> send_buf,ArrayView<short> recv_buf,Integer count) =0;
945 virtual void allToAll(ConstArrayView<unsigned short> send_buf,ArrayView<unsigned short> recv_buf,
946 Integer count) =0;
947 virtual void allToAll(ConstArrayView<int> send_buf,ArrayView<int> recv_buf,Integer count) =0;
948 virtual void allToAll(ConstArrayView<unsigned int> send_buf,ArrayView<unsigned int> recv_buf,
949 Integer count) =0;
950 virtual void allToAll(ConstArrayView<long> send_buf,ArrayView<long> recv_buf,Integer count) =0;
951 virtual void allToAll(ConstArrayView<unsigned long> send_buf,ArrayView<unsigned long> recv_buf,
952 Integer count) =0;
953 virtual void allToAll(ConstArrayView<long long> send_buf,ArrayView<long long> recv_buf,
954 Integer count) =0;
955 virtual void allToAll(ConstArrayView<unsigned long long> send_buf,
956 ArrayView<unsigned long long> recv_buf,Integer count) =0;
957 virtual void allToAll(ConstArrayView<float> send_buf,ArrayView<float> recv_buf,
958 Integer count) =0;
959 virtual void allToAll(ConstArrayView<double> send_buf,ArrayView<double> recv_buf,
960 Integer count) =0;
961 virtual void allToAll(ConstArrayView<long double> send_buf,ArrayView<long double> recv_buf,
962 Integer count) =0;
963 virtual void allToAll(ConstArrayView<APReal> send_buf,ArrayView<APReal> recv_buf,
964 Integer count) =0;
965 virtual void allToAll(ConstArrayView<Real2> send_buf,ArrayView<Real2> recv_buf,
966 Integer count) =0;
967 virtual void allToAll(ConstArrayView<Real3> send_buf,ArrayView<Real3> recv_buf,
968 Integer count) =0;
969 virtual void allToAll(ConstArrayView<Real2x2> send_buf,ArrayView<Real2x2> recv_buf,
970 Integer count) =0;
971 virtual void allToAll(ConstArrayView<Real3x3> send_buf,ArrayView<Real3x3> recv_buf,
972 Integer count) =0;
973 virtual void allToAll(ConstArrayView<HPReal> send_buf,ArrayView<HPReal> recv_buf,
974 Integer count) =0;
975
976
977 /*! @name allToAll variable
978 *
979 * \brief Effectue un allToAll variable
980 */
981 //@{
982 virtual void allToAllVariable(ConstArrayView<char> send_buf,Int32ConstArrayView send_count,
983 Int32ConstArrayView send_index,ArrayView<char> recv_buf,
984 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index) =0;
985 virtual void allToAllVariable(ConstArrayView<signed char> send_buf,Int32ConstArrayView send_count,
986 Int32ConstArrayView send_index,ArrayView<signed char> recv_buf,
987 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index) =0;
988 virtual void allToAllVariable(ConstArrayView<unsigned char> send_buf,Int32ConstArrayView send_count,
989 Int32ConstArrayView send_index,ArrayView<unsigned char> recv_buf,
990 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index) =0;
991 virtual void allToAllVariable(ConstArrayView<short> send_buf,Int32ConstArrayView send_count,
992 Int32ConstArrayView send_index,ArrayView<short> recv_buf,
993 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index) =0;
994 virtual void allToAllVariable(ConstArrayView<unsigned short> send_buf,Int32ConstArrayView send_count,
995 Int32ConstArrayView send_index,ArrayView<unsigned short> recv_buf,
996 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index) =0;
997 virtual void allToAllVariable(ConstArrayView<int> send_buf,Int32ConstArrayView send_count,
998 Int32ConstArrayView send_index,ArrayView<int> recv_buf,
999 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index) =0;
1000 virtual void allToAllVariable(ConstArrayView<unsigned int> send_buf,Int32ConstArrayView send_count,
1001 Int32ConstArrayView send_index,ArrayView<unsigned int> recv_buf,
1002 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index) =0;
1003 virtual void allToAllVariable(ConstArrayView<long> send_buf,Int32ConstArrayView send_count,
1004 Int32ConstArrayView send_index,ArrayView<long> recv_buf,
1005 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index) =0;
1006 virtual void allToAllVariable(ConstArrayView<unsigned long> send_buf,Int32ConstArrayView send_count,
1007 Int32ConstArrayView send_index,ArrayView<unsigned long> recv_buf,
1008 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index) =0;
1009 virtual void allToAllVariable(ConstArrayView<long long> send_buf,Int32ConstArrayView send_count,
1010 Int32ConstArrayView send_index,ArrayView<long long> recv_buf,
1011 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index) =0;
1012 virtual void allToAllVariable(ConstArrayView<unsigned long long> send_buf,Int32ConstArrayView send_count,
1013 Int32ConstArrayView send_index,ArrayView<unsigned long long> recv_buf,
1014 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index) =0;
1015 virtual void allToAllVariable(ConstArrayView<float> send_buf,Int32ConstArrayView send_count,
1016 Int32ConstArrayView send_index,ArrayView<float> recv_buf,
1017 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index) =0;
1018 virtual void allToAllVariable(ConstArrayView<double> send_buf,Int32ConstArrayView send_count,
1019 Int32ConstArrayView send_index,ArrayView<double> recv_buf,
1020 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index) =0;
1021 virtual void allToAllVariable(ConstArrayView<long double> send_buf,Int32ConstArrayView send_count,
1022 Int32ConstArrayView send_index,ArrayView<long double> recv_buf,
1023 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index) =0;
1024 virtual void allToAllVariable(ConstArrayView<APReal> send_buf,Int32ConstArrayView send_count,
1025 Int32ConstArrayView send_index,ArrayView<APReal> recv_buf,
1026 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index) =0;
1027 virtual void allToAllVariable(ConstArrayView<Real2> send_buf,Int32ConstArrayView send_count,
1028 Int32ConstArrayView send_index,ArrayView<Real2> recv_buf,
1029 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index) =0;
1030 virtual void allToAllVariable(ConstArrayView<Real3> send_buf,Int32ConstArrayView send_count,
1031 Int32ConstArrayView send_index,ArrayView<Real3> recv_buf,
1032 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index) =0;
1033 virtual void allToAllVariable(ConstArrayView<Real2x2> send_buf,Int32ConstArrayView send_count,
1034 Int32ConstArrayView send_index,ArrayView<Real2x2> recv_buf,
1035 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index) =0;
1036 virtual void allToAllVariable(ConstArrayView<Real3x3> send_buf,Int32ConstArrayView send_count,
1037 Int32ConstArrayView send_index,ArrayView<Real3x3> recv_buf,
1038 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index) =0;
1039 virtual void allToAllVariable(ConstArrayView<HPReal> send_buf,Int32ConstArrayView send_count,
1040 Int32ConstArrayView send_index,ArrayView<HPReal> recv_buf,
1041 Int32ConstArrayView recv_count,Int32ConstArrayView recv_index) =0;
1042 //@}
1043
1044 /*! @name scan
1045 *
1046 * \brief Effectue un algorithme de scan équivalent en sémantique à MPI_Scan
1047 */
1048 //@{
1049 //! Applique un algorithme de prefix-um sur les valeurs de \a v via l'opération \a rt.
1050 virtual void scan(eReduceType rt,ArrayView<char> v) =0;
1051 virtual void scan(eReduceType rt,ArrayView<signed char> v) =0;
1052 virtual void scan(eReduceType rt,ArrayView<unsigned char> v) =0;
1053 virtual void scan(eReduceType rt,ArrayView<short> v) =0;
1054 virtual void scan(eReduceType rt,ArrayView<unsigned short> v) =0;
1055 virtual void scan(eReduceType rt,ArrayView<int> v) =0;
1056 virtual void scan(eReduceType rt,ArrayView<unsigned int> v) =0;
1057 virtual void scan(eReduceType rt,ArrayView<long> v) =0;
1058 virtual void scan(eReduceType rt,ArrayView<unsigned long> v) =0;
1059 virtual void scan(eReduceType rt,ArrayView<long long> v) =0;
1060 virtual void scan(eReduceType rt,ArrayView<unsigned long long> v) =0;
1061 virtual void scan(eReduceType rt,ArrayView<float> v) =0;
1062 virtual void scan(eReduceType rt,ArrayView<double> v) =0;
1063 virtual void scan(eReduceType rt,ArrayView<long double> v) =0;
1064 virtual void scan(eReduceType rt,ArrayView<APReal> v) =0;
1065 virtual void scan(eReduceType rt,ArrayView<Real2> v) =0;
1066 virtual void scan(eReduceType rt,ArrayView<Real3> v) =0;
1067 virtual void scan(eReduceType rt,ArrayView<Real2x2> v) =0;
1068 virtual void scan(eReduceType rt,ArrayView<Real3x3> v) =0;
1069 virtual void scan(eReduceType rt,ArrayView<HPReal> v) =0;
1070 //@}
1071
1072 /*!
1073 * \brief Créé une liste pour gérer les 'ISerializeMessage'.
1074 *
1075 * \deprecated Utiliser createSerializeMessageListRef() à la place.
1076 */
1077 ARCCORE_DEPRECATED_2020("Use createSerializeMessageListRef() instead")
1079
1080 //! Créé une liste pour gérer les 'ISerializeMessage'
1082
1083 //! @name opérations de synchronisation et opérations asynchrones
1084 //@{
1085 //! Effectue une barière
1086 virtual void barrier() =0;
1087
1088 //! Bloque en attendant que les requêtes \a rvalues soient terminées
1089 virtual void waitAllRequests(ArrayView<Request> rvalues) =0;
1090
1091 /*!
1092 * \brief Bloque en attendant qu'une des requêtes \a rvalues soit terminée.
1093 *
1094 * Retourne un tableau d'indices des requêtes réalisées.
1095 */
1096 virtual UniqueArray<Integer> waitSomeRequests(ArrayView<Request> rvalues) =0;
1097
1098 /*!
1099 * \brief Test si une des requêtes \a rvalues est terminée.
1100 *
1101 * Retourne un tableau d'indices des requêtes réalisées.
1102 */
1103 virtual UniqueArray<Integer> testSomeRequests(ArrayView<Request> rvalues) =0;
1104
1105 //@}
1106
1107
1108 //! @name opérations diverses
1109 //@{
1110
1111 /*!
1112 * \brief Retourne un gestionnaire de parallélisme séquentiel.
1113 *
1114 * Cette instance reste propriétaire de l'instance retournée qui ne doit
1115 * pas être détruite. La durée de vie de l'instance retournée est
1116 * la même que cette instance.
1117 */
1119 virtual Ref<IParallelMng> sequentialParallelMngRef() =0;
1120
1121 //@}
1122
1123 /*!
1124 * \brief Retourne une opération pour récupérer les valeurs d'une variable
1125 * sur les entités d'un autre sous-domaine.
1126 *
1127 * L'instance retournée doit être détruite par l'opérateur delete.
1128 */
1129 [[deprecated("Y2021: Use Arcane::ParallelMngUtils;:createGetVariablesValuesOperationRef() instead")]]
1131
1132 /*!
1133 * \brief Retourne une opération pour transférer des valeurs
1134 * entre sous-domaine.
1135 *
1136 * L'instance retournée doit être détruite par l'opérateur delete.
1137 */
1138 [[deprecated("Y2021: Use Arcane::ParallelMngUtils;:createTransferValuesOperationRef() instead")]]
1140
1141 /*!
1142 * \brief Retourne une interface pour transférer des messages
1143 * entre processeurs.
1144 *
1145 * L'instance retournée doit être détruite par l'opérateur delete.
1146 */
1147 [[deprecated("Y2021: Use Arcane::ParallelMngUtils;:createExchangerRef() instead")]]
1149
1150 /*!
1151 * \brief Retourne une interface pour synchroniser des
1152 * variables sur le groupe de la famille \a family
1153 *
1154 * L'instance retournée doit être détruite par l'opérateur delete.
1155 */
1156 [[deprecated("Y2021: Use Arcane::ParallelMngUtils;:createSynchronizerRef() instead")]]
1158
1159 /*!
1160 * \brief Retourne une interface pour synchroniser des
1161 * variables sur le groupe \a group.
1162 *
1163 * L'instance retournée doit être détruite par l'opérateur delete.
1164 */
1165 [[deprecated("Y2021: Use Arcane::ParallelMngUtils;:createSynchronizerRef() instead")]]
1167
1168 /*!
1169 * \brief Créé une instance contenant les infos sur la topologie des rangs de ce gestionnnaire.
1170 *
1171 * Cette opération est collective.
1172 *
1173 * L'instance retournée doit être détruite par l'opérateur delete.
1174 */
1175 [[deprecated("Y2021: Use Arcane::ParallelMngUtils;:createTopologyRef() instead")]]
1177
1178 /*!
1179 * \brief Informations sur la réplication.
1180 *
1181 * Le pointeur retourné n'est jamais nul et reste la propriété de cette
1182 * instance.
1183 */
1185
1186 /*!
1187 * \internal
1188 * \brief Positionne les Informations sur la réplication.
1189 *
1190 * Cette méthode est interne à Arcane et ne doit être appelée que lors de l'initialisation.
1191 */
1192 virtual void setReplication(IParallelReplication* v) =0;
1193
1194 /*!
1195 * \brief Créé un nouveau gestionnaire de parallélisme pour un sous-ensemble
1196 * des rangs.
1197 *
1198 * \deprecated Utiliser createSubParallelMngRef() à la place
1199 */
1200 ARCCORE_DEPRECATED_2020("Use createSubParallelMngRef() instead")
1202
1203 /*!
1204 * \brief Créé un nouveau gestionnaire de parallélisme pour un sous-ensemble
1205 * des rangs.
1206 *
1207 * Cette opération est collective.
1208 *
1209 * Cett opération permet de créér un nouveau gestionnaire contenant
1210 * uniquement les rangs \a kept_ranks de ce gestionnaire.
1211 *
1212 * Si le rang appelant cette opération n'est pas dans \a kept_ranks,
1213 * retourne 0.
1214 *
1215 * L'instance retournée doit être détruire par l'opérateur delete.
1216 */
1218
1219 /*!
1220 * \brief Créé une liste de requêtes pour ce gestionnaire.
1221 */
1223
1224 //! Gestionnaire des statistiques
1225 virtual IStat* stat() =0;
1226
1227 //! Affiche des statistiques liées à ce gestionnaire du parallélisme
1228 virtual void printStats() =0;
1229
1230 //! Interface des opérations collectives non blocantes.
1232
1233 //! Gestionnaire de message de %Arccore associé
1235
1236 public:
1237
1238 //! API interne à Arcane
1239 virtual IParallelMngInternal* _internalApi() =0;
1240
1241 private:
1242
1243 /*!
1244 * \internal
1245 * \brief Fabrique des fonctions utilitaires.
1246 */
1247 virtual Ref<IParallelMngUtilsFactory> _internalUtilsFactory() const =0;
1248};
1249
1250/*---------------------------------------------------------------------------*/
1251/*---------------------------------------------------------------------------*/
1252/*!
1253 * \internal
1254 * \brief Interface d'un conteneur de 'IParallelMng'.
1255 *
1256 * Un conteneur de IParallelMng gère en mode mémoire partagée un ensemble
1257 * de IParallelMng d'un même communicateur.
1258 *
1259 * \note Ne pas utiliser en dehors d'Arcane. API non stabilisée.
1260 */
1261class ARCANE_CORE_EXPORT IParallelMngContainer
1262{
1264 protected:
1265 virtual ~IParallelMngContainer() = default;
1266 public:
1267 //! Créé le IParallelMng pour le rang local \a local_rank
1269};
1270
1271/*---------------------------------------------------------------------------*/
1272/*---------------------------------------------------------------------------*/
1273/*!
1274 * \internal
1275 * \brief Interface d'une fabrique de conteneur de 'IParallelMng'.
1276 * \note Ne pas utiliser en dehors d'Arcane. API non stabilisée.
1277 */
1278class ARCANE_CORE_EXPORT IParallelMngContainerFactory
1279{
1280 public:
1281 virtual ~IParallelMngContainerFactory() = default;
1282 public:
1283 /*!
1284 * \brief Créé un conteneur pour \a nb_local_rank rangs locaux et
1285 * avec comme communicateur \a communicator.
1286 *
1287 * Le communicateur MPI \a communicator peut être nul en mode séquentiel ou
1288 * mémoire partagé.
1289 * Le nombre de rangs locaux vaut 1 en mode séquentiel ou en mode MPI pure.
1290 *
1291 * Le second communicateur \a machine_communicator est utile qu'en mode
1292 * hydride.
1293 * Dans les autres modes, il peut être nul.
1294 */
1297 Parallel::Communicator machine_communicator) =0;
1298};
1299
1300/*---------------------------------------------------------------------------*/
1301/*---------------------------------------------------------------------------*/
1302
1303} // End namepsace Arcane
1304
1305/*---------------------------------------------------------------------------*/
1306/*---------------------------------------------------------------------------*/
1307
1308#endif
Fichier contenant les déclarations concernant le modèle de programmation par échange de message.
#define ARCCORE_DECLARE_REFERENCE_COUNTED_INCLASS_METHODS()
Macro pour déclarer les méthodes virtuelles gérant les compteurs de référence.
Déclarations des types utilisés dans Arcane.
Emulation de réel en précision arbitraire.
Vue modifiable d'un tableau d'un type T.
Vue constante d'un tableau de type T.
Classe implémentant un réel Haute Précision.
Definition HPReal.h:161
Opérations pour accéder aux valeurs de variables d'un autre sous-domaine.
Interface du gestionnaire des entrées sorties.
Definition IIOMng.h:36
Interface d'une famille d'entités.
Definition IItemFamily.h:84
Échange d'informations entre processeurs.
virtual Ref< IParallelMngContainer > _createParallelMngBuilder(Int32 nb_local_rank, Parallel::Communicator communicator, Parallel::Communicator machine_communicator)=0
Créé un conteneur pour nb_local_rank rangs locaux et avec comme communicateur communicator.
virtual Ref< IParallelMng > _createParallelMng(Int32 local_rank, ITraceMng *tm)=0
Créé le IParallelMng pour le rang local local_rank.
Interface du gestionnaire de parallélisme pour un sous-domaine.
virtual void gatherVariable(ConstArrayView< char > send_buf, Array< char > &recv_buf, Int32 rank)=0
Effectue un regroupement sur tous les processeurs.
virtual bool isThreadImplementation() const =0
Indique si l'implémentation utilise les threads.
virtual ITraceMng * traceMng() const =0
Gestionnaire de traces.
virtual void printStats()=0
Affiche des statistiques liées à ce gestionnaire du parallélisme.
virtual void computeMinMaxSum(char val, char &min_val, char &max_val, char &sum_val, Int32 &min_rank, Int32 &max_rank)=0
Calcule en une opération la somme, le min, le max d'une valeur.
virtual Int32 commRank() const =0
Rang de cette instance dans le communicateur.
virtual Ref< Parallel::IRequestList > createRequestListRef()=0
Créé une liste de requêtes pour ce gestionnaire.
virtual IParallelReplication * replication() const =0
Informations sur la réplication.
virtual ISerializeMessage * createSendSerializer(Int32 rank)=0
Créé un message non bloquant pour envoyer des données sérialisées au rang rank.
virtual void computeMinMaxSum(ConstArrayView< char > values, ArrayView< char > min_values, ArrayView< char > max_values, ArrayView< char > sum_values, ArrayView< Int32 > min_ranks, ArrayView< Int32 > max_ranks)=0
Calcule en une opération la somme, le min, le max d'une valeur.
virtual IParallelMng * sequentialParallelMng()=0
Retourne un gestionnaire de parallélisme séquentiel.
virtual ITimeStats * timeStats() const =0
Gestionnaire de statistiques associé (peut être nul)
virtual ISerializeMessageList * createSerializeMessageList()=0
Créé une liste pour gérer les 'ISerializeMessage'.
virtual IStat * stat()=0
Gestionnaire des statistiques.
virtual MessageSourceInfo legacyProbe(const PointToPointMessageInfo &message)=0
Sonde si des messages sont disponibles.
virtual UniqueArray< Integer > waitSomeRequests(ArrayView< Request > rvalues)=0
Bloque en attendant qu'une des requêtes rvalues soit terminée.
virtual ~IParallelMng()=default
Libère les ressources.
virtual ISerializeMessage * createReceiveSerializer(Int32 rank)=0
Créé un message non bloquant pour recevoir des données sérialisées du rang rank.
virtual void processMessages(ConstArrayView< ISerializeMessage * > messages)=0
Exécute les opérations des messages messages.
virtual void broadcastMemoryBuffer(ByteArray &bytes, Int32 rank)=0
Effectue un broadcast d'une zone mémoire.
virtual Ref< ISerializeMessageList > createSerializeMessageListRef()=0
Créé une liste pour gérer les 'ISerializeMessage'.
virtual void reduce(eReduceType rt, ArrayView< char > v)=0
Effectue la réduction de type rt sur le tableau v.
virtual ITimeMetricCollector * timeMetricCollector() const =0
Collecteur Arccore des statistiques temporelles (peut être nul)
virtual void recv(ArrayView< char > values, Int32 rank)=0
virtual void scan(eReduceType rt, ArrayView< char > v)=0
Applique un algorithme de prefix-um sur les valeurs de v via l'opération rt.
virtual IParallelTopology * createTopology()=0
Créé une instance contenant les infos sur la topologie des rangs de ce gestionnnaire.
virtual void allGatherVariable(ConstArrayView< char > send_buf, Array< char > &recv_buf)=0
Effectue un regroupement sur tous les processeurs.
virtual bool isMasterIO() const =0
true si l'instance est un gestionnaire maître des entrées/sorties.
virtual Int32 commSize() const =0
Nombre d'instance dans le communicateur.
virtual void scatterVariable(ConstArrayView< char > send_buf, ArrayView< char > recv_buf, Integer root)=0
Scinde un tableau sur plusieurs processeurs.
virtual bool isHybridImplementation() const =0
Indique si l'implémentation utilise le mode hybride.
virtual void 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 IIOMng * ioMng() const =0
Gestionnaire des entrées/sorties.
virtual IVariableSynchronizer * createSynchronizer(IItemFamily *family)=0
Retourne une interface pour synchroniser des variables sur le groupe de la famille family.
virtual IThreadMng * threadMng() const =0
Gestionnaire de threads.
virtual void waitAllRequests(ArrayView< Request > rvalues)=0
Bloque en attendant que les requêtes rvalues soient terminées.
virtual MessageId probe(const PointToPointMessageInfo &message)=0
Sonde si des messages sont disponibles.
virtual void build()=0
Construit l'instance.
virtual void initialize()=0
Initialise le gestionnaire du parallélisme.
virtual Parallel::Communicator communicator() const =0
Communicateur MPI associé à ce gestionnaire.
virtual ITransferValuesParallelOperation * createTransferValuesOperation()=0
Retourne une opération pour transférer des valeurs entre sous-domaine.
virtual IParallelMng * worldParallelMng() const =0
Gestionnaire de parallélisme sur l'ensemble des ressources allouées.
virtual void gather(ConstArrayView< char > send_buf, ArrayView< char > recv_buf, Int32 rank)=0
Effectue un regroupement sur un processeurs. Il s'agit d'une opération collective....
virtual IParallelNonBlockingCollective * nonBlockingCollective() const =0
Interface des opérations collectives non blocantes.
virtual ITimerMng * timerMng() const =0
Gestionnaire de timers.
virtual IParallelMng * createSubParallelMng(Int32ConstArrayView kept_ranks)=0
Créé un nouveau gestionnaire de parallélisme pour un sous-ensemble des rangs.
virtual IMessagePassingMng * messagePassingMng() const =0
Gestionnaire de message de Arccore associé
virtual IGetVariablesValuesParallelOperation * createGetVariablesValuesOperation()=0
Retourne une opération pour récupérer les valeurs d'une variable sur les entités d'un autre sous-doma...
virtual Ref< IParallelMng > createSubParallelMngRef(Int32ConstArrayView kept_ranks)=0
Créé un nouveau gestionnaire de parallélisme pour un sous-ensemble des rangs.
virtual UniqueArray< Integer > testSomeRequests(ArrayView< Request > rvalues)=0
Test si une des requêtes rvalues est terminée.
virtual IParallelExchanger * createExchanger()=0
Retourne une interface pour transférer des messages entre processeurs.
virtual Integer masterIORank() const =0
Rang de l'instance gérant les entrées/sorties (pour laquelle isMasterIO() est vrai)
virtual IParallelMngInternal * _internalApi()=0
API interne à Arcane.
virtual Request receive(Span< char > values, const PointToPointMessageInfo &message)=0
virtual Parallel::Communicator machineCommunicator() const
Communicateur MPI issus du communicateur communicator() réunissant tous les processus du noeud de cal...
virtual ARCANE_DEPRECATED_120 void * mpiCommunicator()
Adresse du communicateur MPI associé à ce gestionnaire.
Definition Parallel.cc:51
virtual bool isParallel() const =0
Retourne true si l'exécution est parallèle.
virtual void freeRequests(ArrayView< Parallel::Request > requests)=0
Libère les requêtes.
virtual void * getMPICommunicator()=0
Adresse du communicateur MPI associé à ce gestionnaire.
virtual void setTimeStats(ITimeStats *time_stats)=0
Positionne le gestionnaire de statistiques.
virtual char reduce(eReduceType rt, char v)=0
Effectue la réduction de type rt sur le réel v et retourne la valeur.
virtual void barrier()=0
Effectue une barière.
Interface des opérations parallèles collectives non bloquantes.
Informations sur la réplication des sous-domaines en parallèle.
Informations sur la topologie d'allocation des coeurs de calcul.
Interface d'un gestionnaire de thread.
Definition IThreadMng.h:30
Interface gérant les statistiques sur l'exécution.
Interface d'un gestionnaire de timer.
Definition ITimerMng.h:49
Interface du gestionnaire de traces.
Envoie de valeurs sur différents processeurs.
Interface d'un service de synchronisation de variable.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Communicateur pour l'échange de message.
Interface du gestionnaire des échanges de messages.
Informations sur la source d'un message.
Informations pour envoyer/recevoir un message point à point.
Requête d'un message.
Definition Request.h:77
Statistiques sur le parallélisme.
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
Référence à une instance.
Vue d'un tableau d'éléments de type T.
Definition Span.h:633
Chaîne de caractères unicode.
eReduceType
Types des réductions supportées.
Implémentation de la concurrence.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
Array< Byte > ByteArray
Tableau dynamique à une dimension de caractères.
Definition UtilsTypes.h:137
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:498
std::int32_t Int32
Type entier signé sur 32 bits.