From: Arnaud Giersch Date: Sun, 7 Mar 2021 17:06:23 +0000 (+0100) Subject: Cache result of Api::get_maxpid() when used multiple times. X-Git-Tag: v3.27~210^2~4 X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/ab9bd9d85c8d4d0842c971a70d7bc29519ba80a3 Cache result of Api::get_maxpid() when used multiple times. --- diff --git a/src/mc/checker/CommunicationDeterminismChecker.cpp b/src/mc/checker/CommunicationDeterminismChecker.cpp index 5192439f62..9d8cb16cdf 100644 --- a/src/mc/checker/CommunicationDeterminismChecker.cpp +++ b/src/mc/checker/CommunicationDeterminismChecker.cpp @@ -59,7 +59,8 @@ 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 < api::get().get_maxpid(); i++) + const unsigned long maxpid = api::get().get_maxpid(); + for (unsigned long i = 0; i < maxpid; i++) patterns_copy(incomplete_communications_pattern[i], state->incomplete_comm_pattern_[i]); } @@ -302,7 +303,7 @@ void CommunicationDeterminismChecker::log_state() // override void CommunicationDeterminismChecker::prepare() { - const auto maxpid = api::get().get_maxpid(); + const unsigned long maxpid = api::get().get_maxpid(); initial_communications_pattern.resize(maxpid); incomplete_communications_pattern.resize(maxpid); @@ -323,7 +324,7 @@ void CommunicationDeterminismChecker::prepare() static inline bool all_communications_are_finished() { - auto maxpid = api::get().get_maxpid(); + const unsigned long maxpid = api::get().get_maxpid(); for (size_t current_actor = 1; current_actor < maxpid; current_actor++) { if (not incomplete_communications_pattern[current_actor].empty()) { XBT_DEBUG("Some communications are not finished, cannot stop the exploration! State not visited."); @@ -346,10 +347,10 @@ void CommunicationDeterminismChecker::restoreState() /* Restore the initial state */ api::get().restore_initial_state(); - unsigned long n = api::get().get_maxpid(); - assert(n == incomplete_communications_pattern.size()); - assert(n == initial_communications_pattern.size()); - for (unsigned long j = 0; j < n; j++) { + const unsigned long maxpid = api::get().get_maxpid(); + assert(maxpid == incomplete_communications_pattern.size()); + assert(maxpid == initial_communications_pattern.size()); + for (unsigned long j = 0; j < maxpid; j++) { incomplete_communications_pattern[j].clear(); initial_communications_pattern[j].index_comm = 0; } diff --git a/src/mc/mc_state.cpp b/src/mc/mc_state.cpp index 5ffc15c843..dfa57a439a 100644 --- a/src/mc/mc_state.cpp +++ b/src/mc/mc_state.cpp @@ -17,7 +17,7 @@ namespace mc { State::State(unsigned long state_number) : num_(state_number) { - auto maxpid = api::get().get_maxpid(); + const unsigned long maxpid = api::get().get_maxpid(); actor_states_.resize(maxpid); /* Stateful model checking */ if ((_sg_mc_checkpoint > 0 && (state_number % _sg_mc_checkpoint == 0)) || _sg_mc_termination) { @@ -43,7 +43,8 @@ Transition State::get_transition() const void State::copy_incomplete_comm_pattern() { incomplete_comm_pattern_.clear(); - for (unsigned long i = 0; i < api::get().get_maxpid(); i++) { + const unsigned long maxpid = api::get().get_maxpid(); + for (unsigned long i = 0; i < maxpid; i++) { std::vector res; for (auto const& comm : incomplete_communications_pattern[i]) res.push_back(comm->dup());