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"
38#include "arcane/core/ArcaneVersion.h"
39#include "arcane/core/ISubDomain.h"
40#include "arcane/core/IIOMng.h"
41#include "arcane/core/IXmlDocumentHolder.h"
42#include "arcane/core/IParallelSuperMng.h"
43#include "arcane/core/IMainFactory.h"
44#include "arcane/core/IArcaneMain.h"
45#include "arcane/core/IRessourceMng.h"
46#include "arcane/core/IServiceLoader.h"
47#include "arcane/core/IServiceMng.h"
48#include "arcane/core/ICodeService.h"
49#include "arcane/core/ISession.h"
50#include "arcane/core/IDataFactory.h"
51#include "arcane/core/IDataFactoryMng.h"
52#include "arcane/core/IXmlDocumentHolder.h"
53#include "arcane/core/XmlNode.h"
54#include "arcane/core/XmlNodeList.h"
55#include "arcane/core/ItemTypeMng.h"
57#include "arcane/core/IPhysicalUnitSystemService.h"
58#include "arcane/core/ServiceBuilder.h"
59#include "arcane/core/Configuration.h"
60#include "arcane/core/Directory.h"
61#include "arcane/core/IServiceAndModuleFactoryMng.h"
62#include "arcane/core/ApplicationBuildInfo.h"
64#include "arcane/core/IItemEnumeratorTracer.h"
65#include "arcane/impl/Application.h"
66#include "arcane/impl/ConfigurationReader.h"
67#include "arcane/impl/ArcaneMain.h"
72#include "arcane/core/Item.h"
73#include "arcane/core/IndexedItemConnectivityView.h"
74#include "arcane/core/UnstructuredMeshConnectivity.h"
76#include "arccore_version.h"
94extern "C++" IPhysicalUnitSystemService*
95createNullPhysicalUnitSystemService();
96extern "C++" IConfigurationMng*
97arcaneCreateConfigurationMng(ITraceMng* tm);
98extern "C++" ARCANE_IMPL_EXPORT IServiceAndModuleFactoryMng*
99arcaneCreateServiceAndModuleFactoryMng(ITraceMng* tm);
100extern "C++" ARCANE_IMPL_EXPORT Ref<IItemEnumeratorTracer>
101arcaneCreateItemEnumeratorTracer(ITraceMng* tm,Ref<IPerformanceCounterService> perf_counter);
102extern "C++" ARCANE_IMPL_EXPORT Ref<ICodeService>
103createArcaneCodeService(IApplication* app);
104extern "C++" ARCANE_CORE_EXPORT
void
105arcaneSetSingletonItemEnumeratorTracer(Ref<IItemEnumeratorTracer> tracer);
113extern "C++" IApplication*
114arcaneCreateApplication(IArcaneMain* am)
116 IApplication* sm =
new Application(am);
129: m_exe_info(
am->applicationInfo())
130, m_namespace_uri(arcaneNamespaceURI())
131, m_local_name(
"Application")
133, m_main_factory(
am->mainFactory())
135, m_sequential_parallel_super_mng(
nullptr)
140, m_main_service_factory_infos(
am->registeredServiceFactoryInfos())
141, m_main_module_factory_infos(
am->registeredModuleFactoryInfos())
142, m_has_garbage_collector(
am->hasGarbageCollector())
146, m_service_and_module_factory_mng(
nullptr)
163 m_task_implementation.reset();
169 if (platform::getStackTraceService()==m_stack_trace_service.get())
170 platform::setStackTraceService(
nullptr);
181 delete m_service_and_module_factory_mng;
185 delete m_configuration_mng;
188 m_owned_sequential_parallel_super_mng.reset();
198 delete m_trace_policy;
247extern "C++" ARCANE_UTILS_EXPORT
void
248arcaneSetPauseOnError(
bool v);
291 m_trace->
info(4) <<
"*** Initialization informations:";
292 m_trace->
info(4) <<
"*** PID: " << platform::getProcessId();
293 m_trace->
info(4) <<
"*** Host: " << platform::getHostName();
301 m_trace->
info(4) <<
"*** Trying to load dynamic library: " << name;
304 m_trace->
info(4) <<
"WARNING: Can not load library '" << name <<
"'";
308#ifdef ARCANE_OS_WIN32
312 "arcane_thread",
"arcane_mpithread",
314 for( Integer i=0; i<5; ++i )
319 m_configuration_mng = arcaneCreateConfigurationMng(
traceMng());
322 m_service_and_module_factory_mng = arcaneCreateServiceAndModuleFactoryMng(
traceMng());
335 arcaneSetPauseOnError(
true);
349 m_stack_trace_service =
sv;
350 platform::setStackTraceService(
sv.get());
360 if (!platform::getEnvironmentVariable(
"ARCANE_LLVMSYMBOLIZER_PATH").null()){
367 m_symbolizer_service = s;
377 m_thread_implementation_service =
sv;
378 m_thread_implementation =
sv->createImplementation();
380 m_thread_implementation->initialize();
384 m_trace->
info() <<
"Can not find thread implementation service "
385 <<
"(names=" << _stringListToArray(
names) <<
"). Threads are disabled.";
406 m_task_implementation =
sv;
409 ARCANE_FATAL(
"Can not find task implementation service (names='{0}')."
410 " Please check if Arcane is configured with Intel TBB library",
411 _stringListToArray(
names));
428 m_profiling_service =
sv;
441 m_online_debugger =
sv;
451 m_processor_affinity_service =
sv;
469 if (
sm->isParallel()){
470 m_owned_sequential_parallel_super_mng =
sf.createReference(
"SequentialParallelSuperMng",
SB_AllowNull);
471 seq_sm = m_owned_sequential_parallel_super_mng.get();
473 ARCANE_FATAL(
"Can not find service 'SequentialParallelSuperMng'");
523 String s = platform::getEnvironmentVariable(
"ARCANE_PARALLEL_OUTPUT");
535 m_trace->
info(4) <<
"*** HomeDirectory: " << platform::getHomeDirectory();
537#ifdef ARCANE_CHECK_MEMORY
559 m_trace_policy->setDefaultClassConfigXmlBuffer(userConfigBuffer());
565 m_trace->
info() <<
"WARNING: Execution in DEBUG mode!";
568 m_trace->
info() <<
"WARNING: Compilation in CHECK mode !";
580 m_trace->
info() <<
"WARNING: Execution in CHECK mode!";
584 m_trace->
info() <<
"WARNING: Execution in TRACE mode !";
590 m_trace->
info() <<
"** -- ** -- ** -- ** -- ** -- ** -- ** -- ** -- ** -- **";
591 m_trace->
info() <<
"** -- ** -- ** -- ** -- ** -- ** -- ** -- ** -- ** -- **";
603 m_trace->
info() <<
"** -- ** -- ** -- ** -- ** -- ** -- ** -- ** -- ** -- **";
604 m_trace->
info() <<
"** -- ** -- ** -- ** -- ** -- ** -- ** -- ** -- ** -- **";
605 m_trace->
info() <<
"Date: " << platform::getCurrentDateTime();
606 m_trace->
info() <<
"MemoryUsage: " <<
static_cast<Int64
>(platform::getMemoryUsed() / 1.0e6) <<
" (MegaBytes)";
609 <<
" (Compiler: " << platform::getCompilerId() <<
")";
610 m_trace->
info() <<
"Current process pid=" << platform::getProcessId()
611 <<
" machine=" << platform::getHostName();
614 if (platform::getStackTraceService()){
615 m_trace->
info() <<
"Stack trace service is available";
618 m_trace->
info() <<
"Symbolizer service is available";
621#ifdef ARCANE_USE_LIBXML2
622 m_trace->
info() <<
"Using 'libxml2' for XML parsing";
638 m_trace->
info() <<
"Unknown online debugger service";
644 _readCodeConfigurationFile();
654 m_trace->
info() <<
"Reading configuration parameters from runtime config file";
659 cr.addValuesFromJSON(
config,ConfigurationReader::P_GlobalRuntime);
666 m_trace->
info() <<
"Reading configuration parameters from code config file";
673 _initDataInitialisationPolicy();
684 std::ostringstream
ostr;
702 sv = makeRef(createNullPhysicalUnitSystemService());
704 m_physical_unit_system_service =
sv;
715 m_performance_counter_service =
p;
720 m_trace->
info() <<
"No performance counter service found";
727 String trace_str = platform::getEnvironmentVariable(
"ARCANE_TRACE_ENUMERATOR");
731 auto p = m_performance_counter_service;
733 m_trace->
info() <<
"Enumerator tracing is enabled";
735 arcaneSetSingletonItemEnumeratorTracer(
tracer);
740 m_trace->
info() <<
"WARNING: enumerator tracing is not available because no performance counter service is available.";
743 m_trace->
info() <<
"WARNING: enumerator tracing is not available when using multi-tasking.";
757 <<
" ItemEnumeratorVersion=" << ItemEnumerator::version();
772_readCodeConfigurationFile()
790 else if (config_file_name.
empty()){
799 if (!platform::isFileReadable(buf.toString())){
806 m_trace->
info() <<
"Using configuration file in current directory.";
809 config_file_name = buf.toString();
811 m_trace->
info() <<
"Using configuration file: '" << config_file_name <<
"'";
813 if (use_config_file){
816 ARCANE_FATAL(
"Can not read configuration file '{0}'",config_file_name);
819 ARCANE_FATAL(
"Can not parse configuration file '{0}'",config_file_name);
839 m_trace->
log() <<
"No user configuration file '" << buf <<
"'";
846 m_trace->
log() <<
"Can not parse user configuration file '" << buf <<
"'";
877 auto services = builder.createAllInstances();
884 for( Integer i=0, n=services.size(); i<n; ++i ){
892 services.add(createArcaneCodeService(
this));
960_initDataInitialisationPolicy()
969 else if (data_init_policy==
"NAN"){
973 else if (data_init_policy==
"NONE"){
977 else if (data_init_policy==
"LEGACY"){
981 else if (data_init_policy==
"NAN_AND_DEFAULT"){
988 m_trace->
info() <<
"Change data initialisation policy: " << data_init_policy
989 <<
" (" << (int)init_policy <<
")";
991 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 > _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 void _internalSetImplementation(ITaskImplementation *task_impl)
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.