Arcane
v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ArcaneLauncher.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
/* ArcaneLauncher.h (C) 2000-2024 */
9
/* */
10
/* Classe gérant l'exécution. */
11
/*---------------------------------------------------------------------------*/
12
#ifndef ARCANE_LAUNCHER_ARCANELAUNCHER_H
13
#define ARCANE_LAUNCHER_ARCANELAUNCHER_H
14
/*---------------------------------------------------------------------------*/
15
/*---------------------------------------------------------------------------*/
16
17
#include "arcane/launcher/LauncherGlobal.h"
18
19
// Les fichiers suivants ne sont pas directement utilisés dans ce '.h'
20
// mais sont ajoutés pour que le code utilisateur n'ait besoin d'inclure
21
// que 'ArcaneLauncher.h'.
22
#include "arcane/utils/ApplicationInfo.h"
23
#include "arcane/utils/CommandLineArguments.h"
24
25
#include "arcane/core/ApplicationBuildInfo.h"
26
#include "arcane/core/DotNetRuntimeInitialisationInfo.h"
27
#include "arcane/core/AcceleratorRuntimeInitialisationInfo.h"
28
29
#include "arcane/launcher/DirectExecutionContext.h"
30
#include "arcane/launcher/DirectSubDomainExecutionContext.h"
31
#include "arcane/launcher/IDirectExecutionContext.h"
32
#include "arcane/launcher/StandaloneAcceleratorMng.h"
33
#include "arcane/launcher/StandaloneSubDomain.h"
34
35
#include <functional>
36
37
/*---------------------------------------------------------------------------*/
38
/*---------------------------------------------------------------------------*/
39
40
namespace
Arcane
41
{
42
class
IMainFactory;
43
44
/*---------------------------------------------------------------------------*/
45
/*---------------------------------------------------------------------------*/
46
/*!
47
* \brief Classe de gestion de l'exécution.
48
*
49
* Il existe deux modes d'utilisation d'%Arcane : le mode classique et le mode
50
* autonome.
51
*
52
* Quel que soit le mode retenu, la première chose à faire est d'initialiser %Arcane en
53
* positionnant les arguments via la méthode init() car certains paramètres de la
54
* ligne de commande sont utilisés pour remplir les propriétés
55
* de applicationInfo() et dotNetRuntimeInitialisationInfo().
56
*
57
* La page \ref arcanedoc_execution_launcher donne des exemples d'usage.
58
*
59
* Les deux modes d'éxécutions sont:
60
* - le mode classique qui utilise une boucle en temps et donc l'exécution
61
* complète sera gérée par %Arcane. Dans mode il suffit d'appeler
62
* la méthode run() sans arguments.
63
* - le mode autonome qui permet d'utiliser %Arcane sous la forme d'une bibliothèque.
64
* Pour ce mode il faut utiliser la méthode createStandaloneSubDomain()
65
* ou createStandaloneAcceleratorMng(). La page \ref arcanedoc_execution_direct_execution
66
* décrit comment utiliser ce mécanisme.
67
*
68
* L'usage classique est le suivant:
69
*
70
* \code
71
* int main(int* argc,char* argv[])
72
* {
73
* ArcaneLauncher::init(CommandLineArguments(&argc,&argv));
74
* auto& app_info = ArcaneLauncher::applicationInfo();
75
* app_info.setCodeName("MyCode");
76
* app_info.setCodeVersion(VersionInfo(1,0,0));
77
* return ArcaneLauncher::run();
78
* }
79
* \endcode
80
*
81
* L
82
*/
83
class
ARCANE_LAUNCHER_EXPORT
ArcaneLauncher
84
{
85
friend
StandaloneSubDomain
;
86
87
public
:
88
89
/*!
90
* \brief Positionne les informations à partir des arguments de la ligne
91
* de commande et initialise le lanceur.
92
*
93
* Cette méthode remplit les valeurs non initialisées
94
* de applicationInfo() et dotNetRuntimeInitialisationInfo() avec
95
* les paramètres spécifiés dans \a args.
96
*
97
* Il ne faut appeler cette méthode qu'une seule fois. Les appels supplémentaires
98
* génèrent une exception FatalErrorException.
99
*/
100
static
void
init(
const
CommandLineArguments
& args);
101
102
/*!
103
* \brief Indique si init() a déjà été appelé.
104
*/
105
static
bool
isInitialized();
106
107
/*!
108
* \brief Point d'entrée de l'exécutable dans Arcane.
109
*
110
* Cette méthode appelle initialise l'application, lit le jeu de données
111
* et exécute le code suivant la boucle en temps spécifiée dans le jeu de donnée.
112
*
113
* \retval 0 en cas de succès
114
* \return une valeur différente de 0 en cas d'erreur.
115
*/
116
static
int
run();
117
118
/*!
119
* \brief Exécution directe.
120
*
121
* Initialise l'application et appelle la fonction \a func après l'initialisation
122
* Cette méthode ne doit être appelée qu'en exécution séquentielle.
123
*/
124
static
int
run(std::function<
int
(
DirectExecutionContext
&)> func);
125
126
/*!
127
* \brief Exécution directe avec création de sous-domaine.
128
*
129
* Initialise l'application et créé le ou les sous-domaines et appelle
130
* la fonction \a func après.
131
* Cette méthode permet d'exécuter du code sans passer par les mécanismes
132
* de la boucle en temps.
133
* Cette méthode permet de gérer automatiquement la création des sous-domaines
134
* en fonction des paramètres de lancement (exécution parallèle MPI, multithreading, ...).
135
*/
136
static
int
run(std::function<
int
(
DirectSubDomainExecutionContext
&)> func);
137
138
/*!
139
* \brief Positionne la fabrique par défaut pour créer les différents gestionnaires
140
*
141
* Cette méthode doit être appelée avant run(). L'instance passée en argument doit
142
* rester valide durant l'exécution de run(). L'appelant reste propriétaire
143
* de l'instance.
144
*/
145
static
void
setDefaultMainFactory(
IMainFactory
* mf);
146
147
/*!
148
* \brief Informations sur l'application.
149
*
150
* Cette méthode permet de récupérer l'instance de `ApplicationInfo`
151
* qui sera utilisée lors de l'appel à run().
152
*
153
* Pour être prise en compte, ces informations doivent être modifiées
154
* avant l'appel à run() ou à runDirect().
155
*/
156
static
ApplicationInfo
& applicationInfo();
157
158
/*!
159
* \brief Informations sur les paramêtre d'exécutions de l'application.
160
*
161
* Cette méthode permet de récupérer l'instance de `ApplicationBuildInfo`
162
* qui sera utilisée lors de l'appel à run().
163
*
164
* Pour être prise en compte, ces informations doivent être modifiées
165
* avant l'appel à run() ou à runDirect().
166
*/
167
static
ApplicationBuildInfo
& applicationBuildInfo();
168
169
/*!
170
* \brief Informations pour l'initialisation du runtime '.Net'.
171
*
172
* Pour être prise en compte, ces informations doivent être modifiées
173
* avant l'appel à run() ou à rundDirect().
174
*/
175
static
DotNetRuntimeInitialisationInfo
& dotNetRuntimeInitialisationInfo();
176
177
/*!
178
* \brief Informations pour l'initialisation des accélerateurs.
179
*
180
* Pour être prise en compte, ces informations doivent être modifiées
181
* avant l'appel à run() ou à rundDirect().
182
*/
183
static
AcceleratorRuntimeInitialisationInfo
& acceleratorRuntimeInitialisationInfo();
184
185
//! Nom complet du répertoire où se trouve l'exécutable
186
static
String
getExeDirectory();
187
188
/*!
189
* \brief Créé une implémentation autonome pour gérer les accélérateurs.
190
*
191
* Il faut appeler init() avant d'appeler cette méthode. Le choix du
192
* runtime (Arcane::Accelerator::eExecutionPolicy) est déterminé
193
* par les arguments utilisés lors de l'appel à init() ou spécifiés via
194
* acceleratorRuntimeInitialisationInfo() (voir
195
* \ref arcanedoc_parallel_accelerator_exec pour plus d'informations)
196
*/
197
static
StandaloneAcceleratorMng
createStandaloneAcceleratorMng();
198
199
/*!
200
* \brief Créé une implémentation autonome pour gérer un sous-domaine.
201
*
202
* Une seule instance de StandaloneSubDomain est autorisée. Si on
203
* appelle cette méthode plus d'une fois cela génère une exception.
204
*
205
* Il faut appeler init() avant d'appeler cette méthode.
206
*
207
* Si on appelle cette méthode il ne faut pas appeler d'autres méthodes
208
* d'exécution de ArcaneLauncher (par exemple ArcaneLauncher::run()).
209
*
210
* \a case_file_name est le nom du fichier contenant le jeu de données
211
* Si nul, alors il n'y a pas de jeu de données.
212
*/
213
static
StandaloneSubDomain
createStandaloneSubDomain(
const
String
& case_file_name);
214
215
public
:
216
217
/*!
218
* \deprecated
219
*/
220
ARCCORE_DEPRECATED_2020(
"Use run(func) instead"
)
221
static
int
runDirect(std::function<
int
(
IDirectExecutionContext
*)> func);
222
223
/*!
224
* \deprecated
225
*/
226
ARCCORE_DEPRECATED_2020(
"Use init(args) instead"
)
227
static
void
setCommandLineArguments(const
CommandLineArguments
& args)
228
{
229
init(args);
230
}
231
232
private
:
233
234
static
void
_initStandalone();
235
static
void
_notifyRemoveStandaloneSubDomain();
236
};
237
238
/*---------------------------------------------------------------------------*/
239
/*---------------------------------------------------------------------------*/
240
241
}
// End namespace Arcane
242
243
/*---------------------------------------------------------------------------*/
244
/*---------------------------------------------------------------------------*/
245
246
#endif
Arcane::Accelerator::AcceleratorRuntimeInitialisationInfo
Informations pour l'initialisation des accélérateurs.
Definition
accelerator/core/AcceleratorRuntimeInitialisationInfo.h:34
Arcane::ApplicationBuildInfo
Informations pour construire une instance de IApplication.
Definition
ApplicationBuildInfo.h:32
Arcane::ApplicationInfo
Informations sur une application.
Definition
ApplicationInfo.h:40
Arcane::ArcaneLauncher
Classe de gestion de l'exécution.
Definition
ArcaneLauncher.h:84
Arcane::CommandLineArguments
Arguments de la ligne de commande.
Definition
CommandLineArguments.h:49
Arcane::DirectExecutionContext
Contexte d'exécution directe.
Definition
DirectExecutionContext.h:33
Arcane::DirectSubDomainExecutionContext
Contexte d'exécution directe avec création d'un sous-domaine.
Definition
DirectSubDomainExecutionContext.h:32
Arcane::DotNetRuntimeInitialisationInfo
Informations pour l'initialisation du runtime '.Net'.
Definition
DotNetRuntimeInitialisationInfo.h:32
Arcane::IDirectExecutionContext
Definition
IDirectExecutionContext.h:33
Arcane::IMainFactory
Definition
IMainFactory.h:93
Arcane::StandaloneAcceleratorMng
Implémentation autonome de 'IAcceleratorMng.h'.
Definition
StandaloneAcceleratorMng.h:42
Arcane::StandaloneSubDomain
Implémentation autonome d'un sous-domaine.
Definition
StandaloneSubDomain.h:41
Arccore::String
Chaîne de caractères unicode.
Definition
arccore/src/base/arccore/base/String.h:70
Arcane
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Definition
AbstractCaseDocumentVisitor.cc:20
arcane
launcher
ArcaneLauncher.h
Généré le Lundi 18 Novembre 2024 02:56:51 pour Arcane par
1.9.8