X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2533f01016c86410b430bf2f242ed2ffec647e25..5d3cc4fa4b1428899a036b2a7c2b9c038673ed4d:/src/smpi/internals/smpi_config.cpp diff --git a/src/smpi/internals/smpi_config.cpp b/src/smpi/internals/smpi_config.cpp index d38ea1bc92..0c5dfcc98b 100644 --- a/src/smpi/internals/smpi_config.cpp +++ b/src/smpi/internals/smpi_config.cpp @@ -30,7 +30,6 @@ constexpr bool HAVE_WORKING_MMAP = false; constexpr bool HAVE_WORKING_MMAP = true; #endif -bool _smpi_options_initialized=false; SharedMallocType _smpi_cfg_shared_malloc = SharedMallocType::GLOBAL; SmpiPrivStrategies _smpi_cfg_privatization = SmpiPrivStrategies::NONE; double _smpi_cfg_host_speed; @@ -38,11 +37,9 @@ double _smpi_cfg_host_speed; XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_config, smpi, "Logging specific to SMPI (config)"); simgrid::config::Flag _smpi_cfg_host_speed_string{ - "smpi/host-speed", - "Speed of the host running the simulation (in flop/s). " - "Used to bench the operations.", - "20000f", [](const std::string& str) { - _smpi_cfg_host_speed = xbt_parse_get_speed("smpi/host-speed", 1, str.c_str(), "option", "smpi/host-speed"); + "smpi/host-speed", "Speed of the host running the simulation (in flop/s). Used to bench the operations.", "20000f", + [](const std::string& str) { + _smpi_cfg_host_speed = xbt_parse_get_speed("smpi/host-speed", 1, str, "option smpi/host-speed"); xbt_assert(_smpi_cfg_host_speed > 0.0, "Invalid value (%s) for 'smpi/host-speed': it must be positive.", _smpi_cfg_host_speed_string.get().c_str()); }}; @@ -111,7 +108,11 @@ simgrid::config::Flag _smpi_cfg_comp_adjustment_file{"smpi/comp-adj } } }}; - + +simgrid::config::Flag _smpi_cfg_default_errhandler_is_error{ + "smpi/errors-are-fatal", "Whether MPI errors are fatal or just return. Default is true", true }; +simgrid::config::Flag _smpi_cfg_pedantic{ + "smpi/pedantic", "Activate extra checks that may crash slightly incorrect codes which would not crash on actual implementations", true }; #if HAVE_PAPI simgrid::config::Flag _smpi_cfg_papi_events_file{"smpi/papi-events", "This switch enables tracking the specified counters with PAPI", ""}; @@ -189,9 +190,22 @@ double smpi_cfg_auto_shared_malloc_thresh(){ return _smpi_cfg_auto_shared_malloc_thresh; } -void smpi_init_options(){ +// public version declared in smpi.h (without parameter, and with C linkage) +void smpi_init_options() +{ + smpi_init_options_internal(false); +} + +void smpi_init_options_internal(bool called_by_smpi_main) +{ + static bool smpi_options_initialized = false; + static bool running_with_smpi_main = false; + + if (called_by_smpi_main) + running_with_smpi_main = true; + // return if already called - if(_smpi_options_initialized) + if (smpi_options_initialized) return; simgrid::config::declare_flag("smpi/display-timing", "Whether we should display the timing after simulation.", false); simgrid::config::declare_flag("smpi/keep-temps", "Whether we should keep the generated temporary files.", false); @@ -214,30 +228,29 @@ void smpi_init_options(){ if (default_privatization == nullptr) default_privatization = "no"; - - simgrid::config::declare_flag( "smpi/privatization", - "How we should privatize global variable at runtime (no, yes, mmap, dlopen).", - default_privatization, [](const std::string& smpi_privatize_option){ - if (smpi_privatize_option == "no" || smpi_privatize_option == "0") - _smpi_cfg_privatization = SmpiPrivStrategies::NONE; - else if (smpi_privatize_option == "yes" || smpi_privatize_option == "1") - _smpi_cfg_privatization = SmpiPrivStrategies::DEFAULT; - else if (smpi_privatize_option == "mmap") - _smpi_cfg_privatization = SmpiPrivStrategies::MMAP; - else if (smpi_privatize_option == "dlopen") - _smpi_cfg_privatization = SmpiPrivStrategies::DLOPEN; - else - xbt_die("Invalid value for smpi/privatization: '%s'", smpi_privatize_option.c_str()); - - if (not SMPI_switch_data_segment) { - XBT_DEBUG("Running without smpi_main(); disable smpi/privatization."); - _smpi_cfg_privatization = SmpiPrivStrategies::NONE; - } - if (not HAVE_WORKING_MMAP && _smpi_cfg_privatization == SmpiPrivStrategies::MMAP) { - XBT_INFO("mmap privatization is broken on this platform, switching to dlopen privatization instead."); - _smpi_cfg_privatization = SmpiPrivStrategies::DLOPEN; - } - }); + simgrid::config::declare_flag( + "smpi/privatization", "How we should privatize global variable at runtime (no, yes, mmap, dlopen).", + default_privatization, [](const std::string& smpi_privatize_option) { + if (smpi_privatize_option == "no" || smpi_privatize_option == "0") + _smpi_cfg_privatization = SmpiPrivStrategies::NONE; + else if (smpi_privatize_option == "yes" || smpi_privatize_option == "1") + _smpi_cfg_privatization = SmpiPrivStrategies::DEFAULT; + else if (smpi_privatize_option == "mmap") + _smpi_cfg_privatization = SmpiPrivStrategies::MMAP; + else if (smpi_privatize_option == "dlopen") + _smpi_cfg_privatization = SmpiPrivStrategies::DLOPEN; + else + xbt_die("Invalid value for smpi/privatization: '%s'", smpi_privatize_option.c_str()); + + if (not running_with_smpi_main) { + XBT_DEBUG("Running without smpi_main(); disable smpi/privatization."); + _smpi_cfg_privatization = SmpiPrivStrategies::NONE; + } + if (not HAVE_WORKING_MMAP && _smpi_cfg_privatization == SmpiPrivStrategies::MMAP) { + XBT_INFO("mmap privatization is broken on this platform, switching to dlopen privatization instead."); + _smpi_cfg_privatization = SmpiPrivStrategies::DLOPEN; + } + }); simgrid::config::declare_flag("smpi/privatize-libs", "Add libraries (; separated) to privatize (libgfortran for example)." @@ -256,7 +269,10 @@ void smpi_init_options(){ "smpi/ois", "Small messages timings (MPI_Isend minimum time for small messages)", "0:0:0:0:0"); simgrid::config::declare_flag( "smpi/or", "Small messages timings (MPI_Recv minimum time for small messages)", "0:0:0:0:0"); - _smpi_options_initialized=true; + + simgrid::config::declare_flag("smpi/finalization-barrier", "Do we add a barrier in MPI_Finalize or not", false); + + smpi_options_initialized = true; } void smpi_check_options()