Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
always use the right type for link sharing policy
authorMartin Quinson <martin.quinson@loria.fr>
Sat, 7 Apr 2018 20:09:38 +0000 (22:09 +0200)
committerMartin Quinson <martin.quinson@loria.fr>
Sat, 7 Apr 2018 20:09:38 +0000 (22:09 +0200)
include/simgrid/s4u/Link.hpp
src/kernel/lmm/fair_bottleneck.cpp
src/kernel/lmm/maxmin.cpp
src/kernel/lmm/maxmin.hpp
src/s4u/s4u_link.cpp
src/surf/network_interface.cpp
src/surf/network_interface.hpp

index a51dba5..9857e6c 100644 (file)
@@ -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();
index 1577188..8fbbd1b 100644 (file)
@@ -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,
index b98ae8c..5060a2d 100644 (file)
@@ -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 <class ElemList>
-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 <class CnstList> 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 <class CnstList> 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;
index 465930c..b32ead2 100644 (file)
@@ -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;
index f0bbec6..46a75c6 100644 (file)
@@ -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();
 }
index 4d6e228..a0275c7 100644 (file)
@@ -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();
     }
index 0e42ab1..d809adf 100644 (file)
@@ -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;