Arcane  4.2.1.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-2026 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-2026 */
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
40namespace Arcane
41{
42class IMainFactory;
43
44/*---------------------------------------------------------------------------*/
45/*---------------------------------------------------------------------------*/
46
47/*!
48 * \brief Classe de gestion de l'exécution.
49 *
50 * Il existe deux modes d'utilisation d'%Arcane : le mode classique et le mode
51 * autonome.
52 *
53 * Quel que soit le mode retenu, la première chose à faire est d'initialiser %Arcane en
54 * positionnant les arguments via la méthode init() car certains paramètres de la
55 * ligne de commande sont utilisés pour remplir les propriétés
56 * de applicationInfo() et dotNetRuntimeInitialisationInfo().
57 *
58 * La page \ref arcanedoc_execution_launcher donne des exemples d'usage.
59 *
60 * Les deux modes d'éxécutions sont:
61 * - le mode classique qui utilise une boucle en temps et donc l'exécution
62 * complète sera gérée par %Arcane. Dans mode il suffit d'appeler
63 * la méthode run() sans arguments.
64 * - le mode autonome qui permet d'utiliser %Arcane sous la forme d'une bibliothèque.
65 * Pour ce mode il faut utiliser la méthode createStandaloneSubDomain()
66 * ou createStandaloneAcceleratorMng(). La page \ref arcanedoc_execution_direct_execution
67 * décrit comment utiliser ce mécanisme.
68 *
69 * L'usage classique est le suivant:
70 *
71 * \code
72 * int main(int* argc,char* argv[])
73 * {
74 * ArcaneLauncher::init(CommandLineArguments(&argc,&argv));
75 * auto& app_info = ArcaneLauncher::applicationInfo();
76 * app_info.setCodeName("MyCode");
77 * app_info.setCodeVersion(VersionInfo(1,0,0));
78 * return ArcaneLauncher::run();
79 * }
80 * \endcode
81 */
82class ARCANE_LAUNCHER_EXPORT ArcaneLauncher
83{
84 friend StandaloneSubDomain;
85
86 public:
87
88 /*!
89 * \brief Positionne les informations à partir des arguments de la ligne
90 * de commande et initialise le lanceur.
91 *
92 * Cette méthode remplit les valeurs non initialisées
93 * de applicationInfo() et dotNetRuntimeInitialisationInfo() avec
94 * les paramètres spécifiés dans \a args.
95 *
96 * Il ne faut appeler cette méthode qu'une seule fois. Les appels supplémentaires
97 * génèrent une exception FatalErrorException.
98 */
99 static void init(const CommandLineArguments& args);
100
101 /*!
102 * \brief Indique si init() a déjà été appelé.
103 */
104 static bool isInitialized();
105
106 /*!
107 * \brief Point d'entrée de l'exécutable dans Arcane.
108 *
109 * Cette méthode appelle initialise l'application, lit le jeu de données
110 * et exécute le code suivant la boucle en temps spécifiée dans le jeu de donnée.
111 *
112 * \retval 0 en cas de succès
113 * \return une valeur différente de 0 en cas d'erreur.
114 */
115 static int run();
116
117 /*!
118 * \brief Exécution directe.
119 *
120 * Initialise l'application et appelle la fonction \a func après l'initialisation
121 * Cette méthode ne doit être appelée qu'en exécution séquentielle.
122 */
123 static int run(std::function<int(DirectExecutionContext&)> func);
124
125 /*!
126 * \brief Exécution directe avec création de sous-domaine.
127 *
128 * Initialise l'application et créé le ou les sous-domaines et appelle
129 * la fonction \a func après.
130 * Cette méthode permet d'exécuter du code sans passer par les mécanismes
131 * de la boucle en temps.
132 * Cette méthode permet de gérer automatiquement la création des sous-domaines
133 * en fonction des paramètres de lancement (exécution parallèle MPI, multithreading, ...).
134 */
135 static int run(std::function<int(DirectSubDomainExecutionContext&)> func);
136
137 /*!
138 * \brief Positionne la fabrique par défaut pour créer les différents gestionnaires
139 *
140 * Cette méthode doit être appelée avant run(). L'instance passée en argument doit
141 * rester valide durant l'exécution de run(). L'appelant reste propriétaire
142 * de l'instance.
143 */
144 static void setDefaultMainFactory(IMainFactory* mf);
145
146 /*!
147 * \brief Informations sur l'application.
148 *
149 * Cette méthode permet de récupérer l'instance de `ApplicationInfo`
150 * qui sera utilisée lors de l'appel à run().
151 *
152 * Pour être prise en compte, ces informations doivent être modifiées
153 * avant l'appel à run() ou à runDirect().
154 */
156
157 /*!
158 * \brief Informations sur les paramêtre d'exécutions de l'application.
159 *
160 * Cette méthode permet de récupérer l'instance de `ApplicationBuildInfo`
161 * qui sera utilisée lors de l'appel à run().
162 *
163 * Pour être prise en compte, ces informations doivent être modifiées
164 * avant l'appel à run() ou à runDirect().
165 */
167
168 /*!
169 * \brief Informations pour l'initialisation du runtime '.Net'.
170 *
171 * Pour être prise en compte, ces informations doivent être modifiées
172 * avant l'appel à run() ou à rundDirect().
173 */
175
176 /*!
177 * \brief Informations pour l'initialisation des accélerateurs.
178 *
179 * Pour être prise en compte, ces informations doivent être modifiées
180 * avant l'appel à run() ou à rundDirect().
181 */
183
184 //! Nom complet du répertoire où se trouve l'exécutable
185 static String getExeDirectory();
186
187 /*!
188 * \brief Créé une implémentation autonome pour gérer les accélérateurs.
189 *
190 * Il faut appeler init() avant d'appeler cette méthode. Le choix du
191 * runtime (Arcane::Accelerator::eExecutionPolicy) est déterminé
192 * par les arguments utilisés lors de l'appel à init() ou spécifiés via
193 * acceleratorRuntimeInitialisationInfo() (voir
194 * \ref arcanedoc_parallel_accelerator_exec pour plus d'informations)
195 */
197
198 /*!
199 * \brief Créé une implémentation autonome pour gérer un sous-domaine.
200 *
201 * Une seule instance de StandaloneSubDomain est autorisée. Si on
202 * appelle cette méthode plus d'une fois cela génère une exception.
203 *
204 * Il faut appeler init() avant d'appeler cette méthode.
205 *
206 * Si on appelle cette méthode il ne faut pas appeler d'autres méthodes
207 * d'exécution de ArcaneLauncher (par exemple ArcaneLauncher::run()).
208 *
209 * \a case_file_name est le nom du fichier contenant le jeu de données
210 * et \a file_content est le contenu de ce fichier. Si les deux sont nuls,
211 * il n'y a pas de jeu de données. Si \a file_content est vide, alors le contenu de
212 * \a case_file_name sera lu collectivement et utilisé comme fichier de cas.
213 *
214 * Cette méthode est collective et si \a file_content n'est pas vide, elle doit avoir
215 * la même valeur sur tous les rangs.
216 */
217 static StandaloneSubDomain createStandaloneSubDomain(const String& case_file_name,
218 Span<const std::byte> file_content = {});
219
220 /*!
221 * \brief Demande d'aide avec l'option "--help" ou "-h".
222 *
223 * Méthode permettant de savoir si l'utilisateur a demandé l'aide
224 * avec l'option "--help" ou "-h".
225 *
226 * \return true si l'aide a été demandée.
227 */
228 static bool needHelp();
229
230 /*!
231 * \brief Affichage de l'aide générique Arcane.
232 *
233 * Méthode permettant d'afficher l'aide générique Arcane si
234 * l'utilisateur l'a demandée avec l'option "--help" ou "-h".
235 *
236 * \return true si l'aide a été demandée.
237 */
238 static bool printHelp();
239
240 public:
241
242 /*!
243 * \deprecated
244 */
245 ARCCORE_DEPRECATED_2020("Utiliser run(func) à la place")
246 static int runDirect(std::function<int(IDirectExecutionContext*)> func);
247
248 /*!
249 * \deprecated
250 */
251 ARCCORE_DEPRECATED_2020("Utiliser init(args) à la place")
253 {
254 init(args);
255 }
256
257 private:
258
259 static void _initStandalone();
260 static void _notifyRemoveStandaloneSubDomain();
261};
262
263/*---------------------------------------------------------------------------*/
264/*---------------------------------------------------------------------------*/
265
266} // End namespace Arcane
267
268/*---------------------------------------------------------------------------*/
269/*---------------------------------------------------------------------------*/
270
271#endif
Informations pour construire une instance de IApplication.
Informations sur une application.
Classe de gestion de l'exécution.
static StandaloneAcceleratorMng createStandaloneAcceleratorMng()
Créé une implémentation autonome pour gérer les accélérateurs.
static int run()
Point d'entrée de l'exécutable dans Arcane.
static String getExeDirectory()
Nom complet du répertoire où se trouve l'exécutable.
static DotNetRuntimeInitialisationInfo & dotNetRuntimeInitialisationInfo()
Informations pour l'initialisation du runtime '.Net'.
static bool needHelp()
Demande d'aide avec l'option "--help" ou "-h".
static void init(const CommandLineArguments &args)
Positionne les informations à partir des arguments de la ligne de commande et initialise le lanceur.
static ApplicationBuildInfo & applicationBuildInfo()
Informations sur les paramêtre d'exécutions de l'application.
static StandaloneSubDomain createStandaloneSubDomain(const String &case_file_name, Span< const std::byte > file_content={})
Créé une implémentation autonome pour gérer un sous-domaine.
static bool isInitialized()
Indique si init() a déjà été appelé.
static bool printHelp()
Affichage de l'aide générique Arcane.
static ApplicationInfo & applicationInfo()
Informations sur l'application.
static AcceleratorRuntimeInitialisationInfo & acceleratorRuntimeInitialisationInfo()
Informations pour l'initialisation des accélerateurs.
static int runDirect(std::function< int(IDirectExecutionContext *)> func)
static void setDefaultMainFactory(IMainFactory *mf)
Positionne la fabrique par défaut pour créer les différents gestionnaires.
static void setCommandLineArguments(const CommandLineArguments &args)
Contexte d'exécution directe.
Contexte d'exécution directe avec création d'un sous-domaine.
Informations pour l'initialisation du runtime '.Net'.
Vue d'un tableau d'éléments de type T.
Definition Span.h:633
Implémentation autonome de 'IAcceleratorMng.h'.
Chaîne de caractères unicode.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --