Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Remove a global variable, and use a static to remember if smpi_main is running.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Fri, 4 Jun 2021 19:34:02 +0000 (21:34 +0200)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Fri, 4 Jun 2021 19:34:28 +0000 (21:34 +0200)
The value of 'running_with_smpi_main' is effectively used later, when the
simgrid::config callback is executed.

src/smpi/include/private.hpp
src/smpi/internals/smpi_config.cpp

index 4abec6c..e663ba5 100644 (file)
@@ -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
index 8165bad..41f771e 100644 (file)
@@ -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<bool>("smpi/display-timing", "Whether we should display the timing after simulation.", false);
   simgrid::config::declare_flag<bool>("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<std::string>(
       "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<bool>("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()