From: Martin Quinson Date: Sat, 7 Apr 2018 20:09:38 +0000 (+0200) Subject: always use the right type for link sharing policy X-Git-Tag: v3.20~504 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/2202dead030a10e3ef121eb452bc3ee56c8a572b?ds=sidebyside always use the right type for link sharing policy --- diff --git a/include/simgrid/s4u/Link.hpp b/include/simgrid/s4u/Link.hpp index a51dba5671..9857e6cef0 100644 --- a/include/simgrid/s4u/Link.hpp +++ b/include/simgrid/s4u/Link.hpp @@ -52,7 +52,7 @@ public: /** @brief The sharing policy is a @{link e_surf_link_sharing_policy_t::EType} (0: FATPIPE, 1: SHARED, 2: SPLITDUPLEX) */ - int sharingPolicy(); + SharingPolicy sharingPolicy(); /** @brief Returns the current load (in flops per second) */ double getUsage(); diff --git a/src/kernel/lmm/fair_bottleneck.cpp b/src/kernel/lmm/fair_bottleneck.cpp index 1577188839..8fbbd1bbd4 100644 --- a/src/kernel/lmm/fair_bottleneck.cpp +++ b/src/kernel/lmm/fair_bottleneck.cpp @@ -73,7 +73,7 @@ void simgrid::kernel::lmm::FairBottleneck::bottleneck_solve() nb++; } XBT_DEBUG("\tThere are %d variables", nb); - if (nb > 0 && not cnst.sharing_policy) + if (nb > 0 && cnst.sharing_policy == s4u::Link::SharingPolicy::FATPIPE) nb = 1; if (nb == 0) { cnst.remaining = 0.0; @@ -107,7 +107,7 @@ void simgrid::kernel::lmm::FairBottleneck::bottleneck_solve() for (auto iter = std::begin(cnst_list); iter != std::end(cnst_list);) { Constraint& cnst = *iter; XBT_DEBUG("Updating cnst %p ", &cnst); - if (cnst.sharing_policy) { + if (cnst.sharing_policy != s4u::Link::SharingPolicy::FATPIPE) { for (Element& elem : cnst.enabled_element_set) { xbt_assert(elem.variable->sharing_weight > 0); XBT_DEBUG("\tUpdate constraint %p (%g) with variable %p by %g", &cnst, cnst.remaining, elem.variable, diff --git a/src/kernel/lmm/maxmin.cpp b/src/kernel/lmm/maxmin.cpp index b98ae8c321..5060a2dac7 100644 --- a/src/kernel/lmm/maxmin.cpp +++ b/src/kernel/lmm/maxmin.cpp @@ -178,7 +178,7 @@ Constraint::Constraint(void* id_value, double bound_value) : bound(bound_value), concurrency_limit = sg_concurrency_limit; concurrency_current = 0; concurrency_maximum = 0; - sharing_policy = 1; /* FIXME: don't hardcode the value */ + sharing_policy = s4u::Link::SharingPolicy::SHARED; lambda = 0.0; new_lambda = 0.0; @@ -290,7 +290,7 @@ void System::expand_add(Constraint* cnst, Variable* var, double value) if (var->sharing_weight) elem.decrease_concurrency(); - if (cnst->sharing_policy) + if (cnst->sharing_policy != s4u::Link::SharingPolicy::FATPIPE) elem.consumption_weight += value; else elem.consumption_weight = std::max(elem.consumption_weight, value); @@ -417,12 +417,14 @@ static inline void saturated_variable_set_update(ConstraintLight* cnst_light_tab } template -static void format_element_list(const ElemList& elem_list, int sharing_policy, double& sum, std::string& buf) +static void format_element_list(const ElemList& elem_list, s4u::Link::SharingPolicy sharing_policy, double& sum, + std::string& buf) { for (Element const& elem : elem_list) { buf += std::to_string(elem.consumption_weight) + ".'" + std::to_string(elem.variable->id_int) + "'(" + - std::to_string(elem.variable->value) + ")" + (sharing_policy ? " + " : " , "); - if (sharing_policy) + std::to_string(elem.variable->value) + ")" + + (sharing_policy != s4u::Link::SharingPolicy::FATPIPE ? " + " : " , "); + if (sharing_policy != s4u::Link::SharingPolicy::FATPIPE) sum += elem.consumption_weight * elem.variable->value; else sum = std::max(sum, elem.consumption_weight * elem.variable->value); @@ -446,14 +448,14 @@ void System::print() const double sum = 0.0; // Show the enabled variables buf += "\t"; - buf += cnst.sharing_policy ? "(" : "max("; + buf += cnst.sharing_policy != s4u::Link::SharingPolicy::FATPIPE ? "(" : "max("; format_element_list(cnst.enabled_element_set, cnst.sharing_policy, sum, buf); // TODO: Adding disabled elements only for test compatibility, but do we really want them to be printed? format_element_list(cnst.disabled_element_set, cnst.sharing_policy, sum, buf); buf += "0) <= " + std::to_string(cnst.bound) + " ('" + std::to_string(cnst.id_int) + "')"; - if (not cnst.sharing_policy) { + if (cnst.sharing_policy == s4u::Link::SharingPolicy::FATPIPE) { buf += " [MAX-Constraint]"; } XBT_DEBUG("%s", buf.c_str()); @@ -518,7 +520,7 @@ template void System::lmm_solve(CnstList& cnst_list) for (Element& elem : cnst.enabled_element_set) { xbt_assert(elem.variable->sharing_weight > 0); if (elem.consumption_weight > 0) { - if (cnst.sharing_policy) + if (cnst.sharing_policy != s4u::Link::SharingPolicy::FATPIPE) cnst.usage += elem.consumption_weight / elem.variable->sharing_weight; else if (cnst.usage < elem.consumption_weight / elem.variable->sharing_weight) cnst.usage = elem.consumption_weight / elem.variable->sharing_weight; @@ -591,7 +593,7 @@ template void System::lmm_solve(CnstList& cnst_list) /* Update the usage of contraints where this variable is involved */ for (Element& elem : var.cnsts) { Constraint* cnst = elem.constraint; - if (cnst->sharing_policy) { + if (cnst->sharing_policy != s4u::Link::SharingPolicy::FATPIPE) { // Remember: shared constraints require that sum(elem.value * var.value) < cnst->bound double_update(&(cnst->remaining), elem.consumption_weight * var.value, cnst->bound * sg_maxmin_precision); double_update(&(cnst->usage), elem.consumption_weight / var.sharing_weight, sg_maxmin_precision); @@ -939,7 +941,7 @@ void System::remove_all_modified_set() double Constraint::get_usage() const { double result = 0.0; - if (sharing_policy) { + if (sharing_policy != s4u::Link::SharingPolicy::FATPIPE) { for (Element const& elem : enabled_element_set) if (elem.consumption_weight > 0) result += elem.consumption_weight * elem.variable->value; diff --git a/src/kernel/lmm/maxmin.hpp b/src/kernel/lmm/maxmin.hpp index 465930c6f8..b32ead213f 100644 --- a/src/kernel/lmm/maxmin.hpp +++ b/src/kernel/lmm/maxmin.hpp @@ -7,6 +7,7 @@ #define SURF_MAXMIN_HPP #include "simgrid/kernel/resource/Action.hpp" +#include "simgrid/s4u/Link.hpp" #include "xbt/asserts.h" #include "xbt/mallocator.h" @@ -194,13 +195,13 @@ public: Constraint(void* id_value, double bound_value); /** @brief Unshare a constraint. */ - void unshare() { sharing_policy = 0; } + void unshare() { sharing_policy = s4u::Link::SharingPolicy::FATPIPE; } /** * @brief Check if a constraint is shared (shared by default) * @return 1 if shared, 0 otherwise */ - int get_sharing_policy() const { return sharing_policy; } + s4u::Link::SharingPolicy get_sharing_policy() const { return sharing_policy; } /** * @brief Get the usage of the constraint after the last lmm solve @@ -295,7 +296,7 @@ public: int concurrency_maximum; /* The maximum number of (enabled and disabled) variables associated to the constraint at any * given time (essentially for tracing)*/ - int sharing_policy; /* see @e_surf_link_sharing_policy_t (0: FATPIPE, 1: SHARED, 2: SPLITDUPLEX) */ + s4u::Link::SharingPolicy sharing_policy; int id_int; double lambda; double new_lambda; diff --git a/src/s4u/s4u_link.cpp b/src/s4u/s4u_link.cpp index f0bbec6fa5..46a75c6256 100644 --- a/src/s4u/s4u_link.cpp +++ b/src/s4u/s4u_link.cpp @@ -29,7 +29,7 @@ sg_link_t sg_link_by_name(const char* name) int sg_link_is_shared(sg_link_t link) { - return link->sharingPolicy(); + return (int)link->sharingPolicy(); } double sg_link_bandwidth(sg_link_t link) { @@ -107,7 +107,7 @@ double Link::bandwidth() return this->pimpl_->bandwidth(); } -int Link::sharingPolicy() +Link::SharingPolicy Link::sharingPolicy() { return this->pimpl_->sharingPolicy(); } diff --git a/src/surf/network_interface.cpp b/src/surf/network_interface.cpp index 4d6e228d2c..a0275c7cb2 100644 --- a/src/surf/network_interface.cpp +++ b/src/surf/network_interface.cpp @@ -161,7 +161,7 @@ double NetworkModel::latencyFactor(double /*size*/) return bandwidth_.peak * bandwidth_.scale; } - int LinkImpl::sharingPolicy() + s4u::Link::SharingPolicy LinkImpl::sharingPolicy() { return get_constraint()->get_sharing_policy(); } diff --git a/src/surf/network_interface.hpp b/src/surf/network_interface.hpp index 0e42ab1591..d809adf56e 100644 --- a/src/surf/network_interface.hpp +++ b/src/surf/network_interface.hpp @@ -136,9 +136,8 @@ public: /** @brief Update the latency in seconds of current Link */ virtual void setLatency(double value) = 0; - /** @brief The sharing policy is a @{link e_surf_link_sharing_policy_t::EType} (0: FATPIPE, 1: SHARED, 2: - * SPLITDUPLEX) */ - virtual int sharingPolicy(); + /** @brief The sharing policy */ + virtual s4u::Link::SharingPolicy sharingPolicy(); /** @brief Check if the Link is used */ bool is_used() override;