This separates the Checker-specific code from the generic/shared code.
The session should not need to know about every existing Checker.
! timeout 60
$ ../../../smpi_script/bin/smpirun -wrapper "${bindir:=.}/../../../bin/simgrid-mc" --log=xbt_cfg.thresh:warning -hostfile ${srcdir:=.}/hostfile_only_send_deterministic -platform ${srcdir:=.}/../../platforms/cluster.xml --cfg=model-check/communications_determinism:1 --cfg=smpi/send_is_detached_thresh:0 --cfg=smpi/running_power:1e9 ./smpi_only_send_deterministic
> [0.000000] [mc_comm_determinism/INFO] Check communication determinism
-> [0.000000] [mc_Session/INFO] ******************************************************
-> [0.000000] [mc_Session/INFO] **** Only-send-deterministic communication pattern ****
-> [0.000000] [mc_Session/INFO] ******************************************************
-> [0.000000] [mc_Session/INFO] The recv communications pattern of the process 0 is different! Different source for communication #2
-> [0.000000] [mc_Session/INFO] Expanded states = 520
-> [0.000000] [mc_Session/INFO] Visited states = 1476
-> [0.000000] [mc_Session/INFO] Executed transitions = 1312
-> [0.000000] [mc_Session/INFO] Send-deterministic : Yes
-> [0.000000] [mc_Session/INFO] Recv-deterministic : No
+> [0.000000] [mc_comm_determinism/INFO] ******************************************************
+> [0.000000] [mc_comm_determinism/INFO] **** Only-send-deterministic communication pattern ****
+> [0.000000] [mc_comm_determinism/INFO] ******************************************************
+> [0.000000] [mc_comm_determinism/INFO] The recv communications pattern of the process 0 is different! Different source for communication #2
+> [0.000000] [mc_comm_determinism/INFO] Expanded states = 520
+> [0.000000] [mc_comm_determinism/INFO] Visited states = 1476
+> [0.000000] [mc_comm_determinism/INFO] Executed transitions = 1312
+> [0.000000] [mc_comm_determinism/INFO] Send-deterministic : Yes
+> [0.000000] [mc_comm_determinism/INFO] Recv-deterministic : No
return {};
}
+// virtual
+void Checker::logState()
+{
+}
+
}
}
*/
virtual RecordTrace getRecordTrace();
virtual std::vector<std::string> getTextualTrace();
+ virtual void logState();
protected:
Session& getSession() { return *session_; }
return trace;
}
+void CommunicationDeterminismChecker::logState() // override
+{
+ Checker::logState();
+ if (_sg_mc_comms_determinism &&
+ !simgrid::mc::initial_global_state->recv_deterministic &&
+ simgrid::mc::initial_global_state->send_deterministic) {
+ XBT_INFO("******************************************************");
+ XBT_INFO("**** Only-send-deterministic communication pattern ****");
+ XBT_INFO("******************************************************");
+ XBT_INFO("%s", simgrid::mc::initial_global_state->recv_diff);
+ } else if(_sg_mc_comms_determinism &&
+ !simgrid::mc::initial_global_state->send_deterministic &&
+ simgrid::mc::initial_global_state->recv_deterministic) {
+ XBT_INFO("******************************************************");
+ XBT_INFO("**** Only-recv-deterministic communication pattern ****");
+ XBT_INFO("******************************************************");
+ XBT_INFO("%s", simgrid::mc::initial_global_state->send_diff);
+ }
+ XBT_INFO("Expanded states = %lu", mc_stats->expanded_states);
+ XBT_INFO("Visited states = %lu", mc_stats->visited_states);
+ XBT_INFO("Executed transitions = %lu", mc_stats->executed_transitions);
+ if (simgrid::mc::initial_global_state != nullptr)
+ XBT_INFO("Send-deterministic : %s",
+ !simgrid::mc::initial_global_state->send_deterministic ? "No" : "Yes");
+ if (simgrid::mc::initial_global_state != nullptr && _sg_mc_comms_determinism)
+ XBT_INFO("Recv-deterministic : %s",
+ !simgrid::mc::initial_global_state->recv_deterministic ? "No" : "Yes");
+}
+
void CommunicationDeterminismChecker::prepare()
{
private:
void prepare();
int main();
+ void logState() override;
private:
/** Stack representing the position in the exploration graph */
std::list<std::unique_ptr<simgrid::mc::State>> stack_;
return res;
}
+void LivenessChecker::logState() // override
+{
+ Checker::logState();
+ XBT_INFO("Expanded pairs = %lu", mc_stats->expanded_pairs);
+ XBT_INFO("Visited pairs = %lu", mc_stats->visited_pairs);
+ XBT_INFO("Executed transitions = %lu", mc_stats->executed_transitions);
+}
+
void LivenessChecker::showAcceptanceCycle(std::size_t depth)
{
XBT_INFO("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*");
int run() override;
RecordTrace getRecordTrace() override;
std::vector<std::string> getTextualTrace() override;
+ void logState() override;
private:
int main();
void prepare();
return trace;
}
+void SafetyChecker::logState() // override
+{
+ Checker::logState();
+ XBT_INFO("Expanded states = %lu", mc_stats->expanded_states);
+ XBT_INFO("Visited states = %lu", mc_stats->visited_states);
+ XBT_INFO("Executed transitions = %lu", mc_stats->executed_transitions);
+}
+
int SafetyChecker::run()
{
this->init();
int run() override;
RecordTrace getRecordTrace() override;
std::vector<std::string> getTextualTrace() override;
+ void logState() override;
private:
// Temp
void init();
#include "src/mc/Session.hpp"
#include "src/mc/mc_state.h"
#include "src/mc/mc_private.h"
+#include "src/mc/Checker.hpp"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_Session, mc, "Model-checker session");
void Session::logState()
{
- if(_sg_mc_comms_determinism) {
- if (!simgrid::mc::initial_global_state->recv_deterministic &&
- simgrid::mc::initial_global_state->send_deterministic){
- XBT_INFO("******************************************************");
- XBT_INFO("**** Only-send-deterministic communication pattern ****");
- XBT_INFO("******************************************************");
- XBT_INFO("%s", simgrid::mc::initial_global_state->recv_diff);
- }else if(!simgrid::mc::initial_global_state->send_deterministic &&
- simgrid::mc::initial_global_state->recv_deterministic) {
- XBT_INFO("******************************************************");
- XBT_INFO("**** Only-recv-deterministic communication pattern ****");
- XBT_INFO("******************************************************");
- XBT_INFO("%s", simgrid::mc::initial_global_state->send_diff);
- }
- }
+ mc_model_checker->getChecker()->logState();
- if (mc_stats->expanded_pairs == 0) {
- XBT_INFO("Expanded states = %lu", mc_stats->expanded_states);
- XBT_INFO("Visited states = %lu", mc_stats->visited_states);
- } else {
- XBT_INFO("Expanded pairs = %lu", mc_stats->expanded_pairs);
- XBT_INFO("Visited pairs = %lu", mc_stats->visited_pairs);
- }
- XBT_INFO("Executed transitions = %lu", mc_stats->executed_transitions);
if ((_sg_mc_dot_output_file != nullptr) && (_sg_mc_dot_output_file[0] != '\0')) {
fprintf(dot_output, "}\n");
fclose(dot_output);
}
- if (simgrid::mc::initial_global_state != nullptr
- && (_sg_mc_comms_determinism || _sg_mc_send_determinism)) {
- XBT_INFO("Send-deterministic : %s",
- !simgrid::mc::initial_global_state->send_deterministic ? "No" : "Yes");
- if (_sg_mc_comms_determinism)
- XBT_INFO("Recv-deterministic : %s",
- !simgrid::mc::initial_global_state->recv_deterministic ? "No" : "Yes");
- }
if (getenv("SIMGRID_MC_SYSTEM_STATISTICS")){
int ret=system("free");
if(ret!=0)XBT_WARN("system call did not return 0, but %d",ret);