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