Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
remove stochastic traces for now.
authorMartin Quinson <martin.quinson@loria.fr>
Fri, 5 Feb 2016 20:46:18 +0000 (21:46 +0100)
committerMartin Quinson <martin.quinson@loria.fr>
Fri, 5 Feb 2016 20:46:22 +0000 (21:46 +0100)
They were not even tested anyway. They should be reimplemented once
trace_mgr is properly objectified, this way or maybe with lua.

src/surf/cpu_ti.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 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: