Arcane  v3.14.10.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-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* IParallelSuperMng.h (C) 2000-2020 */
9/* */
10/* Interface du superviseur du parallélisme. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_IPARALLELSUPERMNG_H
13#define ARCANE_IPARALLELSUPERMNG_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19#include "arcane/Parallel.h"
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
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 */
134 virtual Int32 nbLocalSubDomain() =0;
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
Déclarations des types utilisés dans Arcane.
Interface de l'application.
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
Vue modifiable d'un tableau d'un type T.
Communicateur pour l'échange de message.
Requête d'un message.
Definition Request.h:77
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eReduceType
Types des réductions supportées.