14#include "arcane/utils/Iostream.h"
15#include "arcane/utils/Iterator.h"
16#include "arcane/utils/List.h"
17#include "arcane/utils/ScopedPtr.h"
18#include "arcane/utils/Deleter.h"
19#include "arcane/utils/PlatformUtils.h"
20#include "arcane/utils/ValueConvert.h"
21#include "arcane/utils/OStringStream.h"
22#include "arcane/utils/ITraceMng.h"
23#include "arcane/utils/TraceClassConfig.h"
24#include "arcane/utils/IMemoryInfo.h"
25#include "arcane/utils/IStackTraceService.h"
26#include "arcane/utils/ISymbolizerService.h"
27#include "arcane/utils/IProcessorAffinityService.h"
28#include "arcane/utils/IOnlineDebuggerService.h"
29#include "arcane/utils/StringBuilder.h"
30#include "arcane/utils/IProfilingService.h"
31#include "arcane/utils/IThreadImplementationService.h"
32#include "arcane/utils/IDynamicLibraryLoader.h"
33#include "arcane/utils/IPerformanceCounterService.h"
34#include "arcane/utils/ITraceMngPolicy.h"
35#include "arcane/utils/JSONReader.h"
36#include "arcane/utils/Profiling.h"
37#include "arcane/utils/internal/TaskFactoryInternal.h"
38#include "arcane/utils/internal/DependencyInjection.h"
40#include "arcane/core/ArcaneVersion.h"
41#include "arcane/core/ISubDomain.h"
42#include "arcane/core/IIOMng.h"
43#include "arcane/core/IXmlDocumentHolder.h"
44#include "arcane/core/IParallelSuperMng.h"
45#include "arcane/core/IMainFactory.h"
46#include "arcane/core/IArcaneMain.h"
47#include "arcane/core/IRessourceMng.h"
48#include "arcane/core/IServiceLoader.h"
49#include "arcane/core/IServiceMng.h"
50#include "arcane/core/ICodeService.h"
51#include "arcane/core/ISession.h"
52#include "arcane/core/IDataFactory.h"
53#include "arcane/core/IDataFactoryMng.h"
54#include "arcane/core/IXmlDocumentHolder.h"
55#include "arcane/core/XmlNode.h"
56#include "arcane/core/XmlNodeList.h"
57#include "arcane/core/ItemTypeMng.h"
59#include "arcane/core/IPhysicalUnitSystemService.h"
60#include "arcane/core/ServiceBuilder.h"
61#include "arcane/core/Configuration.h"
62#include "arcane/core/Directory.h"
63#include "arcane/core/IServiceAndModuleFactoryMng.h"
64#include "arcane/core/ApplicationBuildInfo.h"
66#include "arcane/core/IItemEnumeratorTracer.h"
67#include "arcane/impl/Application.h"
68#include "arcane/impl/ConfigurationReader.h"
69#include "arcane/impl/ArcaneMain.h"
74#include "arcane/core/Item.h"
75#include "arcane/core/IndexedItemConnectivityView.h"
76#include "arcane/core/UnstructuredMeshConnectivity.h"
78#include "arccore_version.h"
96extern "C++" IPhysicalUnitSystemService*
97createNullPhysicalUnitSystemService();
98extern "C++" IConfigurationMng*
99arcaneCreateConfigurationMng(ITraceMng* tm);
100extern "C++" ARCANE_IMPL_EXPORT IServiceAndModuleFactoryMng*
101arcaneCreateServiceAndModuleFactoryMng(ITraceMng* tm);
102extern "C++" ARCANE_IMPL_EXPORT Ref<IItemEnumeratorTracer>
103arcaneCreateItemEnumeratorTracer(ITraceMng* tm,Ref<IPerformanceCounterService> perf_counter);
104extern "C++" ARCANE_IMPL_EXPORT Ref<ICodeService>
105createArcaneCodeService(IApplication* app);
106extern "C++" ARCANE_CORE_EXPORT
void
107arcaneSetSingletonItemEnumeratorTracer(Ref<IItemEnumeratorTracer> tracer);
115extern "C++" IApplication*
116arcaneCreateApplication(IArcaneMain* am)
118 IApplication* sm =
new Application(am);
131: m_exe_info(
am->applicationInfo())
132, m_namespace_uri(arcaneNamespaceURI())
133, m_local_name(
"Application")
135, m_main_factory(
am->mainFactory())
137, m_sequential_parallel_super_mng(
nullptr)
142, m_main_service_factory_infos(
am->registeredServiceFactoryInfos())
143, m_main_module_factory_infos(
am->registeredModuleFactoryInfos())
144, m_has_garbage_collector(
am->hasGarbageCollector())
148, m_service_and_module_factory_mng(
nullptr)
165 m_task_implementation.reset();
171 if (platform::getStackTraceService()==m_stack_trace_service.get())
172 platform::setStackTraceService(
nullptr);
183 delete m_service_and_module_factory_mng;
187 delete m_configuration_mng;
190 m_owned_sequential_parallel_super_mng.reset();
200 delete m_trace_policy;
267 auto t =
injector.createInstance<InterfaceType>(s,
true);
280extern "C++" ARCANE_UTILS_EXPORT
void
281arcaneSetPauseOnError(
bool v);
324 m_trace->
info(4) <<
"*** Initialization informations:";
325 m_trace->
info(4) <<
"*** PID: " << platform::getProcessId();
326 m_trace->
info(4) <<
"*** Host: " << platform::getHostName();
334 m_trace->
info(4) <<
"*** Trying to load dynamic library: " << name;
337 m_trace->
info(4) <<
"WARNING: Can not load library '" << name <<
"'";
341#ifdef ARCANE_OS_WIN32
345 "arcane_thread",
"arcane_mpithread",
347 for( Integer i=0; i<5; ++i )
352 m_configuration_mng = arcaneCreateConfigurationMng(
traceMng());
355 m_service_and_module_factory_mng = arcaneCreateServiceAndModuleFactoryMng(
traceMng());
368 arcaneSetPauseOnError(
true);
382 m_stack_trace_service =
sv;
383 platform::setStackTraceService(
sv.get());
393 if (!platform::getEnvironmentVariable(
"ARCANE_LLVMSYMBOLIZER_PATH").null()){
400 m_symbolizer_service = s;
410 m_thread_implementation_service =
sv;
411 m_thread_implementation =
sv->createImplementation();
413 m_thread_implementation->initialize();
417 m_trace->
info() <<
"Can not find thread implementation service "
418 <<
"(names=" << _stringListToArray(
names) <<
"). Threads are disabled.";
436 TaskFactoryInternal::setImplementation(
sv.get());
440 m_task_implementation =
sv;
443 ARCANE_FATAL(
"Can not find task implementation service (names='{0}')."
444 " Please check if Arcane is configured with Intel TBB library",
445 _stringListToArray(
names));
462 m_profiling_service =
sv;
475 m_online_debugger =
sv;
485 m_processor_affinity_service =
sv;
503 if (
sm->isParallel()){
504 m_owned_sequential_parallel_super_mng =
sf.createReference(
"SequentialParallelSuperMng",
SB_AllowNull);
505 seq_sm = m_owned_sequential_parallel_super_mng.get();
507 ARCANE_FATAL(
"Can not find service 'SequentialParallelSuperMng'");
557 String s = platform::getEnvironmentVariable(
"ARCANE_PARALLEL_OUTPUT");
569 m_trace->
info(4) <<
"*** HomeDirectory: " << platform::getHomeDirectory();
571#ifdef ARCANE_CHECK_MEMORY
593 m_trace_policy->setDefaultClassConfigXmlBuffer(userConfigBuffer());
599 m_trace->
info() <<
"WARNING: Execution in DEBUG mode!";
602 m_trace->
info() <<
"WARNING: Compilation in CHECK mode !";
614 m_trace->
info() <<
"WARNING: Execution in CHECK mode!";
618 m_trace->
info() <<
"WARNING: Execution in TRACE mode !";
624 m_trace->
info() <<
"** -- ** -- ** -- ** -- ** -- ** -- ** -- ** -- ** -- **";
625 m_trace->
info() <<
"** -- ** -- ** -- ** -- ** -- ** -- ** -- ** -- ** -- **";
637 m_trace->
info() <<
"** -- ** -- ** -- ** -- ** -- ** -- ** -- ** -- ** -- **";
638 m_trace->
info() <<
"** -- ** -- ** -- ** -- ** -- ** -- ** -- ** -- ** -- **";
639 m_trace->
info() <<
"Date: " << platform::getCurrentDateTime();
640 m_trace->
info() <<
"MemoryUsage: " <<
static_cast<Int64
>(platform::getMemoryUsed() / 1.0e6) <<
" (MegaBytes)";
643 <<
" (Compiler: " << platform::getCompilerId() <<
")";
644 m_trace->
info() <<
"Current process pid=" << platform::getProcessId()
645 <<
" machine=" << platform::getHostName();
648 if (platform::getStackTraceService()){
649 m_trace->
info() <<
"Stack trace service is available";
652 m_trace->
info() <<
"Symbolizer service is available";
655#ifdef ARCANE_USE_LIBXML2
656 m_trace->
info() <<
"Using 'libxml2' for XML parsing";
672 m_trace->
info() <<
"Unknown online debugger service";
678 _readCodeConfigurationFile();
688 m_trace->
info() <<
"Reading configuration parameters from runtime config file";
693 cr.addValuesFromJSON(
config,ConfigurationReader::P_GlobalRuntime);
700 m_trace->
info() <<
"Reading configuration parameters from code config file";
707 _initDataInitialisationPolicy();
718 std::ostringstream
ostr;
736 sv = makeRef(createNullPhysicalUnitSystemService());
738 m_physical_unit_system_service =
sv;
749 m_performance_counter_service =
p;
754 m_trace->
info() <<
"No performance counter service found";
761 String trace_str = platform::getEnvironmentVariable(
"ARCANE_TRACE_ENUMERATOR");
765 auto p = m_performance_counter_service;
767 m_trace->
info() <<
"Enumerator tracing is enabled";
769 arcaneSetSingletonItemEnumeratorTracer(
tracer);
774 m_trace->
info() <<
"WARNING: enumerator tracing is not available because no performance counter service is available.";
777 m_trace->
info() <<
"WARNING: enumerator tracing is not available when using multi-tasking.";
791 <<
" ItemEnumeratorVersion=" << ItemEnumerator::version();
806_readCodeConfigurationFile()
824 else if (config_file_name.
empty()){
833 if (!platform::isFileReadable(buf.toString())){
840 m_trace->
info() <<
"Using configuration file in current directory.";
843 config_file_name = buf.toString();
845 m_trace->
info() <<
"Using configuration file: '" << config_file_name <<
"'";
847 if (use_config_file){
850 ARCANE_FATAL(
"Can not read configuration file '{0}'",config_file_name);
853 ARCANE_FATAL(
"Can not parse configuration file '{0}'",config_file_name);
873 m_trace->
log() <<
"No user configuration file '" << buf <<
"'";
880 m_trace->
log() <<
"Can not parse user configuration file '" << buf <<
"'";
911 auto services = builder.createAllInstances();
918 for( Integer i=0, n=services.size(); i<n; ++i ){
926 services.add(createArcaneCodeService(
this));
994_initDataInitialisationPolicy()
1003 else if (data_init_policy==
"NAN"){
1007 else if (data_init_policy==
"NONE"){
1011 else if (data_init_policy==
"LEGACY"){
1015 else if (data_init_policy==
"NAN_AND_DEFAULT"){
1022 m_trace->
info() <<
"Change data initialisation policy: " << data_init_policy
1023 <<
" (" << (int)init_policy <<
")";
1025 m_trace->
info() <<
"Data initialisation policy is : " << (int)init_policy;
#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.
const String & dataDir() const
Retourne le chemin où se trouve les fichiers de données.
const String & codeName() const
Retourne le nom du code de calcul lié l'application.
ByteConstSpan runtimeConfigFileContent() const
Contenu du fichier de configuration de l'application.
const String & applicationName() const
Nom de l'application.
const String & targetFullName() const
Retourne le nom complet de la cible.
const VersionInfo & codeVersion() const
Numéro de version.
bool isDebug() const
Retourne true si on s'exécute en mode debug.
const String & dataOsDir() const
Retourne le chemin où se trouve les fichiers de données dépendant de l'OS.
StringCollection dynamicLibrariesName() const
Liste des bibliothèques dynamiques.
String m_user_config_path
Répertoire de configuration utilisateur.
void _openUserConfig()
Analyse le fichier de configuration de l'utilisateur.
ReferenceCounter< ITraceMng > m_trace
Gestionnaire de traces.
~Application() override
Détruit le gestionnaire.
ModuleFactoryInfoCollection m_main_module_factory_infos
Tableau des fabriques de module.
IDataFactory * dataFactory() override
Fabrique de donnée.
ScopedPtrT< IXmlDocumentHolder > m_config_document
Arbre DOM de la configuration.
const ApplicationBuildInfo & applicationBuildInfo() const override
Informations sur les paramètres de construction de l'instance.
ApplicationInfo m_exe_info
Informations sur l'exécutable.
String m_major_and_minor_version_str
Version M.m.
ITraceMngPolicy * getTraceMngPolicy() override
Politique de configuration d'un gestionnaire de trace.
String m_version_str
Infos sur la configuration.
String m_used_task_service_name
Nom du service utilisé pour gérer les tâches.
ITraceMng * createAndInitializeTraceMng(ITraceMng *parent_trace, const String &file_suffix) override
Créé et initialise une instance de ITraceMng.
IMainFactory * m_main_factory
Manufacture principale.
const DotNetRuntimeInitialisationInfo & dotnetRuntimeInitialisationInfo() const override
Informations d'initialisation du runtime '.Net'.
IMainFactory * mainFactory() const override
Manufacture principale.
SessionList m_sessions
Liste des sessions.
Ref< InterfaceType > _tryCreateServiceUsingInjector(const StringList &names, String *found_name)
Ref< InterfaceType > _tryCreateService(const StringList &names, String *found_name)
const AcceleratorRuntimeInitialisationInfo & acceleratorRuntimeInitialisationInfo() const override
Informations d'initialisation du runtime pour les accélérateurs.
String m_user_name
Nom de l'utilisateur.
IRessourceMng * m_ressource_mng
Gestionnaire de ressources.
const ApplicationInfo & applicationInfo() const override
Informations sur l'exécutable.
IDataFactoryMng * dataFactoryMng() const override
Fabrique de donnée.
String m_used_thread_service_name
Nom du service utilisé pour gérer les threads.
XmlNode m_user_config_root_element
Elément racine de la configuration utilisateur.
String m_main_version_str
Version sous la forme Majeur.mineur.beta.
void initialize() override
Initialise l'instance. L'instance n'est pas utilisable tant que cette méthode n'a pas été appelée.
ModuleFactoryInfoCollection moduleFactoryInfos() override
Liste des informations sur les fabriques des modules.
UniqueArray< Byte > m_user_config_bytes
Fichier contenant la configuration utilisateur.
bool m_is_init
true si déjà initialisé
void build() override
Construit les membres de l'instance. L'instance n'est pas utilisable tant que cette méthode n'a pas é...
ITraceMng * traceMng() const override
Gestionnaire de traces.
XmlNode m_config_root_element
Elément racine de la configuration.
String m_application_name
Nom de l'application.
String m_targetinfo_str
Infos sur la configuration.
ScopedPtrT< IXmlDocumentHolder > m_user_config_document
Arbre DOM de la configuration utilisateur.
ServiceFactoryInfoCollection m_main_service_factory_infos
Tableau des fabriques de service.
ServiceFactory2Collection serviceFactories2() override
Liste des fabriques de service.
Ref< ICodeService > getCodeService(const String &file_name) override
Retourne le chargeur de cas correspondant au fichier donné par file_name.
Ref< IParallelSuperMng > m_parallel_super_mng
Gestionnaire du parallélisme.
IServiceMng * m_service_mng
Gestionnaire des services.
void removeSession(ISession *s) override
Supprime la session session.
IIOMng * m_io_mng
Gestionnaire des entrées/sorties.
UniqueArray< Byte > m_config_bytes
Fichier contenant la configuration.
void addSession(ISession *s) override
Ajoute la session session.
Ref< IDataFactoryMng > m_data_factory_mng
Fabrique des données.
IParallelSuperMng * m_sequential_parallel_super_mng
Gestionnaire du parallélisme séquentiel.
Application(IArcaneMain *)
Construit un superviseur avec les informations d'exécution ex.
IParallelSuperMng * parallelSuperMng() override
Gestionnaire superviseur du parallélisme.
static Real initializationTimeForAccelerator()
Retourne le temps (en seconde) pour l'initialisation des runtimes accélérateurs pour ce processus.
Lecteurs de fichiers de configuration.
Classe utilitaire pour la destruction des objets alloués par new.
Classe gérant un répertoire.
virtual String path() const
Retourne le chemin du répertoire.
Informations pour l'initialisation du runtime '.Net'.
Interface de la classe de gestion du code.
virtual const DotNetRuntimeInitialisationInfo & dotnetRuntimeInitialisationInfo() const =0
Informations d'initialisation du runtime '.Net'.
virtual const AcceleratorRuntimeInitialisationInfo & acceleratorRuntimeInitialisationInfo() const =0
Informations d'initialisation du runtime pour les accélérateurs.
virtual const ApplicationBuildInfo & applicationBuildInfo() const =0
Informations pour construire l'instance IApplication.
Interface d'un chargeur de cas.
virtual StringCollection validExtensions() const =0
Retourne la liste des extensions de fichier traitées par l'instance. L'extension ne comprend pas le '...
virtual IConfiguration * defaultConfiguration() const =0
Configuration par défaut.
Interface du gestionnaire de fabrique d'une donnée.
Interface d'une fabrique d'une donnée.
Interface d'une chargeur dynamique de bibliothèque.
Interface d'une bibliothèque dynamique.
virtual bool collectiveRead(const String &filename, ByteArray &bytes)=0
Lecture collective d'un fichier.
virtual IXmlDocumentHolder * parseXmlBuffer(Span< const Byte > buffer, const String &name)=0
Lit et analyse le fichier XML contenu dans le buffer buffer.
virtual ITraceMng * createTraceMng()=0
Créé un gestionnaire de trace.
virtual IServiceMng * createServiceMng(IBase *)=0
Crée une instance du gestionnaire de services.
virtual ITraceMngPolicy * createTraceMngPolicy(IApplication *app)=0
Créé un gestionnaire de configuration pour un gestion de trace.
virtual Ref< IDataFactoryMng > createDataFactoryMngRef(IApplication *)=0
Créé un gestionnaire de fabrique pour les données.
virtual IIOMng * createIOMng(IApplication *)=0
Crée une instance du gestionnaire d'entrée/sortie.
virtual void setTraceMng(ITraceMng *msg)=0
Positionne le ITraceMng pour les messages.
Classe abstraite du superviseur de parallélisme.
virtual bool isParallel() const =0
Retourne true si l'exécution est parallèle.
Interface d'un service de de trace des appels de fonctions.
static IRessourceMng * createDefault(IApplication *)
Création d'un gestionnaire d'historique par défaut.
virtual ModuleFactoryInfoCollection moduleFactoryInfos() const =0
Liste des fabriques de service.
virtual void createAllServiceRegistererFactories()=0
Créé toutes les fabriques associées à des ServiceRegisterer.
virtual ServiceFactory2Collection serviceFactories2() const =0
Liste des informations sur les fabriques des modules.
virtual void addGlobalFactory(IServiceFactoryInfo *sfi)=0
Ajoute la fabrique de service sfi. sfi ne doit pas être détruit tant que cette instance est utilisée....
Interface d'une session d'exécution d'un cas.
Interface du gestionnaire de configuration d'un gestionnnaire de trace.
virtual void setIsParallelOutput(bool v)=0
Indique si en parallèle tous les rangs sortent les traces dans un fichier.
virtual void initializeTraceMng(ITraceMng *trace, Int32 rank)=0
Initialise trace.
virtual void setIsDebug(bool v)=0
Indique si les sorties de débug sont actives.
virtual void setIsParallel(bool v)=0
Indique si le parallélisme est actif.
virtual void setIsMasterHasOutputFile(bool active)=0
Indique si un ITraceMng maître sort les traces dans un fichier en plus de la sortie standard.
virtual void setVerbosityLevel(Int32 level)=0
Niveau de verbosité.
virtual void setStandardOutputVerbosityLevel(Int32 level)=0
Niveau de verbosité sur le flot de sortie standard (stdout).
virtual void setDefaultVerboseLevel(ITraceMng *trace, Int32 minimal_level)=0
Gestionnaire d'un document DOM.
Classe de base d'une vue sur une connectivité non structurée.
Vues sur les conteneurs contenant les connectivités. Cette classe permet de rendre opaque en dehors d...
Informations de connectivité, pour une famille d'entité, permettant la transition entre les anciennes...
Structure interne d'une entité de maillage.
Index d'un Item dans une variable.
Structure interne partagée d'une entité de maillage.
static ItemTypeMng * _singleton()
Instance singleton du type.
Itérateur pour la classe ItemVectorView.
Vue sur un vecteur d'entités.
Classe de base d'un élément de maillage.
Gestion d'un document JSON.
Représente une valeur JSON.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Function each(Function f)
Applique le fonctor f à tous les éléments du tableau.
static void setProfilingLevel(Int32 level)
Positionne le niveau de profilage.
static Int32 profilingLevel()
Niveau de profilage.
static void setVerboseLevel(Integer v)
Positionne le niveau de verbosité (0 pour pas d'affichage qui est le défaut)
static Int32 nbAllowedThread()
Nombre de threads utilisés au maximum pour gérer les tâches.
static void terminate()
Indique qu'on n'utilisera plus les threads. Cette méthode ne doit pas être appelée lorsque des tâches...
static bool isActive()
Indique si les tâches sont actives. Les tâches sont actives si une implémentation est disponible et s...
static void printInfos(std::ostream &o)
Affiche les informations sur l'implémentation.
Vue sur les connectivités standards d'un maillage non structuré.
Informations sur une version.
XmlNode child(const String &name) const
Noeud fils de celui-ci de nom name.
bool null() const
Vrai si le noeud est nul.
Interface du gestionnaire de traces.
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.
TraceMessage log() const
Flot pour un message de log.
TraceMessage warning() const
Flot pour un message d'avertissement.
TraceMessage info() const
Flot pour un message d'information.
TraceMessage logdate() const
Flot pour un message de log précédé de la date.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
void setGlobalDataInitialisationPolicy(eDataInitialisationPolicy init_policy)
Positionne la politique d'initialisation des variables.
@ SB_AllowNull
Autorise l'absence du service.
bool arcaneIsCheck()
Vrai si on est en mode vérification.
eDataInitialisationPolicy
Type de politique d'initialisation possible pour une donnée.
@ DIP_InitInitialWithNanResizeWithDefault
Initialisation avec des NaN pour à la création et le constructeur par défaut ensuite.
@ DIP_Legacy
Initialisation en mode historique.
@ DIP_None
Pas d'initialisation forcée.
@ DIP_InitWithNan
Initialisation avec des NaN (Not a Number)
@ DIP_InitWithDefault
Initialisation avec le constructeur par défaut.
bool arcaneHasThread()
Vrai si arcane est compilé avec le support des threads ET qu'ils sont actifs.
void arcaneSetHasThread(bool v)
Active ou désactive le support des threads.
eDataInitialisationPolicy getGlobalDataInitialisationPolicy()
Récupère la politique d'initialisation des variables.
Span< const std::byte > ByteConstSpan
Vue en lecture seule d'un tableau à une dimension de caractères.
void arcaneSetCheck(bool v)
Active ou désactive le mode vérification.
eItemKind
Genre d'entité de maillage.