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
40namespace Arcane
41{
42class 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 */
83class ARCANE_LAUNCHER_EXPORT ArcaneLauncher
84{
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
Informations pour construire une instance de IApplication.
Informations sur une application.
Classe de gestion de l'exécution.
Arguments de la ligne de commande.
Contexte d'exécution directe.
Contexte d'exécution directe avec création d'un sous-domaine.
Informations pour l'initialisation du runtime '.Net'.
Implémentation autonome de 'IAcceleratorMng.h'.
Implémentation autonome d'un sous-domaine.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-