14#include "arcane/launcher/ArcaneLauncher.h"
16#include "arcane/launcher/IDirectExecutionContext.h"
17#include "arcane/launcher/DirectSubDomainExecutionContext.h"
18#include "arcane/launcher/GeneralHelp.h"
19#include "arcane/launcher/internal/ParamFile.h"
21#include "arcane/utils/FatalErrorException.h"
22#include "arcane/utils/PlatformUtils.h"
23#include "arcane/utils/JSONReader.h"
24#include "arcane/utils/Exception.h"
25#include "arcane/utils/ParameterList.h"
26#include "arcane/utils/Ref.h"
28#include "arcane/utils/internal/ParallelLoopOptionsProperties.h"
29#include "arcane/utils/internal/ApplicationInfoProperties.h"
30#include "arcane/core/internal/DotNetRuntimeInitialisationInfoProperties.h"
31#include "arcane/accelerator/core/internal/AcceleratorRuntimeInitialisationInfoProperties.h"
33#include "arccore/common/internal/Property.h"
34#include "arccore/common/internal/ParameterListPropertyReader.h"
35#include "arccore/common/internal/JSONPropertyReader.h"
37#include "arcane/impl/ArcaneMain.h"
38#include "arcane/impl/ArcaneSimpleExecutor.h"
40#include "arcane/core/IDirectSubDomainExecuteFunctor.h"
55 bool global_has_init_done =
false;
56 bool _checkInitCalled()
58 if (!global_has_init_done) {
59 std::cerr <<
"ArcaneLauncher::init() doit être appelé avant";
70class DirectExecutionContextImpl
75 explicit DirectExecutionContextImpl(ArcaneSimpleExecutor* simple_exec)
76 : m_simple_exec(simple_exec)
87 return m_simple_exec->createSubDomain(case_file_name);
89 ISubDomain* subDomain()
const {
return nullptr; }
93 ArcaneSimpleExecutor* m_simple_exec;
99void _checkReadConfigFile(
StringView config_file_name)
102 if (config_file_name.empty())
104 std::cout <<
"TENTATIVE DE LECTURE DE LA CONFIGURATION " << config_file_name <<
"\n";
112 app_info.setRuntimeConfigFileContent(bytes);
118 std::cout <<
"LECTURE DE LA CONFIGURATION\n";
119 properties::readFromJSON<ApplicationInfo, ApplicationInfoProperties>(config, app_info);
128 return ArcaneMain::run();
137 return ArcaneMain::defaultApplicationInfo();
146 return ArcaneMain::defaultDotNetRuntimeInitialisationInfo();
155 return ArcaneMain::defaultAcceleratorRuntimeInitialisationInfo();
164 return ArcaneMain::defaultApplicationBuildInfo();
181class DirectCodeFunctor
191 DirectCodeFunctor(ArcaneSimpleExecutor* x, FunctorType* ft)
192 : m_simple_executor(x)
195 DirectCodeFunctor(ArcaneSimpleExecutor* x, OldFunctorType* ft)
196 : m_simple_executor(x)
204 m_return_value = (*m_functor)(direct_context);
206 else if (m_old_functor)
207 m_return_value = (*m_old_functor)(&direct_context_impl);
209 int returnValue()
const {
return m_return_value; }
213 ArcaneSimpleExecutor* m_simple_executor =
nullptr;
214 OldFunctorType* m_old_functor =
nullptr;
215 FunctorType* m_functor =
nullptr;
216 int m_return_value = 0;
225 if (_checkInitCalled())
227 int final_return = 0;
229 ArcaneSimpleExecutor simple_exec;
230 int r = simple_exec.initialize();
237 simple_exec.runCode(&direct_functor);
238 final_return = direct_functor.returnValue();
249 if (_checkInitCalled())
252 int final_return = 0;
254 ArcaneSimpleExecutor simple_exec;
255 int r = simple_exec.initialize();
262 simple_exec.runCode(&direct_functor);
263 final_return = direct_functor.returnValue();
271class ArcaneLauncherDirectExecuteFunctor
285 ARCANE_FATAL(
"Impossible d'exécuter 'IDirectSubDomainExecuteFunctor' sans sous-domaine");
287 return m_function(direct_context);
306 if (_checkInitCalled())
316 if (config_file.
empty())
318 int r = ArcaneMain::_internalRun(&direct_exec);
328 :
public properties::IPropertyVisitor
332 void visit(
const properties::IPropertySetting* s)
override
334 if (!s->commandLineArgument().null()) {
335 std::cout <<
"ARG:" << std::setw(30) << s->commandLineArgument()
336 <<
" " << s->description() <<
"\n";
342 _listPropertySettings()
344 using namespace Arcane::properties;
345 MyVisitor my_visitor;
346 visitAllRegisteredProperties(&my_visitor);
354 if (global_has_init_done)
355 ARCANE_FATAL(
"ArcaneLauncher::init() a déjà été appelé");
356 global_has_init_done =
true;
358 application_info.setCommandLineArguments(args);
359 bool do_list =
false;
361 _listPropertySettings();
364 if (!runtime_config_file_name.
empty())
365 _checkReadConfigFile(runtime_config_file_name);
368 if (!param_file_name.
empty()) {
370 ParamFile::editParams(param_file_name, case_param_file_name);
374 properties::readFromParameterList<ApplicationInfo, ApplicationInfoProperties>(args.
parameters(), application_info);
376 properties::readFromParameterList<DotNetRuntimeInitialisationInfo, DotNetRuntimeInitialisationInfoProperties>(args.
parameters(), dotnet_info);
378 properties::readFromParameterList<AcceleratorRuntimeInitialisationInfo, Accelerator::AcceleratorRuntimeInitialisationInfoProperties>(args.
parameters(), accelerator_info);
380 properties::readFromParameterList<ParallelLoopOptions, ParallelLoopOptionsProperties>(args.
parameters(), loop_options);
385 cerr <<
"** (ArcaneLauncher) Impossible de continuer l'exécution.\n";
396 return global_has_init_done;
405 ArcaneMain::setDefaultMainFactory(mf);
414 if (!global_has_init_done)
415 ARCANE_FATAL(
"ArcaneLauncher::init() doit être appelé avant");
418 ArcaneMain::_initRuntimes();
438 StandaloneSubDomain s;
439 s._initUniqueInstance(case_file_name, file_content);
447_notifyRemoveStandaloneSubDomain()
467 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.
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, Int16 flags=ParseNoFlags)
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.
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 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 --