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/IDirectSubDomainExecuteFunctor.h"
51bool global_has_init_done =
false;
52bool _checkInitCalled()
54 if (!global_has_init_done){
55 std::cerr <<
"ArcaneLauncher::init() has to be called before";
66class DirectExecutionContextImpl
70 explicit DirectExecutionContextImpl(ArcaneSimpleExecutor* simple_exec)
71 : m_simple_exec(simple_exec) {}
80 return m_simple_exec->createSubDomain(case_file_name);
82 ISubDomain* subDomain()
const {
return nullptr; }
84 ArcaneSimpleExecutor* m_simple_exec;
91_checkReadConfigFile(
StringView config_file_name)
94 if (config_file_name.empty())
96 std::cout <<
"TRY_READING_CONFIG " << config_file_name <<
"\n";
104 app_info.setRuntimeConfigFileContent(bytes);
110 std::cout <<
"READING CONFIG\n";
111 properties::readFromJSON<ApplicationInfo,ApplicationInfoProperties>(config,app_info);
120 return ArcaneMain::run();
129 return ArcaneMain::defaultApplicationInfo();
138 return ArcaneMain::defaultDotNetRuntimeInitialisationInfo();
147 return ArcaneMain::defaultAcceleratorRuntimeInitialisationInfo();
156 return ArcaneMain::defaultApplicationBuildInfo();
173class DirectCodeFunctor
180 DirectCodeFunctor(ArcaneSimpleExecutor* x,FunctorType* ft)
181 : m_simple_executor(x), m_functor(ft){}
182 DirectCodeFunctor(ArcaneSimpleExecutor* x,OldFunctorType* ft)
183 : m_simple_executor(x), m_old_functor(ft){}
189 m_return_value = (*m_functor)(direct_context);
191 else if (m_old_functor)
192 m_return_value = (*m_old_functor)(&direct_context_impl);
194 int returnValue()
const {
return m_return_value; }
196 ArcaneSimpleExecutor* m_simple_executor =
nullptr;
197 OldFunctorType* m_old_functor =
nullptr;
198 FunctorType* m_functor =
nullptr;
199 int m_return_value = 0;
208 if (_checkInitCalled())
210 int final_return = 0;
212 ArcaneSimpleExecutor simple_exec;
213 int r = simple_exec.initialize();
220 simple_exec.runCode(&direct_functor);
221 final_return = direct_functor.returnValue();
232 if (_checkInitCalled())
235 int final_return = 0;
237 ArcaneSimpleExecutor simple_exec;
238 int r = simple_exec.initialize();
245 simple_exec.runCode(&direct_functor);
246 final_return = direct_functor.returnValue();
254class ArcaneLauncherDirectExecuteFunctor
264 ARCANE_FATAL(
"Can not execute 'IDirectSubDomainExecuteFunctor' without sub domain");
266 return m_function(direct_context);
281 if (_checkInitCalled())
291 if (config_file.
empty())
293 int r = ArcaneMain::_internalRun(&direct_exec);
303:
public properties::IPropertyVisitor
306 void visit(
const properties::IPropertySetting* s)
override
308 if (!s->commandLineArgument().null()){
309 std::cout <<
"ARG:" << std::setw(30) << s->commandLineArgument()
310 <<
" " << s->description() <<
"\n";
316_listPropertySettings()
318 using namespace Arcane::properties;
319 MyVisitor my_visitor;
320 visitAllRegisteredProperties(&my_visitor);
328 if (global_has_init_done)
329 ARCANE_FATAL(
"ArcaneLauncher::init() has already been called");
330 global_has_init_done =
true;
332 application_info.setCommandLineArguments(args);
333 bool do_list =
false;
335 _listPropertySettings();
338 if (!runtime_config_file_name.
empty())
339 _checkReadConfigFile(runtime_config_file_name);
340 properties::readFromParameterList<ApplicationInfo,ApplicationInfoProperties>(args.
parameters(),application_info);
342 properties::readFromParameterList< DotNetRuntimeInitialisationInfo, DotNetRuntimeInitialisationInfoProperties>(args.
parameters(),dotnet_info);
344 properties::readFromParameterList<AcceleratorRuntimeInitialisationInfo, Accelerator::AcceleratorRuntimeInitialisationInfoProperties>(args.
parameters(), accelerator_info);
346 properties::readFromParameterList<ParallelLoopOptions,ParallelLoopOptionsProperties>(args.
parameters(),loop_options);
351 cerr <<
"** (ArcaneLauncher) Can't continue with the execution.\n";
362 return global_has_init_done;
371 ArcaneMain::setDefaultMainFactory(mf);
380 if (!global_has_init_done)
381 ARCANE_FATAL(
"ArcaneLauncher::init() has to be called before");
384 ArcaneMain::_initRuntimes();
404 StandaloneSubDomain s;
405 s._initUniqueInstance(case_file_name);
413_notifyRemoveStandaloneSubDomain()
433 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 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).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-