X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1643dafb03c2c2a9d34f467f0c548b0a5a7e02db..f0797bf6822df720f3e56ac445c45f937a7f7299:/src/mc/checker/CommunicationDeterminismChecker.cpp?ds=sidebyside diff --git a/src/mc/checker/CommunicationDeterminismChecker.cpp b/src/mc/checker/CommunicationDeterminismChecker.cpp index a23e2caee2..e64020db30 100644 --- a/src/mc/checker/CommunicationDeterminismChecker.cpp +++ b/src/mc/checker/CommunicationDeterminismChecker.cpp @@ -51,6 +51,25 @@ static simgrid::mc::CommPatternDifference compare_comm_pattern(const simgrid::mc return CommPatternDifference::NONE; } +static void patterns_copy(std::vector& dest, + std::vector const& source) +{ + dest.clear(); + for (simgrid::mc::PatternCommunication const& comm : source) { + auto* copy_comm = new simgrid::mc::PatternCommunication(comm.dup()); + dest.push_back(copy_comm); + } +} + +static void restore_communications_pattern(simgrid::mc::State* state) +{ + for (size_t i = 0; i < initial_communications_pattern.size(); i++) + initial_communications_pattern[i].index_comm = state->communication_indices_[i]; + + for (unsigned long i = 0; i < mcapi::get().get_maxpid(); i++) + patterns_copy(incomplete_communications_pattern[i], state->incomplete_comm_pattern_[i]); +} + static char* print_determinism_result(simgrid::mc::CommPatternDifference diff, int process, const simgrid::mc::PatternCommunication* comm, unsigned int cursor) { @@ -103,14 +122,8 @@ static void update_comm_pattern(simgrid::mc::PatternCommunication* comm_pattern, comm_pattern->src_host = mcapi::get().get_actor_host_name(src_proc); comm_pattern->dst_host = mcapi::get().get_actor_host_name(dst_proc); - if (comm_pattern->data.empty()) { - auto pattern_data = mcapi::get().get_pattern_comm_data(comm_addr); - if (pattern_data.data() != nullptr) { - auto data_size = pattern_data.size(); - comm_pattern->data.resize(data_size); - memcpy(comm_pattern->data.data(), pattern_data.data(), data_size); - } - } + if (comm_pattern->data.empty()) + comm_pattern->data = mcapi::get().get_pattern_comm_data(comm_addr); } namespace simgrid { @@ -187,12 +200,7 @@ void CommunicationDeterminismChecker::get_comm_pattern(smx_simcall_t request, Ca #if HAVE_SMPI pattern->tag = mcapi::get().get_smpi_request_tag(request, simgrid::simix::Simcall::COMM_ISEND); #endif - auto pattern_data = mcapi::get().get_pattern_comm_data(pattern->comm_addr); - if (pattern_data.data() != nullptr) { - auto data_size = pattern_data.size(); - pattern->data.resize(data_size); - memcpy(pattern->data.data(), pattern_data.data(), data_size); - } + pattern->data = mcapi::get().get_pattern_comm_data(pattern->comm_addr); #if HAVE_SMPI auto send_detached = mcapi::get().check_send_request_detached(request); @@ -301,7 +309,7 @@ void CommunicationDeterminismChecker::log_state() // override void CommunicationDeterminismChecker::prepare() { - const int maxpid = mcapi::get().get_maxpid(); + const auto maxpid = mcapi::get().get_maxpid(); initial_communications_pattern.resize(maxpid); incomplete_communications_pattern.resize(maxpid); @@ -338,17 +346,17 @@ void CommunicationDeterminismChecker::restoreState() State* last_state = stack_.back().get(); if (last_state->system_state_) { mc_api::get().restore_state(last_state->system_state_); - MC_restore_communications_pattern(last_state); + restore_communications_pattern(last_state); return; } /* Restore the initial state */ mcapi::get().restore_initial_state(); - unsigned n = mcapi::get().get_maxpid(); + unsigned long n = mcapi::get().get_maxpid(); assert(n == incomplete_communications_pattern.size()); assert(n == initial_communications_pattern.size()); - for (unsigned j = 0; j < n; j++) { + for (unsigned long j = 0; j < n; j++) { incomplete_communications_pattern[j].clear(); initial_communications_pattern[j].index_comm = 0; } @@ -529,7 +537,7 @@ void CommunicationDeterminismChecker::real_run() void CommunicationDeterminismChecker::run() { XBT_INFO("Check communication determinism"); - mcapi::get().s_initialize(); + mcapi::get().session_initialize(); this->prepare(); this->real_run();