X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/874aec87c7ce1894a9f017d2adf07ce7b8abe71d..7ddc46fcc39e6327b6dc919a3bcf25524f735d74:/src/mc/api/strategy/MaxMatchComm.hpp diff --git a/src/mc/api/strategy/MaxMatchComm.hpp b/src/mc/api/strategy/MaxMatchComm.hpp index a2f1d601a5..7ec0af9361 100644 --- a/src/mc/api/strategy/MaxMatchComm.hpp +++ b/src/mc/api/strategy/MaxMatchComm.hpp @@ -13,7 +13,6 @@ namespace simgrid::mc { /** Wait MC guiding class that aims at minimizing the number of in-fly communication. * When possible, it will try to match corresponding in-fly communications. */ class MaxMatchComm : public Strategy { - /** Stores for each mailbox what kind of transition is waiting on it. * Negative number means that much recv are waiting on that mailbox, while * a positiv number means that much send are waiting there. */ @@ -43,56 +42,47 @@ public: std::pair best_transition(bool must_be_todo) const override { - std::pair min_found = std::make_pair(-1, value_of_state_+2); + std::pair min_found = std::make_pair(-1, value_of_state_ + 2); for (auto const& [aid, actor] : actors_to_run_) { if ((not actor.is_todo() && must_be_todo) || not actor.is_enabled() || actor.is_done()) continue; int aid_value = value_of_state_; const Transition* transition = actor.get_transition(actor.get_times_considered()).get(); - - const CommRecvTransition* cast_recv = dynamic_cast(transition); - if (cast_recv != nullptr) { - if (mailbox_.count(cast_recv->get_mailbox()) > 0 and - mailbox_.at(cast_recv->get_mailbox()) > 0) { - aid_value--; // This means we have waiting recv corresponding to this recv - } else { - aid_value++; - - } + + if (auto const* cast_recv = dynamic_cast(transition)) { + if (mailbox_.count(cast_recv->get_mailbox()) > 0 && mailbox_.at(cast_recv->get_mailbox()) > 0) { + aid_value--; // This means we have waiting recv corresponding to this recv + } else { + aid_value++; + } } - - const CommSendTransition* cast_send = dynamic_cast(transition); - if (cast_send != nullptr) { - if (mailbox_.count(cast_send->get_mailbox()) > 0 and - mailbox_.at(cast_send->get_mailbox()) < 0) { - aid_value--; // This means we have waiting recv corresponding to this send - }else { - aid_value++; - } + + if (auto const* cast_send = dynamic_cast(transition)) { + if (mailbox_.count(cast_send->get_mailbox()) > 0 && mailbox_.at(cast_send->get_mailbox()) < 0) { + aid_value--; // This means we have waiting recv corresponding to this send + } else { + aid_value++; + } } - + if (aid_value < min_found.second) min_found = std::make_pair(aid, aid_value); } return min_found; } - void execute_next(aid_t aid, RemoteApp& app) override { const Transition* transition = actors_to_run_.at(aid).get_transition(actors_to_run_.at(aid).get_times_considered()).get(); last_transition_ = transition->type_; - const CommRecvTransition* cast_recv = dynamic_cast(transition); - if (cast_recv != nullptr) + if (auto const* cast_recv = dynamic_cast(transition)) last_mailbox_ = cast_recv->get_mailbox(); - const CommSendTransition* cast_send = dynamic_cast(transition); - if (cast_send != nullptr) + if (auto const* cast_send = dynamic_cast(transition)) last_mailbox_ = cast_send->get_mailbox(); } - }; } // namespace simgrid::mc