Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
authorMartin Quinson <martin.quinson@loria.fr>
Fri, 5 Feb 2016 20:55:44 +0000 (21:55 +0100)
committerMartin Quinson <martin.quinson@loria.fr>
Fri, 5 Feb 2016 20:55:44 +0000 (21:55 +0100)
src/surf/cpu_ti.cpp
src/surf/host_ptask_L07.cpp
src/surf/network_constant.cpp
src/surf/storage_n11.cpp
src/surf/trace_mgr.cpp
src/surf/trace_mgr.hpp

index 2f10bfc..a59737b 100644 (file)
@@ -36,11 +36,11 @@ CpuTiTrace::CpuTiTrace(tmgr_trace_t speedTrace)
   double time = 0;
   int i = 0;
   p_timePoints = (double*) xbt_malloc0(sizeof(double) *
-                  (xbt_dynar_length(speedTrace->s_list.event_list) + 1));
+                  (xbt_dynar_length(speedTrace->event_list) + 1));
   p_integral = (double*) xbt_malloc0(sizeof(double) *
-                  (xbt_dynar_length(speedTrace->s_list.event_list) + 1));
-  m_nbPoints = xbt_dynar_length(speedTrace->s_list.event_list) + 1;
-  xbt_dynar_foreach(speedTrace->s_list.event_list, cpt, val) {
+                  (xbt_dynar_length(speedTrace->event_list) + 1));
+  m_nbPoints = xbt_dynar_length(speedTrace->event_list) + 1;
+  xbt_dynar_foreach(speedTrace->event_list, cpt, val) {
     p_timePoints[i] = time;
     p_integral[i] = integral;
     integral += val.delta * val.value;
@@ -302,7 +302,7 @@ double CpuTiTgmr::getPowerScale(double a)
   reduced_a = a - floor(a / m_lastTime) * m_lastTime;
   point = p_trace->binarySearch(p_trace->p_timePoints, reduced_a, 0,
                                 p_trace->m_nbPoints - 1);
-  xbt_dynar_get_cpy(p_speedTrace->s_list.event_list, point, &val);
+  xbt_dynar_get_cpy(p_speedTrace->event_list, point, &val);
   return val.value;
 }
 
@@ -330,8 +330,8 @@ CpuTiTgmr::CpuTiTgmr(tmgr_trace_t speedTrace, double value)
   }
 
   /* only one point available, fixed trace */
-  if (xbt_dynar_length(speedTrace->s_list.event_list) == 1) {
-    xbt_dynar_get_cpy(speedTrace->s_list.event_list, 0, &val);
+  if (xbt_dynar_length(speedTrace->event_list) == 1) {
+    xbt_dynar_get_cpy(speedTrace->event_list, 0, &val);
     m_type = TRACE_FIXED;
     m_value = val.value;
     return;
@@ -341,7 +341,7 @@ CpuTiTgmr::CpuTiTgmr(tmgr_trace_t speedTrace, double value)
   p_speedTrace = speedTrace;
 
   /* count the total time of trace file */
-  xbt_dynar_foreach(speedTrace->s_list.event_list, cpt, val) {
+  xbt_dynar_foreach(speedTrace->event_list, cpt, val) {
     total_time += val.delta;
   }
   p_trace = new CpuTiTrace(speedTrace);
@@ -525,11 +525,11 @@ CpuTi::CpuTi(CpuTiModel *model, simgrid::s4u::Host *host, xbt_dynar_t speedPeak,
   if (stateTrace)
     p_stateEvent = future_evt_set->add_trace(stateTrace, 0.0, this);
 
-  if (speedTrace && xbt_dynar_length(speedTrace->s_list.event_list) > 1) {
+  if (speedTrace && xbt_dynar_length(speedTrace->event_list) > 1) {
        s_tmgr_event_t val;
     // add a fake trace event if periodicity == 0
-    xbt_dynar_get_cpy(speedTrace->s_list.event_list,
-                      xbt_dynar_length(speedTrace->s_list.event_list) - 1, &val);
+    xbt_dynar_get_cpy(speedTrace->event_list,
+                      xbt_dynar_length(speedTrace->event_list) - 1, &val);
     if (val.delta == 0) {
       p_speedEvent =
           future_evt_set->add_trace(tmgr_empty_trace_new(), p_availTrace->m_lastTime, this);
@@ -551,10 +551,10 @@ void CpuTi::set_speed_trace(tmgr_trace_t trace)
   p_availTrace = new CpuTiTgmr(trace, m_speedScale);
 
   /* add a fake trace event if periodicity == 0 */
-  if (trace && xbt_dynar_length(trace->s_list.event_list) > 1) {
+  if (trace && xbt_dynar_length(trace->event_list) > 1) {
     s_tmgr_event_t val;
-    xbt_dynar_get_cpy(trace->s_list.event_list,
-                      xbt_dynar_length(trace->s_list.event_list) - 1, &val);
+    xbt_dynar_get_cpy(trace->event_list,
+                      xbt_dynar_length(trace->event_list) - 1, &val);
     if (val.delta == 0) {
       p_speedEvent = future_evt_set->add_trace(tmgr_empty_trace_new(), 0.0, this);
     }
@@ -579,8 +579,8 @@ void CpuTi::updateState(tmgr_trace_iterator_t event_type,
     modified(true);
 
     speedTrace = p_availTrace->p_speedTrace;
-    xbt_dynar_get_cpy(speedTrace->s_list.event_list,
-                      xbt_dynar_length(speedTrace->s_list.event_list) - 1, &val);
+    xbt_dynar_get_cpy(speedTrace->event_list,
+                      xbt_dynar_length(speedTrace->event_list) - 1, &val);
     /* free old trace */
     delete p_availTrace;
     m_speedScale = val.value;
index ce180bc..298496a 100644 (file)
@@ -212,20 +212,17 @@ L07Action::L07Action(Model *model, int host_nb,
 
     for (int i = 0; i < host_nb; i++) {
       for (int j = 0; j < host_nb; j++) {
-        xbt_dynar_t route=NULL;
 
         if (bytes_amount[i * host_nb + j] > 0) {
           double lat=0.0;
-          unsigned int cpt;
-          void *_link;
-          LinkL07 *link;
+          xbt_dynar_t route=NULL;
 
-          routing_platf->getRouteAndLatency((*this->p_netcardList)[i], (*this->p_netcardList)[j],
-                                                        &route, &lat);
+          routing_platf->getRouteAndLatency((*p_netcardList)[i], (*p_netcardList)[j], &route, &lat);
           latency = MAX(latency, lat);
 
+          void *_link;
           xbt_dynar_foreach(route, cpt, _link) {
-            link = static_cast<LinkL07*>(_link);
+            LinkL07 *link = static_cast<LinkL07*>(_link);
             xbt_dict_set(ptask_parallel_task_link_set, link->getName(), link, NULL);
           }
         }
@@ -260,15 +257,15 @@ L07Action::L07Action(Model *model, int host_nb,
   if(bytes_amount != NULL) {
     for (int i = 0; i < host_nb; i++) {
       for (int j = 0; j < host_nb; j++) {
-        void *_link;
 
         xbt_dynar_t route=NULL;
         if (bytes_amount[i * host_nb + j] == 0.0)
           continue;
 
-        routing_platf->getRouteAndLatency((*this->p_netcardList)[i], (*this->p_netcardList)[j],
+        routing_platf->getRouteAndLatency((*p_netcardList)[i], (*p_netcardList)[j],
                                                     &route, NULL);
 
+        void *_link;
         xbt_dynar_foreach(route, cpt, _link) {
           LinkL07 *link = static_cast<LinkL07*>(_link);
           lmm_expand_add(model->getMaxminSystem(), link->getConstraint(),
index 876546d..8ad621d 100644 (file)
 #include "src/surf/platform.hpp"
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_network);
-static int host_number_int = 0;
-
-static void netcste_parse_nolink(sg_platf_link_cbarg_t link){
-       xbt_die("There is no link in the Constant network model. "
-                       "Please remove any link from your platform (and switch to routing='None')");
-}
 
 /*********
  * Model *
@@ -25,16 +19,14 @@ void surf_network_model_init_Constant()
 {
   xbt_assert(surf_network_model == NULL);
   surf_network_model = new simgrid::surf::NetworkConstantModel();
+  xbt_dynar_push(all_existing_models, &surf_network_model);
 
   routing_model_create(NULL);
 
-  simgrid::s4u::Host::onCreation.connect([](simgrid::s4u::Host&) {
-    host_number_int++;
+  simgrid::surf::on_link.connect([](sg_platf_link_cbarg_t link){
+      xbt_die("There is no link in the Constant network model. "
+          "Please remove any link from your platform (and switch to routing='None')");
   });
-  simgrid::surf::on_link.connect(netcste_parse_nolink);
-
-  simgrid::surf::Model *model = surf_network_model;
-  xbt_dynar_push(all_existing_models, &model);
 }
 
 namespace simgrid {
index c21c670..16aa43f 100644 (file)
@@ -114,9 +114,9 @@ Storage *StorageN11Model::createStorage(const char* id, const char* type_id,
   return storage;
 }
 
-double StorageN11Model::shareResources(double now)
+double StorageN11Model::shareResources(double /*now*/)
 {
-  XBT_DEBUG("storage_share_resources %f", now);
+  XBT_DEBUG("storage_share_resources");
   unsigned int i, j;
   Storage *storage;
   void *_write_action;
index 1b7b8fe..cc0eedd 100644 (file)
@@ -25,7 +25,7 @@ simgrid::trace_mgr::future_evt_set::~future_evt_set()
   xbt_heap_free(p_heap);
 }
 
-
+#if 0 /* probabilistic dead code. Should be reimplemented, not killed (please) */
 /**
  * \brief Create a #tmgr_trace_t from probabilist generators
  *
@@ -239,6 +239,7 @@ double tmgr_event_generator_next_value(probabilist_event_generator_t generator)
 
   return generator->next_value;
 }
+#endif /* probabilistic dead code */
 
 tmgr_trace_t tmgr_trace_new_from_string(const char *id, const char *input,
                                         double periodicity)
@@ -263,8 +264,7 @@ tmgr_trace_t tmgr_trace_new_from_string(const char *id, const char *input,
               "Invalid periodicity %g (must be positive)", periodicity);
 
   trace = xbt_new0(s_tmgr_trace_t, 1);
-  trace->type = e_trace_list;
-  trace->s_list.event_list = xbt_dynar_new(sizeof(s_tmgr_event_t), NULL);
+  trace->event_list = xbt_dynar_new(sizeof(s_tmgr_event_t), NULL);
 
   list = xbt_str_split(input, "\n\r");
 
@@ -292,11 +292,11 @@ tmgr_trace_t tmgr_trace_new_from_string(const char *id, const char *input,
         s_tmgr_event_t first_event;
         first_event.delta=event.delta;
         first_event.value=-1.0;
-        xbt_dynar_push(trace->s_list.event_list, &first_event);
+        xbt_dynar_push(trace->event_list, &first_event);
       }
     }
-    xbt_dynar_push(trace->s_list.event_list, &event);
-    last_event = (tmgr_event_t)xbt_dynar_get_ptr(trace->s_list.event_list, xbt_dynar_length(trace->s_list.event_list) - 1);
+    xbt_dynar_push(trace->event_list, &event);
+    last_event = (tmgr_event_t)xbt_dynar_get_ptr(trace->event_list, xbt_dynar_length(trace->event_list) - 1);
   }
   if (last_event)
     last_event->delta = periodicity;
@@ -343,12 +343,11 @@ tmgr_trace_t tmgr_empty_trace_new(void)
   s_tmgr_event_t event;
 
   trace = xbt_new0(s_tmgr_trace_t, 1);
-  trace->type = e_trace_list;
-  trace->s_list.event_list = xbt_dynar_new(sizeof(s_tmgr_event_t), NULL);
+  trace->event_list = xbt_dynar_new(sizeof(s_tmgr_event_t), NULL);
 
   event.delta = 0.0;
   event.value = 0.0;
-  xbt_dynar_push(trace->s_list.event_list, &event);
+  xbt_dynar_push(trace->event_list, &event);
 
   return trace;
 }
@@ -358,14 +357,7 @@ void tmgr_trace_free(tmgr_trace_t trace)
   if (!trace)
     return;
 
-  switch(trace->type) {
-    case e_trace_list:
-      xbt_dynar_free(&(trace->s_list.event_list));
-      break;
-    case e_trace_probabilist:
-      THROW_UNIMPLEMENTED;
-      break;
-  }
+  xbt_dynar_free(&(trace->event_list));
   free(trace);
 }
 
@@ -380,10 +372,8 @@ tmgr_trace_iterator_t simgrid::trace_mgr::future_evt_set::add_trace(
   trace_iterator->idx = 0;
   trace_iterator->resource = resource;
 
-  if(trace->type == e_trace_list) {
-    xbt_assert((trace_iterator->idx < xbt_dynar_length(trace->s_list.event_list)),
-              "You're referring to an event that does not exist!");
-  }
+  xbt_assert((trace_iterator->idx < xbt_dynar_length(trace->event_list)),
+      "Your trace should have at least one event!");
 
   xbt_heap_push(p_heap, trace_iterator, start_time);
 
@@ -414,42 +404,19 @@ tmgr_trace_iterator_t simgrid::trace_mgr::future_evt_set::pop_leq(
   tmgr_trace_t trace = trace_iterator->trace;
   *resource = trace_iterator->resource;
 
-  if (trace->type == e_trace_list) {
-
-      tmgr_event_t event = (tmgr_event_t)xbt_dynar_get_ptr(trace->s_list.event_list, trace_iterator->idx);
+  tmgr_event_t event = (tmgr_event_t)xbt_dynar_get_ptr(trace->event_list, trace_iterator->idx);
 
-      *value = event->value;
+  *value = event->value;
 
-      if (trace_iterator->idx < xbt_dynar_length(trace->s_list.event_list) - 1) {
-        xbt_heap_push(p_heap, trace_iterator, event_date + event->delta);
-        trace_iterator->idx++;
-      } else if (event->delta > 0) {        /* Last element, checking for periodicity */
-        xbt_heap_push(p_heap, trace_iterator, event_date + event->delta);
-        trace_iterator->idx = 1; /* not 0 as the first event is a placeholder to handle when events really start */
-      } else {                      /* We don't need this trace_event anymore */
-        trace_iterator->free_me = 1;
-      }
-
-  } else if (trace->type == e_trace_probabilist) { //FIXME : not tested yet
-      double event_delta;
-      if(trace->s_probabilist.is_state_trace) {
-        *value = (double) trace->s_probabilist.next_event;
-        if(trace->s_probabilist.next_event == 0) {
-          event_delta = tmgr_event_generator_next_value(trace->s_probabilist.event_generator[0]);
-          trace->s_probabilist.next_event = 1;
-        } else {
-          event_delta = tmgr_event_generator_next_value(trace->s_probabilist.event_generator[1]);
-          trace->s_probabilist.next_event = 0;
-        }
-      } else {
-        event_delta = tmgr_event_generator_next_value(trace->s_probabilist.event_generator[0]);
-        *value = tmgr_event_generator_next_value(trace->s_probabilist.event_generator[1]);
-      }
-      xbt_heap_push(p_heap, trace_iterator, event_date + event_delta);
-      XBT_DEBUG("Generating a new event at date %f, with value %f", event_date + event_delta, *value);
-
-  } else
-    THROW_IMPOSSIBLE;
+  if (trace_iterator->idx < xbt_dynar_length(trace->event_list) - 1) {
+    xbt_heap_push(p_heap, trace_iterator, event_date + event->delta);
+    trace_iterator->idx++;
+  } else if (event->delta > 0) {        /* Last element, checking for periodicity */
+    xbt_heap_push(p_heap, trace_iterator, event_date + event->delta);
+    trace_iterator->idx = 1; /* not 0 as the first event is a placeholder to handle when events really start */
+  } else {                      /* We don't need this trace_event anymore */
+    trace_iterator->free_me = 1;
+  }
 
   return trace_iterator;
 }
index ee06f3b..a53be9e 100644 (file)
@@ -54,17 +54,7 @@ typedef struct probabilist_event_generator {
 } s_probabilist_event_generator_t;
 
 typedef struct tmgr_trace {
-  enum e_trace_type type;
-  union {
-    struct {
-      xbt_dynar_t event_list;
-    } s_list;
-    struct {
-      probabilist_event_generator_t event_generator[2];
-      int is_state_trace;
-      int next_event;
-    } s_probabilist;
-  };
+  xbt_dynar_t event_list;
 } s_tmgr_trace_t;
 
 /* Iterator within a trace */
@@ -95,9 +85,33 @@ SG_END_DECL()
 
 #ifdef __cplusplus
 namespace simgrid {
+/** @brief Modeling of the resource variations, such as those due to an external load
+ *
+ * There is 3 main concepts in this module:
+ * - #trace: a set of dated values, ie a list of pair <timestamp, value>
+ * - #trace_iterator: links a given trace to a given simgrid resource. A Cpu for example has 2 iterators: state (ie, is it ON/OFF) and speed, while a link has 3 iterators: state, bandwidth and latency.
+ * - #future_evt_set: makes it easy to find the next occuring event of all traces
+ */
   namespace trace_mgr {
 
-/* Future Event Set (collection of iterators over the traces)
+/** @brief A trace_iterator links a trace to a resource */
+XBT_PUBLIC_CLASS trace_iterator {
+
+};
+
+/** @brief A trace is a set of timed values, encoding the value that a variable takes at what time *
+ *
+ * It is useful to model dynamic platforms, where an external load that makes the resource availability change over time.
+ * To model that, you have to set several traces per resource: one for the on/off state and one for each numerical value (computational speed, bandwidt and latency).
+ */
+XBT_PUBLIC_CLASS trace {
+public:
+  /**  Creates an empty trace */
+  trace() {}
+  virtual ~trace() {}
+};
+
+/** @brief Future Event Set (collection of iterators over the traces)
  * That's useful to quickly know which is the next occurring event in a set of traces. */
 XBT_PUBLIC_CLASS future_evt_set {
 public: