X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/cfa35c4fa9a6bcfa6aa8f8cf21da6ab292ea21ad..192d29ba701784b85bd2d4c9c8e65cec4c7d4f8f:/src/mc/mc_config.cpp diff --git a/src/mc/mc_config.cpp b/src/mc/mc_config.cpp index e182f50540..fe9b06fd1a 100644 --- a/src/mc/mc_config.cpp +++ b/src/mc/mc_config.cpp @@ -57,8 +57,9 @@ int _sg_mc_max_visited_states = 0; static simgrid::config::Flag cfg_mc_reduction{ "model-check/reduction", "Specify the kind of exploration reduction (either none or DPOR)", "dpor", [](std::string_view value) { - if (value != "none" && value != "dpor") - xbt_die("configuration option 'model-check/reduction' can only take 'none' or 'dpor' as a value"); + if (value != "none" && value != "dpor" && value != "sdpor" && value != "odpor") + xbt_die("configuration option 'model-check/reduction' must be one of the following: " + " 'none', 'dpor', 'sdpor', or 'odpor'"); }}; simgrid::config::Flag _sg_mc_sleep_set{ @@ -66,11 +67,11 @@ simgrid::config::Flag _sg_mc_sleep_set{ [](bool) { _mc_cfg_cb_check("value to enable/disable the use of sleep-set in the reduction algorithm"); }}; simgrid::config::Flag _sg_mc_strategy{ - "model-check/strategy", "Specify the the kind of heuristic to use for guided model-checking", "none", - [](std::string_view value) { - if (value != "none" && value != "nb_wait") - xbt_die("configuration option 'model-check/guided-mc' can only take 'none' or 'nb_wait' as a value"); - }}; + "model-check/strategy", + "Specify the the kind of heuristic to use for guided model-checking", + "none", + {{"none", "No specific strategy: simply pick the first available transistion."}, + {"nb_wait", "Take any enabled wait transition, to reduce the distance between an async and its wait."}}}; #if SIMGRID_HAVE_STATEFUL_MC simgrid::config::Flag _sg_mc_checkpoint{ @@ -135,11 +136,29 @@ simgrid::config::Flag _sg_mc_termination{ "model-check/termination", "Whether to enable non progressive cycle detection", false, [](bool) { _mc_cfg_cb_check("value to enable/disable the detection of non progressive cycles"); }}; -bool simgrid::mc::cfg_use_DPOR() +simgrid::mc::ReductionMode simgrid::mc::get_model_checking_reduction() { - if (cfg_mc_reduction.get() == "dpor" && _sg_mc_max_visited_states__ > 0) { + if ((cfg_mc_reduction.get() == "dpor" || cfg_mc_reduction.get() == "sdpor" || cfg_mc_reduction.get() == "odpor") && + _sg_mc_max_visited_states__ > 0) { XBT_INFO("Disabling DPOR since state-equality reduction is activated with 'model-check/visited'"); - return false; + return simgrid::mc::ReductionMode::none; + } + + if (cfg_mc_reduction.get() == "none") { + return ReductionMode::none; + } else if (cfg_mc_reduction.get() == "dpor") { + return ReductionMode::dpor; + } else if (cfg_mc_reduction.get() == "sdpor") { + return ReductionMode::sdpor; + } else if (cfg_mc_reduction.get() == "odpor") { + return simgrid::mc::ReductionMode::odpor; + } else if (cfg_mc_reduction.get() == "udpor") { + XBT_INFO("No reduction will be used: " + "UDPOR is has a dedicated invocation 'model-check/unfolding-checker' " + "but is not yet supported in SimGrid"); + return ReductionMode::none; + } else { + XBT_INFO("Unknown reduction mode: defaulting to no reduction"); + return ReductionMode::none; } - return cfg_mc_reduction.get() == "dpor"; }