Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix dead assignments.
[simgrid.git] / src / surf / surf_interface.cpp
index 56454da..a4d47c2 100644 (file)
@@ -520,7 +520,7 @@ double Model::shareResourcesLazy(double now)
 {
   ActionPtr action = NULL;
   double min = -1;
-  double value;
+  double share;
 
   XBT_DEBUG
       ("Before share resources, the size of modified actions set is %zd",
@@ -533,29 +533,30 @@ double Model::shareResourcesLazy(double now)
        p_modifiedSet->size());
 
   while(!p_modifiedSet->empty()) {
-       action = &(p_modifiedSet->front());
-       p_modifiedSet->pop_front();
+    action = &(p_modifiedSet->front());
+    p_modifiedSet->pop_front();
     int max_dur_flag = 0;
 
     if (action->getStateSet() != p_runningActionSet)
       continue;
 
     /* bogus priority, skip it */
-    if (action->getPriority() <= 0)
+    if (action->getPriority() <= 0 || action->getHat()==LATENCY)
       continue;
 
     action->updateRemainingLazy(now);
 
     min = -1;
-    value = lmm_variable_getvalue(action->getVariable());
-    if (value > 0) {
+    share = lmm_variable_getvalue(action->getVariable());
+
+    if (share > 0) {
+      double time_to_completion;
       if (action->getRemains() > 0) {
-        value = action->getRemainsNoUpdate() / value;
-        min = now + value;
+        time_to_completion = action->getRemainsNoUpdate() / share;
       } else {
-        value = 0.0;
-        min = now;
+        time_to_completion = 0.0;
       }
+      min = now + time_to_completion; // when the task will complete if nothing changes
     }
 
     if ((action->getMaxDuration() != NO_MAX_DURATION)
@@ -563,12 +564,15 @@ double Model::shareResourcesLazy(double now)
             || action->getStartTime() +
             action->getMaxDuration() < min)) {
       min = action->getStartTime() +
-          action->getMaxDuration();
+          action->getMaxDuration();  // when the task will complete anyway because of the deadline if any
       max_dur_flag = 1;
     }
 
-    XBT_DEBUG("Action(%p) Start %f Finish %f Max_duration %f", action,
-        action->getStartTime(), now + value,
+
+    XBT_DEBUG("Action(%p) corresponds to variable %d", action, action->getVariable()->id_int);
+
+    XBT_DEBUG("Action(%p) Start %f. May finish at %f (got a share of %f). Max_duration %f", action,
+        action->getStartTime(), min, share,
         action->getMaxDuration());
 
     if (min != -1) {
@@ -755,26 +759,29 @@ const char *surf_action_state_names[6] = {
   "SURF_ACTION_NOT_IN_THE_SYSTEM"
 };
 
-Action::Action()
-: m_refcount(1)
-{}
+void Action::initialize(ModelPtr model, double cost, bool failed,
+                        lmm_variable_t var)
+{
+  m_priority = 1.0;
+  m_refcount = 1;
+  m_remains = cost;
+  m_maxDuration = NO_MAX_DURATION;
+  m_finish = -1.0;
+  m_failed = failed;
+  m_start = surf_get_clock();
+  m_cost = cost;
+  p_model = model;
+  p_data = NULL;
+  p_variable = var;
+  m_lastValue = 0;
+  m_lastUpdate = 0;
+  m_suspended = false;
+  m_hat = NOTSET;
+}
 
 Action::Action(ModelPtr model, double cost, bool failed)
- : m_priority(1.0)
- , m_refcount(1)
- , m_remains(cost)
- , m_maxDuration(NO_MAX_DURATION)
- , m_finish(-1.0)
- , m_failed(failed)
- , m_start(surf_get_clock())
- , m_cost(cost)
- , p_model(model)
- , p_data(NULL)
- , p_variable(NULL)
- , m_lastValue(0)
- , m_lastUpdate(0)
- , m_suspended(false)
 {
+  initialize(model, cost, failed);
   #ifdef HAVE_TRACING
     p_category = NULL;
   #endif
@@ -789,21 +796,8 @@ Action::Action(ModelPtr model, double cost, bool failed)
 }
 
 Action::Action(ModelPtr model, double cost, bool failed, lmm_variable_t var)
- : m_priority(1.0)
- , m_refcount(1)
- , m_remains(cost)
- , m_maxDuration(NO_MAX_DURATION)
- , m_finish(-1.0)
- , m_failed(failed)
- , m_start(surf_get_clock())
- , m_cost(cost)
- , p_model(model)
- , p_data(NULL)
- , p_variable(var)
- , m_lastValue(0)
- , m_lastUpdate(0)
- , m_suspended(false)
 {
+  initialize(model, cost, failed, var);
   #ifdef HAVE_TRACING
     p_category = NULL;
   #endif
@@ -1053,7 +1047,7 @@ void Action::updateRemainingLazy(double now)
 
   if (m_remains > 0) {
     XBT_DEBUG("Updating action(%p): remains was %f, last_update was: %f", this, m_remains, m_lastUpdate);
-    double_update(&m_remains, m_lastValue * delta);
+    double_update(&m_remains, m_lastValue * delta, sg_surf_precision*sg_maxmin_precision);
 
 #ifdef HAVE_TRACING
     if (getModel() == static_cast<ModelPtr>(surf_cpu_model_pm) && TRACE_is_enabled()) {
@@ -1067,7 +1061,7 @@ void Action::updateRemainingLazy(double now)
   if(getModel() == static_cast<ModelPtr>(surf_network_model))
   {
     if (m_maxDuration != NO_MAX_DURATION)
-      double_update(&m_maxDuration, delta);
+      double_update(&m_maxDuration, delta, sg_surf_precision);
 
     //FIXME: duplicated code
     if ((m_remains <= 0) &&