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/Property.h"
21#include "arcane/utils/FatalErrorException.h"
22#include "arcane/utils/JSONPropertyReader.h"
23#include "arcane/utils/ParameterListPropertyReader.h"
24#include "arcane/utils/PlatformUtils.h"
25#include "arcane/utils/JSONReader.h"
26#include "arcane/utils/Exception.h"
27#include "arcane/utils/ParameterList.h"
28#include "arcane/utils/Ref.h"
30#include "arcane/utils/internal/ParallelLoopOptionsProperties.h"
31#include "arcane/utils/internal/ApplicationInfoProperties.h"
33#include "arcane/impl/ArcaneMain.h"
34#include "arcane/impl/ArcaneSimpleExecutor.h"
36#include "arcane/IDirectSubDomainExecuteFunctor.h"
48bool global_has_init_done =
false;
49bool _checkInitCalled()
51 if (!global_has_init_done){
52 std::cerr <<
"ArcaneLauncher::init() has to be called before";
57bool global_has_standalone_sub_domain =
false;
63class DirectExecutionContextImpl
67 explicit DirectExecutionContextImpl(ArcaneSimpleExecutor* simple_exec)
68 : m_simple_exec(simple_exec) {}
77 return m_simple_exec->createSubDomain(case_file_name);
79 ISubDomain* subDomain()
const {
return nullptr; }
81 ArcaneSimpleExecutor* m_simple_exec;
88_checkReadConfigFile(
StringView config_file_name)
91 if (config_file_name.empty())
93 std::cout <<
"TRY_READING_CONFIG " << config_file_name <<
"\n";
101 app_info.setRuntimeConfigFileContent(bytes);
107 std::cout <<
"READING CONFIG\n";
108 properties::readFromJSON<ApplicationInfo,ApplicationInfoProperties>(config,app_info);
117 return ArcaneMain::run();
126 return ArcaneMain::defaultApplicationInfo();
135 return ArcaneMain::defaultDotNetRuntimeInitialisationInfo();
144 return ArcaneMain::defaultAcceleratorRuntimeInitialisationInfo();
153 return ArcaneMain::defaultApplicationBuildInfo();
170class DirectCodeFunctor
177 DirectCodeFunctor(ArcaneSimpleExecutor* x,FunctorType* ft)
178 : m_simple_executor(x), m_functor(ft){}
179 DirectCodeFunctor(ArcaneSimpleExecutor* x,OldFunctorType* ft)
180 : m_simple_executor(x), m_old_functor(ft){}
186 m_return_value = (*m_functor)(direct_context);
188 else if (m_old_functor)
189 m_return_value = (*m_old_functor)(&direct_context_impl);
191 int returnValue()
const {
return m_return_value; }
193 ArcaneSimpleExecutor* m_simple_executor =
nullptr;
194 OldFunctorType* m_old_functor =
nullptr;
195 FunctorType* m_functor =
nullptr;
196 int m_return_value = 0;
205 if (_checkInitCalled())
207 int final_return = 0;
209 ArcaneSimpleExecutor simple_exec;
210 int r = simple_exec.initialize();
217 simple_exec.runCode(&direct_functor);
218 final_return = direct_functor.returnValue();
229 if (_checkInitCalled())
232 int final_return = 0;
234 ArcaneSimpleExecutor simple_exec;
235 int r = simple_exec.initialize();
242 simple_exec.runCode(&direct_functor);
243 final_return = direct_functor.returnValue();
251class ArcaneLauncherDirectExecuteFunctor
261 ARCANE_FATAL(
"Can not execute 'IDirectSubDomainExecuteFunctor' without sub domain");
263 return m_function(direct_context);
278 if (_checkInitCalled())
288 if (config_file.
empty())
290 int r = ArcaneMain::_internalRun(&direct_exec);
313_listPropertySettings()
315 using namespace Arcane::properties;
316 MyVisitor my_visitor;
317 visitAllRegisteredProperties(&my_visitor);
325 if (global_has_init_done)
326 ARCANE_FATAL(
"ArcaneLauncher::init() has already been called");
327 global_has_init_done =
true;
329 application_info.setCommandLineArguments(args);
330 bool do_list =
false;
332 _listPropertySettings();
335 if (!runtime_config_file_name.
empty())
336 _checkReadConfigFile(runtime_config_file_name);
337 properties::readFromParameterList<ApplicationInfo,ApplicationInfoProperties>(args.
parameters(),application_info);
339 properties::readFromParameterList(args.
parameters(),dotnet_info);
341 properties::readFromParameterList(args.
parameters(),accelerator_info);
343 properties::readFromParameterList<ParallelLoopOptions,ParallelLoopOptionsProperties>(args.
parameters(),loop_options);
348 cerr <<
"** (ArcaneLauncher) Can't continue with the execution.\n";
359 return global_has_init_done;
368 ArcaneMain::setDefaultMainFactory(mf);
377 if (!global_has_init_done)
378 ARCANE_FATAL(
"ArcaneLauncher::init() has to be called before");
381 ArcaneMain::_initRuntimes();
400 if (global_has_standalone_sub_domain)
401 ARCANE_FATAL(
"ArcaneLauncher::createStandaloneSubDomain() should only be called once");
403 StandaloneSubDomain s;
404 s._initUniqueInstance(case_file_name);
405 global_has_standalone_sub_domain =
true;
413_notifyRemoveStandaloneSubDomain()
415 global_has_standalone_sub_domain =
false;
434 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)
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.
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.
Interface du gestionnaire d'un sous-domaine.
void parse(Span< const Byte > bytes)
Lit le fichier au format UTF-8.
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.
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 -*-