Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Apply the default settings of 'smpi/buffering' too
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Sun, 18 Aug 2019 15:01:40 +0000 (17:01 +0200)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Sun, 18 Aug 2019 15:36:22 +0000 (17:36 +0200)
Previously, we did obey to that option when given, but the default
value was ignored. This is because the handling was done in the value
verification callback, that is not used for the default value.

src/mc/mc_config.cpp
src/mc/mc_config.hpp
src/smpi/internals/smpi_global.cpp

index 1ab68c0..265601d 100644 (file)
@@ -73,20 +73,13 @@ simgrid::config::Flag<bool> _sg_mc_send_determinism{
       _mc_cfg_cb_check("value to enable/disable the detection of send-determinism in the communications schemes");
     }};
 
       _mc_cfg_cb_check("value to enable/disable the detection of send-determinism in the communications schemes");
     }};
 
-static simgrid::config::Flag<std::string> _sg_mc_buffering{
-    "smpi/buffering", "Buffering semantic to use for MPI (only used in MC)", "zero", [](const std::string& value) {
-      try {
-        if (value == "zero")
-          simgrid::config::set_value<int>("smpi/send-is-detached-thresh", 0);
-        else if (value == "infty")
-          simgrid::config::set_value<int>("smpi/send-is-detached-thresh", INT_MAX);
-        else
-          xbt_die("configuration option 'smpi/buffering' can only take 'zero' or 'infty' as a value");
-      } catch (std::out_of_range& e) {
-        /* If the 'smpi/send-is-detached-thresh' does not exist, we are in the MCer process, where this option makes no
-         * sense, so just ignore it */
-      }
-    }};
+simgrid::config::Flag<std::string> _sg_mc_buffering{
+    "smpi/buffering",
+    "Buffering semantic to use for MPI (only used in MC)",
+    "zero",
+    {{"zero", "No system buffering: MPI_Send is blocking"},
+     {"infty", "Infinite system buffering: MPI_Send returns immediately"}},
+    [](const std::string& value) { _mc_cfg_cb_check("buffering mode"); }};
 
 static simgrid::config::Flag<std::string> _sg_mc_reduce{
     "model-check/reduction", "Specify the kind of exploration reduction (either none or DPOR)", "dpor",
 
 static simgrid::config::Flag<std::string> _sg_mc_reduce{
     "model-check/reduction", "Specify the kind of exploration reduction (either none or DPOR)", "dpor",
index 61d2c35..391d789 100644 (file)
@@ -10,6 +10,7 @@
 
 /********************************** Configuration of MC **************************************/
 extern "C" XBT_PUBLIC int _sg_do_model_check;
 
 /********************************** Configuration of MC **************************************/
 extern "C" XBT_PUBLIC int _sg_do_model_check;
+extern XBT_PUBLIC simgrid::config::Flag<std::string> _sg_mc_buffering;
 extern XBT_PUBLIC simgrid::config::Flag<std::string> _sg_mc_record_path;
 extern XBT_PRIVATE simgrid::config::Flag<int> _sg_mc_checkpoint;
 extern XBT_PUBLIC simgrid::config::Flag<std::string> _sg_mc_property_file;
 extern XBT_PUBLIC simgrid::config::Flag<std::string> _sg_mc_record_path;
 extern XBT_PRIVATE simgrid::config::Flag<int> _sg_mc_checkpoint;
 extern XBT_PUBLIC simgrid::config::Flag<std::string> _sg_mc_property_file;
index 0feadab..5621fb0 100644 (file)
 #include <fstream>
 #include <sys/stat.h>
 
 #include <fstream>
 #include <sys/stat.h>
 
+#if SIMGRID_HAVE_MC
+#include "src/mc/mc_config.hpp"
+#endif
+
 #if SG_HAVE_SENDFILE
 #include <sys/sendfile.h>
 #endif
 #if SG_HAVE_SENDFILE
 #include <sys/sendfile.h>
 #endif
@@ -224,9 +228,21 @@ void smpi_comm_null_copy_buffer_callback(simgrid::kernel::activity::CommImpl*, v
 
 static void smpi_check_options()
 {
 
 static void smpi_check_options()
 {
-  //check correctness of MPI parameters
+#if SIMGRID_HAVE_MC
+  if (MC_is_active()) {
+    if (_sg_mc_buffering == "zero")
+      simgrid::config::set_value<int>("smpi/send-is-detached-thresh", 0);
+    else if (_sg_mc_buffering == "infty")
+      simgrid::config::set_value<int>("smpi/send-is-detached-thresh", INT_MAX);
+    else
+      THROW_IMPOSSIBLE;
+  }
+#endif
 
   xbt_assert(simgrid::config::get_value<int>("smpi/async-small-thresh") <=
 
   xbt_assert(simgrid::config::get_value<int>("smpi/async-small-thresh") <=
+                 simgrid::config::get_value<int>("smpi/send-is-detached-thresh"),
+             "smpi/async-small-thresh (=%d) should be smaller or equal to smpi/send-is-detached-thresh (=%d)",
+             simgrid::config::get_value<int>("smpi/async-small-thresh"),
              simgrid::config::get_value<int>("smpi/send-is-detached-thresh"));
 
   if (simgrid::config::is_default("smpi/host-speed") && not MC_is_active()) {
              simgrid::config::get_value<int>("smpi/send-is-detached-thresh"));
 
   if (simgrid::config::is_default("smpi/host-speed") && not MC_is_active()) {