From 748dca059aa67356f3201a486c7aac249ebd2c18 Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Fri, 4 Jun 2021 21:34:02 +0200 Subject: [PATCH] Remove a global variable, and use a static to remember if smpi_main is running. The value of 'running_with_smpi_main' is effectively used later, when the simgrid::config callback is executed. --- src/smpi/include/private.hpp | 2 +- src/smpi/internals/smpi_config.cpp | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/smpi/include/private.hpp b/src/smpi/include/private.hpp index 4abec6c778..e663ba557f 100644 --- a/src/smpi/include/private.hpp +++ b/src/smpi/include/private.hpp @@ -117,7 +117,7 @@ XBT_PRIVATE double smpi_cfg_auto_shared_malloc_thresh(); XBT_PRIVATE bool smpi_cfg_display_alloc(); // utilities -XBT_PRIVATE void smpi_init_options_internal(bool called_by_smpimain); +XBT_PRIVATE void smpi_init_options_internal(bool called_by_smpi_main); extern XBT_PRIVATE char* smpi_data_exe_start; // start of the data+bss segment of the executable extern XBT_PRIVATE size_t smpi_data_exe_size; // size of the data+bss segment of the executable diff --git a/src/smpi/internals/smpi_config.cpp b/src/smpi/internals/smpi_config.cpp index 8165bad124..41f771eb47 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; @@ -193,10 +192,16 @@ void smpi_init_options() smpi_init_options_internal(false); } -void smpi_init_options_internal(bool called_by_smpimain) +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); @@ -221,7 +226,7 @@ void smpi_init_options_internal(bool called_by_smpimain) simgrid::config::declare_flag( "smpi/privatization", "How we should privatize global variable at runtime (no, yes, mmap, dlopen).", - default_privatization, [called_by_smpimain](const std::string& smpi_privatize_option) { + 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") @@ -233,7 +238,7 @@ void smpi_init_options_internal(bool called_by_smpimain) else xbt_die("Invalid value for smpi/privatization: '%s'", smpi_privatize_option.c_str()); - if (not called_by_smpimain) { + if (not running_with_smpi_main) { XBT_DEBUG("Running without smpi_main(); disable smpi/privatization."); _smpi_cfg_privatization = SmpiPrivStrategies::NONE; } @@ -263,7 +268,7 @@ void smpi_init_options_internal(bool called_by_smpimain) simgrid::config::declare_flag("smpi/finalization-barrier", "Do we add a barrier in MPI_Finalize or not", false); - _smpi_options_initialized=true; + smpi_options_initialized = true; } void smpi_check_options() -- 2.20.1