14#include "arcane/launcher/ArcaneLauncher.h"
16#include "arcane/launcher/IDirectExecutionContext.h"
17#include "arcane/launcher/DirectSubDomainExecutionContext.h"
19#include "arcane/utils/Property.h"
20#include "arcane/utils/FatalErrorException.h"
21#include "arcane/utils/JSONPropertyReader.h"
22#include "arcane/utils/ParameterListPropertyReader.h"
23#include "arcane/utils/PlatformUtils.h"
24#include "arcane/utils/JSONReader.h"
25#include "arcane/utils/Exception.h"
26#include "arcane/utils/ParameterList.h"
27#include "arcane/utils/Ref.h"
30#include "arcane/impl/ArcaneMain.h"
31#include "arcane/impl/ArcaneSimpleExecutor.h"
33#include "arcane/IDirectSubDomainExecuteFunctor.h"
45bool global_has_init_done =
false;
46bool _checkInitCalled()
48 if (!global_has_init_done){
49 std::cerr <<
"ArcaneLauncher::init() has to be called before";
54bool global_has_standalone_sub_domain =
false;
65 : m_simple_exec(simple_exec) {}
74 return m_simple_exec->createSubDomain(case_file_name);
76 ISubDomain* subDomain()
const {
return nullptr; }
78 ArcaneSimpleExecutor* m_simple_exec;
85_checkReadConfigFile(StringView config_file_name)
88 if (config_file_name.empty())
90 std::cout <<
"TRY_READING_CONFIG " << config_file_name <<
"\n";
91 if (!platform::isFileReadable(config_file_name))
93 UniqueArray<std::byte> bytes;
98 app_info.setRuntimeConfigFileContent(bytes);
101 JSONValue config = jdoc.root().child(
"configuration");
104 std::cout <<
"READING CONFIG\n";
105 properties::readFromJSON(config,app_info);
114 return ArcaneMain::run();
123 return ArcaneMain::defaultApplicationInfo();
132 return ArcaneMain::defaultDotNetRuntimeInitialisationInfo();
141 return ArcaneMain::defaultAcceleratorRuntimeInitialisationInfo();
150 return ArcaneMain::defaultApplicationBuildInfo();
160 String exe_dir = platform::getFileDirName(exe_full_path);
175 : m_simple_executor(x), m_functor(ft){}
177 : m_simple_executor(x), m_old_functor(ft){}
183 m_return_value = (*m_functor)(direct_context);
185 else if (m_old_functor)
186 m_return_value = (*m_old_functor)(&direct_context_impl);
188 int returnValue()
const {
return m_return_value; }
190 ArcaneSimpleExecutor* m_simple_executor =
nullptr;
191 OldFunctorType* m_old_functor =
nullptr;
192 FunctorType* m_functor =
nullptr;
193 int m_return_value = 0;
202 if (_checkInitCalled())
204 int final_return = 0;
206 ArcaneSimpleExecutor simple_exec;
207 int r = simple_exec.initialize();
214 simple_exec.runCode(&direct_functor);
215 final_return = direct_functor.returnValue();
226 if (_checkInitCalled())
229 int final_return = 0;
231 ArcaneSimpleExecutor simple_exec;
232 int r = simple_exec.initialize();
239 simple_exec.runCode(&direct_functor);
240 final_return = direct_functor.returnValue();
258 ARCANE_FATAL(
"Can not execute 'IDirectSubDomainExecuteFunctor' without sub domain");
260 return m_function(direct_context);
275 if (_checkInitCalled())
285 if (config_file.
empty())
287 int r = ArcaneMain::_internalRun(&direct_exec);
310_listPropertySettings()
312 using namespace Arcane::properties;
313 MyVisitor my_visitor;
314 visitAllRegisteredProperties(&my_visitor);
322 if (global_has_init_done)
323 ARCANE_FATAL(
"ArcaneLauncher::init() has already been called");
324 global_has_init_done =
true;
326 bool do_list =
false;
328 _listPropertySettings();
331 if (!runtime_config_file_name.
empty())
332 _checkReadConfigFile(runtime_config_file_name);
334 properties::readFromParameterList(args.
parameters(),dotnet_info);
336 properties::readFromParameterList(args.
parameters(),accelerator_info);
338 properties::readFromParameterList(args.
parameters(),loop_options);
343 cerr <<
"** (ArcaneLauncher) Can't continue with the execution.\n";
354 return global_has_init_done;
363 ArcaneMain::setDefaultMainFactory(mf);
372 if (!global_has_init_done)
373 ARCANE_FATAL(
"ArcaneLauncher::init() has to be called before");
376 ArcaneMain::_initRuntimes();
395 if (global_has_standalone_sub_domain)
396 ARCANE_FATAL(
"ArcaneLauncher::createStandaloneSubDomain() should only be called once");
399 s._initUniqueInstance(case_file_name);
400 global_has_standalone_sub_domain =
true;
408_notifyRemoveStandaloneSubDomain()
410 global_has_standalone_sub_domain =
false;
#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.
void setCommandLineArguments(const CommandLineArguments &args)
Positionne les arguments de la ligne de commande.
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 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 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.
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'.
Interface du gestionnaire d'un sous-domaine.
Options d'exécution d'une boucle parallèle en multi-thread.
Implémentation autonome de 'IAcceleratorMng.h'.
Implémentation autonome d'un sous-domaine.
static void setDefaultParallelLoopOptions(const ParallelLoopOptions &v)
Positionne les valeurs par défaut d'exécution d'une boucle parallèle.
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é.
Classe de base d'une exception.
Chaîne de caractères unicode.
bool empty() const
Vrai si la chaîne est vide (nulle ou "")
bool null() const
Retourne true si la chaîne est nulle.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-