Arcane  v3.16.9.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IParallelSuperMng.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/* IParallelSuperMng.h (C) 2000-2025 */
9/* */
10/* Interface du superviseur du parallélisme. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_IPARALLELSUPERMNG_H
13#define ARCANE_CORE_IPARALLELSUPERMNG_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30class IApplication;
31class IParallelMng;
32class IThreadMng;
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36/*!
37 * \internal
38 * \brief Classe abstraite du superviseur de parallélisme.
39 */
40class ARCANE_CORE_EXPORT IParallelSuperMng
41{
42 public:
43
44 typedef Parallel::Request Request;
45 typedef Parallel::eReduceType eReduceType;
46
47 public:
48
49 virtual ~IParallelSuperMng() {} //!< Libère les ressources.
50
51 public:
52
53 /*!
54 * \brief Construit les membres l'instance.
55 *
56 * L'instance n'est pas utilisable tant que cette méthode n'a pas été
57 * appelée. Cette méthode doit être appelée avant initialize().
58 *
59 * \warning Cette méthode ne doit être appelée qu'une seule fois.
60 */
61 virtual void build() =0;
62
63 /*!
64 * \brief Initialise l'instance.
65 *
66 * L'instance n'est pas utilisable tant que cette méthode n'a pas été
67 * appelée.
68 * \warning Cette méthode ne doit être appelée qu'une seule fois.
69 */
70 virtual void initialize() =0;
71
72 public:
73
74 //! Retourne le gestionnaire principal.
75 virtual IApplication* application() const =0;
76
77 //! Gestionnaire de thread.
78 virtual IThreadMng* threadMng() const =0;
79
80 //! Retourne \a true si l'exécution est parallèle
81 virtual bool isParallel() const =0;
82
83 //! Retourne le numéro du process (compris entre 0 et nbProcess()-1)
84 virtual Int32 commRank() const =0;
85
86 //! Retourne le nombre total de process utilisés
87 virtual Int32 commSize() const =0;
88
89 //! Rang de cette instance pour les traces.
90 virtual Int32 traceRank() const =0;
91
92 /*!
93 * \brief Adresse du communicateur MPI associé à ce gestionnaire.
94 *
95 * Le communicateur n'est valide que si on utilise MPI. Sinon, l'adresse
96 * retournée est 0. La valeur retournée est de type (MPI_Comm*).
97 */
98
99 virtual void* getMPICommunicator() =0;
100
101 /*!
102 * \brief Communicateur MPI associé à ce gestionnaire
103 *
104 * \sa IParallelMng::communicator()
105 */
107
108 /*!
109 * \internal
110 * \brief Créé un gestionnaire de parallélisme pour l'ensemble des coeurs alloués.
111 *
112 * Cette opération est collective.
113 *
114 * Cette méthode ne doit être appelée qu'une seule fois lors de l'initialisation.
115 *
116 * \a local_rank est le rang local de l'appelant dans la liste des rangs.
117 * En mode pure MPI, ce rang est toujours 0 car il n'y a qu'un seul
118 * thread. En mode Thread ou Thread/MPI, il s'agit du rang du thread utilisé
119 * lors de la création.
120 *
121 * Le gestionnaire retourné reste la propriété de cette instance et
122 * ne doit pas être détruit.
123 *
124 * A usage interne uniquement.
125 */
126 virtual Ref<IParallelMng> internalCreateWorldParallelMng(Int32 local_rank) =0;
127
128 /*!
129 * \brief Nombre de sous-domaines à créér localement.
130 * - 1 si séquentiel.
131 * - 1 si MPI pur
132 * - n si THREAD ou THREAD/MPI
133 */
135
136 /*!
137 * \brief Tente de faire un abort.
138 *
139 * Cette méthode est appelée lorsqu'une exception a été généré et que le
140 * cas en cours d'exécution doit s'interrompre. Elle permet d'effectuer les
141 * opérations de nettoyage du gestionnaire si besoin est.
142 */
143 virtual void tryAbort() =0;
144
145 //! \a true si l'instance est un gestionnaire maître des entrées/sorties.
146 virtual bool isMasterIO() const =0;
147
148 /*!
149 \brief Rang de l'instance gérant les entrées/sorties (pour laquelle isMasterIO() est vrai)
150 *
151 * Dans l'implémentation actuelle, il s'agit toujours du processeur de rang 0.
152 */
153 virtual Int32 masterIORank() const =0;
154
155 /*!
156 * \brief Gestionnaire de parallèlisme pour l'ensemble des ressources allouées.
157 */
158 //virtual IParallelMng* worldParallelMng() const =0;
159
160 //! Effectue une barière
161 virtual void barrier() =0;
162
163 public:
164
165 //! @name opérations de broadcast
166 //@{
167 /*!
168 * \brief Envoie un tableau de valeurs sur tous les processus
169 * Cette opération synchronise le tableau de valeur \a send_buf sur tous
170 * les processus. Le tableau utilisé est celui du processus dont
171 * l'identifiant (processId()) est \a process_id.
172 * Tous les processus doivent appelés cette méthode avec
173 * le même paramètre \a process_id et avoir un tableau \a send_buf
174 * contenant le même nombre d'éléments.
175 */
176 virtual void broadcast(ByteArrayView send_buf,Integer process_id) =0;
177 virtual void broadcast(Int32ArrayView send_buf,Integer process_id) =0;
178 virtual void broadcast(Int64ArrayView send_buf,Integer process_id) =0;
179 virtual void broadcast(RealArrayView send_buf,Integer process_id) =0;
180 //@}
181};
182
183/*---------------------------------------------------------------------------*/
184/*---------------------------------------------------------------------------*/
185
186} // End namespace Arcane
187
188/*---------------------------------------------------------------------------*/
189/*---------------------------------------------------------------------------*/
190
191#endif
Fichier contenant les déclarations concernant le modèle de programmation par échange de message.
Déclarations des types utilisés dans Arcane.
Interface de l'application.
Interface du gestionnaire de parallélisme pour un sous-domaine.
virtual void broadcast(ByteArrayView send_buf, Integer process_id)=0
Envoie un tableau de valeurs sur tous les processus Cette opération synchronise le tableau de valeur ...
virtual void tryAbort()=0
Tente de faire un abort.
virtual ~IParallelSuperMng()
Libère les ressources.
virtual IThreadMng * threadMng() const =0
Gestionnaire de thread.
virtual bool isMasterIO() const =0
true si l'instance est un gestionnaire maître des entrées/sorties.
virtual Int32 traceRank() const =0
Rang de cette instance pour les traces.
virtual Int32 commRank() const =0
Retourne le numéro du process (compris entre 0 et nbProcess()-1)
virtual void barrier()=0
Gestionnaire de parallèlisme pour l'ensemble des ressources allouées.
virtual Parallel::Communicator communicator() const =0
Communicateur MPI associé à ce gestionnaire.
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 IApplication * application() const =0
Retourne le gestionnaire principal.
virtual Int32 nbLocalSubDomain()=0
Nombre de sous-domaines à créér localement.
virtual void initialize()=0
Initialise l'instance.
virtual Int32 masterIORank() const =0
Rang de l'instance gérant les entrées/sorties (pour laquelle isMasterIO() est vrai)
virtual void build()=0
Construit les membres l'instance.
virtual Int32 commSize() const =0
Retourne le nombre total de process utilisés.
Interface d'un gestionnaire de thread.
Definition IThreadMng.h:30
Communicateur pour l'échange de message.
Requête d'un message.
Definition Request.h:77
Référence à une instance.
eReduceType
Types des réductions supportées.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
ArrayView< Int64 > Int64ArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
Definition UtilsTypes.h:538
ArrayView< Byte > ByteArrayView
Equivalent C d'un tableau à une dimension de caractères.
Definition UtilsTypes.h:534
Int32 Integer
Type représentant un entier.
ArrayView< Int32 > Int32ArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:540
ArrayView< Real > RealArrayView
Equivalent C d'un tableau à une dimension de réels.
Definition UtilsTypes.h:546
std::int32_t Int32
Type entier signé sur 32 bits.