Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Cache result of Api::get_maxpid() when used multiple times.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Sun, 7 Mar 2021 17:06:23 +0000 (18:06 +0100)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Mon, 8 Mar 2021 21:17:50 +0000 (22:17 +0100)
src/mc/checker/CommunicationDeterminismChecker.cpp
src/mc/mc_state.cpp

index 5192439..9d8cb16 100644 (file)
@@ -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;
   }
index 5ffc15c..dfa57a4 100644 (file)
@@ -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<simgrid::mc::PatternCommunication> res;
     for (auto const& comm : incomplete_communications_pattern[i])
       res.push_back(comm->dup());