14#include "arcane/launcher/ArcaneLauncher.h"
16#include "arcane/launcher/IDirectExecutionContext.h"
17#include "arcane/launcher/DirectSubDomainExecutionContext.h"
18#include "arcane/launcher/GeneralHelp.h"
20#include "arcane/utils/FatalErrorException.h"
21#include "arcane/utils/PlatformUtils.h"
22#include "arcane/utils/JSONReader.h"
23#include "arcane/utils/Exception.h"
24#include "arcane/utils/ParameterList.h"
25#include "arcane/utils/Ref.h"
27#include "arcane/utils/internal/ParallelLoopOptionsProperties.h"
28#include "arcane/utils/internal/ApplicationInfoProperties.h"
29#include "arcane/core/internal/DotNetRuntimeInitialisationInfoProperties.h"
30#include "arcane/accelerator/core/internal/AcceleratorRuntimeInitialisationInfoProperties.h"
32#include "arccore/common/internal/Property.h"
33#include "arccore/common/internal/ParameterListPropertyReader.h"
34#include "arccore/common/internal/JSONPropertyReader.h"
36#include "arcane/impl/ArcaneMain.h"
37#include "arcane/impl/ArcaneSimpleExecutor.h"
39#include "arcane/core/IDirectSubDomainExecuteFunctor.h"
54 bool global_has_init_done =
false;
55 bool _checkInitCalled()
57 if (!global_has_init_done) {
58 std::cerr <<
"ArcaneLauncher::init() doit être appelé avant";
69class DirectExecutionContextImpl
75 : m_simple_exec(simple_exec)
86 return m_simple_exec->createSubDomain(case_file_name);
88 ISubDomain* subDomain()
const {
return nullptr; }
92 ArcaneSimpleExecutor* m_simple_exec;
98void _checkReadConfigFile(
StringView config_file_name)
101 if (config_file_name.empty())
103 std::cout <<
"TENTATIVE DE LECTURE DE LA CONFIGURATION " << config_file_name <<
"\n";
111 app_info.setRuntimeConfigFileContent(bytes);
117 std::cout <<
"LECTURE DE LA CONFIGURATION\n";
118 properties::readFromJSON<ApplicationInfo, ApplicationInfoProperties>(config, app_info);
180class DirectCodeFunctor
191 : m_simple_executor(x)
195 : m_simple_executor(x)
203 m_return_value = (*m_functor)(direct_context);
205 else if (m_old_functor)
206 m_return_value = (*m_old_functor)(&direct_context_impl);
208 int returnValue()
const {
return m_return_value; }
212 ArcaneSimpleExecutor* m_simple_executor =
nullptr;
213 OldFunctorType* m_old_functor =
nullptr;
214 FunctorType* m_functor =
nullptr;
215 int m_return_value = 0;
224 if (_checkInitCalled())
226 int final_return = 0;
229 int r = simple_exec.initialize();
236 simple_exec.runCode(&direct_functor);
237 final_return = direct_functor.returnValue();
248 if (_checkInitCalled())
251 int final_return = 0;
254 int r = simple_exec.initialize();
261 simple_exec.runCode(&direct_functor);
262 final_return = direct_functor.returnValue();
270class ArcaneLauncherDirectExecuteFunctor
284 ARCANE_FATAL(
"Impossible d'exécuter 'IDirectSubDomainExecuteFunctor' sans sous-domaine");
286 return m_function(direct_context);
305 if (_checkInitCalled())
315 if (config_file.
empty())
317 int r = ArcaneMain::_internalRun(&direct_exec);
341 _listPropertySettings()
343 using namespace Arcane::properties;
344 MyVisitor my_visitor;
345 visitAllRegisteredProperties(&my_visitor);
353 if (global_has_init_done)
354 ARCANE_FATAL(
"ArcaneLauncher::init() a déjà été appelé");
355 global_has_init_done =
true;
357 application_info.setCommandLineArguments(args);
358 bool do_list =
false;
360 _listPropertySettings();
363 if (!runtime_config_file_name.
empty())
364 _checkReadConfigFile(runtime_config_file_name);
365 properties::readFromParameterList<ApplicationInfo, ApplicationInfoProperties>(args.
parameters(), application_info);
367 properties::readFromParameterList<DotNetRuntimeInitialisationInfo, DotNetRuntimeInitialisationInfoProperties>(args.
parameters(), dotnet_info);
369 properties::readFromParameterList<AcceleratorRuntimeInitialisationInfo, Accelerator::AcceleratorRuntimeInitialisationInfoProperties>(args.
parameters(), accelerator_info);
371 properties::readFromParameterList<ParallelLoopOptions, ParallelLoopOptionsProperties>(args.
parameters(), loop_options);
376 cerr <<
"** (ArcaneLauncher) Impossible de continuer l'exécution.\n";
387 return global_has_init_done;
405 if (!global_has_init_done)
406 ARCANE_FATAL(
"ArcaneLauncher::init() doit être appelé avant");
409 ArcaneMain::_initRuntimes();
429 StandaloneSubDomain s;
430 s._initUniqueInstance(case_file_name, file_content);
438_notifyRemoveStandaloneSubDomain()
458 GeneralHelp::printHelp();
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Classes, Types et macros pour gérer la concurrence.
Informations pour l'initialisation des accélérateurs.
Informations pour construire une instance de IApplication.
String configFileName() const
Nom du fichier de configuration du code.
void setConfigFileName(const String &name)
Positionne le fichier de configuration du code.
Informations sur une application.
const CommandLineArguments & commandLineArguments() const
Arguments de la ligne de commande.
int execute() override
Exécute l'opération du fonctor.
void setSubDomain(ISubDomain *sd) override
Positionne le sous-domaine associé. Cette méthode doit être appelée avant execute().
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 ApplicationBuildInfo & defaultApplicationBuildInfo()
Informations pour l'initialisation des accélerateurs.
static AcceleratorRuntimeInitialisationInfo & defaultAcceleratorRuntimeInitialisationInfo()
Informations pour l'initialisation des accélerateurs.
static DotNetRuntimeInitialisationInfo & defaultDotNetRuntimeInitialisationInfo()
Informations pour l'initialisation du runtime '.Net'.
static int run()
Point d'entrée de l'exécutable dans Arcane.
static ApplicationInfo & defaultApplicationInfo()
Infos par défaut de l'application.
static void setDefaultMainFactory(IMainFactory *mf)
Positionne la fabrique par défaut.
Classe permettant d'exécuter directement du code sans passer par la boucle en temps.
Arguments de la ligne de commande.
const ParameterList & parameters() const
Liste des paramètres.
bool needHelp() const
Méthode permettant de savoir si l'utilisateur a demandé de l'aide dans la ligne de commande.
String getParameter(const String ¶m_name) const
Récupère le paramètre de nom param_name.
void executeFunctor() override
Exécute la méthode associé
ISubDomain * createSequentialSubDomain(const String &case_file_name) override
Créé un sous-domaine en séquentiel avec le fichier de jeu de données ayant pour nom case_file_name.
ISubDomain * createSequentialSubDomain() override
Créé un sous-domaine en séquentiel sans jeu de données.
Contexte d'exécution directe.
Contexte d'exécution directe avec création d'un sous-domaine.
Informations pour l'initialisation du runtime '.Net'.
Classe de base d'une exception.
Implémentation de la classe de gestion de l'exécution.
Interface d'un fonctor pour exécuter du code directement après la création d'un sous-domaine sans pas...
Manufacture des classes d'Arcane.
Interface du gestionnaire d'un sous-domaine.
Gestion d'un document JSON.
void parse(Span< const Byte > bytes)
Lit le fichier au format UTF-8.
Représente une valeur JSON.
JSONValue child(StringView name) const
Valeur fille de nom name. Retourne une valeur nulle si non trouvé.
Options d'exécution d'une boucle parallèle en multi-thread.
Vue d'un tableau d'éléments de type T.
Implémentation autonome de 'IAcceleratorMng.h'.
Vue sur une chaîne de caractères UTF-8.
Chaîne de caractères unicode.
bool null() const
Retourne true si la chaîne est nulle.
bool empty() const
Vrai si la chaîne est vide (nulle ou "").
static void setDefaultParallelLoopOptions(const ParallelLoopOptions &v)
Positionne les valeurs par défaut d'exécution d'une boucle parallèle.
Vecteur 1D de données avec sémantique par valeur (style STL).
Interface d'un paramètre de propriété.
virtual String description() const =0
Description de la propriété
virtual String commandLineArgument() const =0
Nom de l'argument de la ligne de commande (nul si aucun).
Interface d'un visiteur sur une propriété.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --