14#include "arcane/ApplicationBuildInfo.h"
16#include "arcane/utils/PlatformUtils.h"
17#include "arcane/utils/String.h"
18#include "arcane/utils/List.h"
19#include "arcane/utils/ValueConvert.h"
20#include "arcane/utils/CommandLineArguments.h"
21#include "arcane/utils/TraceClassConfig.h"
22#include "arcane/utils/ApplicationInfo.h"
24#include "arcane/CaseDatasetSource.h"
41 x = std::min(std::max(x,min_value),max_value);
52 template <
typename DataType>
57 explicit Property(DataType default_value)
58 : m_value(default_value)
59 , m_default_value(default_value)
62 : Property(DataType())
64 Property<DataType>& operator=(
const DataType& v)
69 operator DataType()
const {
return m_value; }
73 void setValue(
const DataType& v)
84 DataType value()
const {
return m_value; }
85 bool isValueSet()
const {
return m_has_value; }
86 void setValidator(std::function<
void(DataType&)>&& func) { m_validator = func; }
91 DataType m_default_value;
92 bool m_has_value =
false;
93 std::function<void(DataType&)> m_validator;
100 explicit Int32Value(
Int32 v)
103 operator Int32()
const {
return value; }
107 Int32Value minValue(
Int32 x)
109 return Int32Value(std::max(value, x));
111 Int32Value maxValue(
Int32 x)
113 return Int32Value(std::min(value, x));
123 Int32 v = default_value;
124 if (!str_value.
null()) {
125 bool is_bad = builtInGetValue(v, str_value);
129 return Int32Value(v);
131 static void checkSet(Property<bool>& p,
const String& str_value)
135 if (str_value.null())
138 bool is_bad = builtInGetValue(v, str_value);
146 if (str_value.null())
149 bool is_bad = builtInGetValue(v, str_value);
157 if (str_value.null())
167 p.setValue(str_values);
173 if (str_value.null())
175 p.setValue(str_value);
189 : m_nb_task_thread(-1)
192 m_nb_task_thread.setValidator([](
Int32& x) { _clamp(x, -1, 512); });
197 Property<StringList> m_task_implementation_services;
198 Property<StringList> m_thread_implementation_services;
199 Property<Int32> m_nb_task_thread;
214 NameValuePair(
const String& n,
const String& v) : name(n), value(v){}
221 : m_nb_shared_memory_sub_domain(0)
222 , m_nb_replication_sub_domain(0)
223 , m_nb_processus_sub_domain(0)
224 , m_config_file_name(
"")
229 m_nb_shared_memory_sub_domain.setValidator([](
Int32& x){ _clamp(x,0,1024); });
230 m_nb_replication_sub_domain.setValidator([](
Int32& x){ x = std::max(x,0); });
231 m_nb_processus_sub_domain.setValidator([](
Int32& x){ x = std::max(x,0); });
249 const String& default_value)
251 if (!param_name.
null()) {
252 String v = _searchParam(param_name);
256 for (
const auto& x : env_values) {
261 return default_value;
280 String m_default_message_passing_service;
288 for (
const auto& x : m_values) {
289 if (x.name == param_name)
299ApplicationCoreBuildInfo::
300ApplicationCoreBuildInfo()
301: m_core(new CoreImpl())
305ApplicationCoreBuildInfo::
306ApplicationCoreBuildInfo(
const ApplicationCoreBuildInfo& rhs)
311ApplicationCoreBuildInfo& ApplicationCoreBuildInfo::
312operator=(
const ApplicationCoreBuildInfo& rhs)
316 m_core =
new CoreImpl(*(rhs.m_core));
321ApplicationCoreBuildInfo::
322~ApplicationCoreBuildInfo()
330ApplicationBuildInfo::
331ApplicationBuildInfo()
339ApplicationBuildInfo::
340ApplicationBuildInfo(
const ApplicationBuildInfo& rhs)
341: ApplicationCoreBuildInfo(rhs)
342, m_p(new
Impl(*rhs.m_p))
346ApplicationBuildInfo& ApplicationBuildInfo::
347operator=(
const ApplicationBuildInfo& rhs)
349 ApplicationCoreBuildInfo::operator=(rhs);
352 m_p =
new Impl(*(rhs.m_p));
360ApplicationBuildInfo::
361~ApplicationBuildInfo()
369void ApplicationBuildInfo::
373 String str = m_p->getValue({
"ARCANE_NB_TASK" },
"T", String());
374 PropertyImpl::checkSet(m_core->m_nb_task_thread, str);
377 String str = m_p->getValue({
"ARCANE_NB_THREAD" },
"S", String());
378 PropertyImpl::checkSet(m_p->m_nb_shared_memory_sub_domain, str);
381 String str = m_p->getValue({
"ARCANE_NB_REPLICATION" },
"R", String());
382 PropertyImpl::checkSet(m_p->m_nb_replication_sub_domain, str);
385 String str = m_p->getValue({
"ARCANE_NB_SUB_DOMAIN" },
"P", String());
386 PropertyImpl::checkSet(m_p->m_nb_processus_sub_domain, str);
389 String str = m_p->getValue( {
"ARCANE_OUTPUT_LEVEL" },
"OutputLevel",
390 String::fromNumber(Trace::UNSPECIFIED_VERBOSITY_LEVEL));
391 PropertyImpl::checkSet(m_p->m_output_level, str);
394 String str = m_p->getValue( {
"ARCANE_VERBOSITY_LEVEL",
"ARCANE_VERBOSE_LEVEL" },
"VerbosityLevel",
395 String::fromNumber(Trace::UNSPECIFIED_VERBOSITY_LEVEL));
396 PropertyImpl::checkSet(m_p->m_verbosity_level, str);
399 String str = m_p->getValue( { },
"MinimalVerbosityLevel",
400 String::fromNumber(Trace::UNSPECIFIED_VERBOSITY_LEVEL));
401 PropertyImpl::checkSet(m_p->m_minimal_verbosity_level, str);
404 String str = m_p->getValue({
"ARCANE_MASTER_HAS_OUTPUT_FILE" },
"MasterHasOutputFile",
"0");
405 PropertyImpl::checkSet(m_p->m_is_master_has_output_file, str);
408 String str = m_p->getValue( {
"ARCANE_OUTPUT_DIRECTORY" },
"OutputDirectory",
410 PropertyImpl::checkSet(m_p->m_output_directory, str);
413 String str = m_p->getValue( { },
"CaseDatasetFileName",
416 m_p->m_case_dataset_source.setFileName(str);
419 String str = m_p->getValue( {
"ARCANE_THREAD_BINDING_STRATEGY" },
"ThreadBindingStrategy",
421 PropertyImpl::checkSet(m_p->m_thread_binding_strategy, str);
428void ApplicationBuildInfo::
431 bool has_shm = nbSharedMemorySubDomain()>0;
433 String str = m_p->getValue( {
"ARCANE_TASK_IMPLEMENTATION" },
"TaskService",
"TBB");
434 String service_name = str +
"TaskImplementation";
435 PropertyImpl::checkSet(m_core->m_task_implementation_services, service_name);
439 String thread_str = m_p->getValue( {
"ARCANE_THREAD_IMPLEMENTATION" },
"ThreadService" ,
"Std");
440 list1.add(thread_str+
"ThreadImplementationService");
441 list1.add(
"TBBThreadImplementationService");
442 PropertyImpl::checkSet(m_core->m_thread_implementation_services, list1);
445 String def_name = (has_shm) ?
"Thread" :
"Sequential";
446 String default_service_name = def_name+
"ParallelSuperMng";
448 if (m_p->m_default_message_passing_service.null())
449 m_p->m_default_message_passing_service = default_service_name;
451 String str = m_p->getValue({
"ARCANE_PARALLEL_SERVICE" },
"MessagePassingService", String());
453 String service_name = str +
"ParallelSuperMng";
454 PropertyImpl::checkSet(m_p->m_message_passing_service, service_name);
462void ApplicationBuildInfo::
463setMessagePassingService(
const String& name)
465 m_p->m_message_passing_service = name;
468String ApplicationBuildInfo::
469messagePassingService()
const
471 return m_p->m_message_passing_service;
477void ApplicationCoreBuildInfo::
478setTaskImplementationService(
const String& name)
482 m_core->m_task_implementation_services = s;
484void ApplicationCoreBuildInfo::
485setTaskImplementationServices(
const StringList& names)
487 m_core->m_task_implementation_services = names;
490taskImplementationServices()
const
492 return m_core->m_task_implementation_services;
498void ApplicationCoreBuildInfo::
499setThreadImplementationService(
const String& name)
503 m_core->m_thread_implementation_services = s;
505void ApplicationCoreBuildInfo::
506setThreadImplementationServices(
const StringList& names)
508 m_core->m_thread_implementation_services = names;
511threadImplementationServices()
const
513 return m_core->m_thread_implementation_services;
519Int32 ApplicationCoreBuildInfo::
522 return m_core->m_nb_task_thread;
528void ApplicationCoreBuildInfo::
529setNbTaskThread(
Int32 v)
531 m_core->m_nb_task_thread = v;
537Int32 ApplicationBuildInfo::
538nbSharedMemorySubDomain()
const
540 return m_p->m_nb_shared_memory_sub_domain;
546void ApplicationBuildInfo::
547setNbSharedMemorySubDomain(
Int32 v)
549 m_p->m_nb_shared_memory_sub_domain = v;
555Int32 ApplicationBuildInfo::
556nbReplicationSubDomain()
const
558 return m_p->m_nb_replication_sub_domain;
564void ApplicationBuildInfo::
565setNbReplicationSubDomain(
Int32 v)
567 m_p->m_nb_replication_sub_domain = v;
573Int32 ApplicationBuildInfo::
574nbProcessusSubDomain()
const
576 return m_p->m_nb_processus_sub_domain;
582void ApplicationBuildInfo::
583setNbProcessusSubDomain(
Int32 v)
585 m_p->m_nb_processus_sub_domain = v;
594 return m_p->m_config_file_name;
603 m_p->m_config_file_name = v;
609Int32 ApplicationBuildInfo::
612 return m_p->m_output_level;
618 m_p->m_output_level = v;
624Int32 ApplicationBuildInfo::
625verbosityLevel()
const
627 return m_p->m_verbosity_level;
633 m_p->m_verbosity_level = v;
639Int32 ApplicationBuildInfo::
640minimalVerbosityLevel()
const
642 return m_p->m_minimal_verbosity_level;
645void ApplicationBuildInfo::
646setMinimalVerbosityLevel(Int32 v)
648 m_p->m_minimal_verbosity_level = v;
654bool ApplicationBuildInfo::
655isMasterHasOutputFile()
const
657 return m_p->m_is_master_has_output_file;
660void ApplicationBuildInfo::
661setIsMasterHasOutputFile(
bool v)
663 m_p->m_is_master_has_output_file = v;
669String ApplicationBuildInfo::
670outputDirectory()
const
672 return m_p->m_output_directory;
681 m_p->m_output_directory = v;
690 return m_p->m_thread_binding_strategy;
696 m_p->m_thread_binding_strategy = v;
702void ApplicationBuildInfo::
705 m_p->m_values.add(Impl::NameValuePair(name,value));
720 addParameter(names[i],values[i]);
729_internalApplicationInfo()
731 return m_p->m_app_info;
737const ApplicationInfo& ApplicationBuildInfo::
738_internalApplicationInfo()
const
740 return m_p->m_app_info;
754 return m_p->m_app_info.applicationName();
763 m_p->m_app_info.setCodeVersion(version_info);
769 return m_p->m_app_info.codeVersion();
778 m_p->m_app_info.setCodeName(code_name);
784 return m_p->m_app_info.codeName();
793 return m_p->m_case_dataset_source;
799 return m_p->m_case_dataset_source;
808 m_p->m_app_info.addDynamicLibrary(lib_name);
817 m_p->m_default_message_passing_service = name;
823String ApplicationBuildInfo::
824internalDefaultMessagePassingService()
const
826 return m_p->m_default_message_passing_service;
String getValue(const UniqueArray< String > &env_values, const String ¶m_name, const String &default_value)
Récupère la valeur d'une option.
void setVerbosityLevel(Int32 v)
Positionne le niveau de verbosité des messages des fichiers listings réduits.
void setOutputDirectory(const String &name)
Positionne le répertoire contenant les différentes sorties de la simulation.
VersionInfo codeVersion() const
Numéro de version.
void setOutputLevel(Int32 v)
Positionne le niveau de verbosité des messages sur la sortie standard.
String configFileName() const
Nom du fichier de configuration du code.
void addDynamicLibrary(const String &lib_name)
Ajoute la bibliothèque lib_name à la liste des bibliothèques chargées dynamiquements.
void internalSetDefaultMessagePassingService(const String &name)
Nom du gestionnaire de message par défaut. Ne doit être modifié que par Arcane.
void setCodeName(const String &code_name)
Positionne le nom du code.
String applicationName() const
Nom de l'application.
void parseArguments(const CommandLineArguments &args)
Analyse les arguments de args.
void setApplicationName(const String &v)
Positionne le nom de l'application.
String codeName() const
Retourne le nom du code.
CaseDatasetSource & caseDatasetSource()
Source du jeu de données.
void setConfigFileName(const String &name)
Positionne le fichier de configuration du code.
void setCodeVersion(const VersionInfo &version_info)
Positionne le numéro de version du code.
String threadBindingStrategy() const
Stratégie pour punaiser les threads des tâches.
Informations sur une application.
void setApplicationName(const String &v)
Positionne le nom de l'application.
Source d'un jeu de données d'un cas.
Integer count() const
Nombre d'éléments de la collection.
Arguments de la ligne de commande.
void fillParameters(StringList ¶m_names, StringList &values) const
Récupère la liste des paramètres et leur valeur.
Définition des types pour les propriétés.
Chaîne de caractères unicode.
bool null() const
Retourne true si la chaîne est nulle.
Vecteur 1D de données avec sémantique par valeur (style STL).
Informations sur une version.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
List< String > StringList
Tableau de chaînes de caractères unicode.
std::int32_t Int32
Type entier signé sur 32 bits.