_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",
/********************************** 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;
#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
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") <=
+ 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()) {