Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
further rename power to speed in surf internals
[simgrid.git] / src / surf / cpu_ti.cpp
index 10f16cf..3e2d91b 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013-2014. The SimGrid Team.
+/* Copyright (c) 2013-2015. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
@@ -20,7 +20,7 @@ static void cpu_ti_action_update_index_heap(void *action, int i);
  * Trace *
  *********/
 
-CpuTiTrace::CpuTiTrace(tmgr_trace_t power_trace)
+CpuTiTrace::CpuTiTrace(tmgr_trace_t speedTrace)
 {
   s_tmgr_event_t val;
   unsigned int cpt;
@@ -28,11 +28,11 @@ CpuTiTrace::CpuTiTrace(tmgr_trace_t power_trace)
   double time = 0;
   int i = 0;
   p_timePoints = (double*) xbt_malloc0(sizeof(double) *
-                  (xbt_dynar_length(power_trace->s_list.event_list) + 1));
+                  (xbt_dynar_length(speedTrace->s_list.event_list) + 1));
   p_integral = (double*) xbt_malloc0(sizeof(double) *
-                  (xbt_dynar_length(power_trace->s_list.event_list) + 1));
-  m_nbPoints = xbt_dynar_length(power_trace->s_list.event_list);
-  xbt_dynar_foreach(power_trace->s_list.event_list, cpt, val) {
+                  (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) {
     p_timePoints[i] = time;
     p_integral[i] = integral;
     integral += val.delta * val.value;
@@ -279,12 +279,12 @@ double CpuTiTrace::solveSimple(double a, double amount)
 }
 
 /**
-* \brief Auxiliary function to update the CPU power scale.
+* \brief Auxiliary function to update the CPU speed scale.
 *
-*  This function uses the trace structure to return the power scale at the determined time a.
-* \param trace    Trace structure to search the updated power scale
+*  This function uses the trace structure to return the speed scale at the determined time a.
+* \param trace    Trace structure to search the updated speed scale
 * \param a        Time
-* \return CPU power scale
+* \return CPU speed scale
 */
 double CpuTiTgmr::getPowerScale(double a)
 {
@@ -295,19 +295,19 @@ 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_powerTrace->s_list.event_list, point, &val);
+  xbt_dynar_get_cpy(p_speedTrace->s_list.event_list, point, &val);
   return val.value;
 }
 
 /**
 * \brief Creates a new integration trace from a tmgr_trace_t
 *
-* \param  power_trace    CPU availability trace
-* \param  value          Percentage of CPU power available (useful to fixed tracing)
+* \param  speedTrace    CPU availability trace
+* \param  value          Percentage of CPU speed available (useful to fixed tracing)
 * \param  spacing        Initial spacing
 * \return  Integration trace structure
 */
-CpuTiTgmr::CpuTiTgmr(tmgr_trace_t power_trace, double value)
+CpuTiTgmr::CpuTiTgmr(tmgr_trace_t speedTrace, double value)
 {
   double total_time = 0.0;
   s_tmgr_event_t val;
@@ -315,7 +315,7 @@ CpuTiTgmr::CpuTiTgmr(tmgr_trace_t power_trace, double value)
   p_trace = 0;
 
 /* no availability file, fixed trace */
-  if (!power_trace) {
+  if (!speedTrace) {
     m_type = TRACE_FIXED;
     m_value = value;
     XBT_DEBUG("No availability trace. Constant value = %f", value);
@@ -323,21 +323,21 @@ CpuTiTgmr::CpuTiTgmr(tmgr_trace_t power_trace, double value)
   }
 
   /* only one point available, fixed trace */
-  if (xbt_dynar_length(power_trace->s_list.event_list) == 1) {
-    xbt_dynar_get_cpy(power_trace->s_list.event_list, 0, &val);
+  if (xbt_dynar_length(speedTrace->s_list.event_list) == 1) {
+    xbt_dynar_get_cpy(speedTrace->s_list.event_list, 0, &val);
     m_type = TRACE_FIXED;
     m_value = val.value;
     return;
   }
 
   m_type = TRACE_DYNAMIC;
-  p_powerTrace = power_trace;
+  p_speedTrace = speedTrace;
 
   /* count the total time of trace file */
-  xbt_dynar_foreach(power_trace->s_list.event_list, cpt, val) {
+  xbt_dynar_foreach(speedTrace->s_list.event_list, cpt, val) {
     total_time += val.delta;
   }
-  p_trace = new CpuTiTrace(power_trace);
+  p_trace = new CpuTiTrace(speedTrace);
   m_lastTime = total_time;
   m_total = p_trace->integrateSimple(0, total_time);
 
@@ -381,7 +381,6 @@ int CpuTiTrace::binarySearch(double *array, double a, int low, int high)
 
 static void cpu_ti_define_callbacks()
 {
-  sg_platf_host_add_cb(cpu_parse_init);
   sg_platf_postparse_add_cb(cpu_add_traces);
 }
 
@@ -395,16 +394,16 @@ void surf_cpu_model_init_ti()
   xbt_assert(!surf_cpu_model_vm,"CPU model already initialized. This should not happen.");
 
   surf_cpu_model_pm = new CpuTiModel();
-  surf_cpu_model_vm  = new CpuTiModel();
+  surf_cpu_model_vm = new CpuTiModel();
 
   cpu_ti_define_callbacks();
-  ModelPtr model_pm = static_cast<ModelPtr>(surf_cpu_model_pm);
-  ModelPtr model_vm = static_cast<ModelPtr>(surf_cpu_model_vm);
-  xbt_dynar_push(model_list, &model_pm);
-  xbt_dynar_push(model_list, &model_vm);
+  Model *model_pm = static_cast<Model*>(surf_cpu_model_pm);
+  Model *model_vm = static_cast<Model*>(surf_cpu_model_vm);
+  xbt_dynar_push(all_existing_models, &model_pm);
+  xbt_dynar_push(all_existing_models, &model_vm);
 }
 
-CpuTiModel::CpuTiModel() : CpuModel("cpu_ti")
+CpuTiModel::CpuTiModel() : CpuModel()
 {
   p_runningActionSetThatDoesNotNeedBeingChecked = new ActionList();
 
@@ -423,23 +422,23 @@ CpuTiModel::~CpuTiModel()
   xbt_heap_free(p_tiActionHeap);
 }
 
-CpuPtr CpuTiModel::createCpu(const char *name,
-                              xbt_dynar_t powerPeak,
+Cpu *CpuTiModel::createCpu(const char *name,
+                              xbt_dynar_t speedPeak,
                               int pstate,
-                           double powerScale,
-                           tmgr_trace_t powerTrace,
+                           double speedScale,
+                           tmgr_trace_t speedTrace,
                            int core,
                            e_surf_resource_state_t stateInitial,
                            tmgr_trace_t stateTrace,
                            xbt_dict_t cpuProperties)
 {
   xbt_assert(core==1,"Multi-core not handled with this model yet");
-  xbt_assert(!surf_cpu_resource_priv(surf_cpu_resource_by_name(name)),
-              "Host '%s' declared several times in the platform file",
-              name);
-  CpuTiPtr cpu = new CpuTi(this, name, powerPeak, pstate, powerScale, powerTrace,
+  sg_host_t host = sg_host_by_name(name);
+  xbt_assert(xbt_dynar_getfirst_as(speedPeak, double) > 0.0,
+      "Speed has to be >0.0. Did you forget to specify the mandatory speed attribute?");
+  CpuTi *cpu = new CpuTi(this, name, speedPeak, pstate, speedScale, speedTrace,
                           core, stateInitial, stateTrace, cpuProperties);
-  xbt_lib_set(host_lib, name, SURF_CPU_LEVEL, static_cast<ResourcePtr>(cpu));
+  sg_host_surfcpu_register(host, cpu);
   return cpu;
 }
 
@@ -450,7 +449,7 @@ double CpuTiModel::shareResources(double now)
 /* iterates over modified cpus to update share resources */
   for(CpuTiList::iterator it(p_modifiedCpu->begin()), itend(p_modifiedCpu->end())
      ; it != itend ;) {
-    CpuTiPtr ti = &*it;
+    CpuTi *ti = &*it;
     ++it;
     ti->updateActionsFinishTime(now);
   }
@@ -468,7 +467,7 @@ void CpuTiModel::updateActionsState(double now, double /*delta*/)
 {
   while ((xbt_heap_size(p_tiActionHeap) > 0)
          && (xbt_heap_maxkey(p_tiActionHeap) <= now)) {
-    CpuTiActionPtr action = (CpuTiActionPtr) xbt_heap_pop(p_tiActionHeap);
+    CpuTiAction *action = (CpuTiAction*) xbt_heap_pop(p_tiActionHeap);
     XBT_DEBUG("Action %p: finish", action);
     action->finish();
     /* set the remains to 0 due to precision problems when updating the remaining amount */
@@ -493,7 +492,7 @@ void CpuTiModel::addTraces()
 /* connect all traces relative to hosts */
   xbt_dict_foreach(trace_connect_list_host_avail, cursor, trace_name, elm) {
     tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name);
-    CpuTiPtr cpu = static_cast<CpuTiPtr>(surf_cpu_resource_priv(surf_cpu_resource_by_name(elm)));
+    CpuTi *cpu = static_cast<CpuTi*>(sg_host_surfcpu(sg_host_by_name(elm)));
 
     xbt_assert(cpu, "Host %s undefined", elm);
     xbt_assert(trace, "Trace %s undefined", trace_name);
@@ -509,16 +508,16 @@ void CpuTiModel::addTraces()
 
   xbt_dict_foreach(trace_connect_list_power, cursor, trace_name, elm) {
     tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name);
-    CpuTiPtr cpu = static_cast<CpuTiPtr>(surf_cpu_resource_priv(surf_cpu_resource_by_name(elm)));
+    CpuTi *cpu = static_cast<CpuTi*>(sg_host_surfcpu(sg_host_by_name(elm)));
 
     xbt_assert(cpu, "Host %s undefined", elm);
     xbt_assert(trace, "Trace %s undefined", trace_name);
 
-    XBT_DEBUG("Add power trace: %s to CPU(%s)", trace_name, elm);
+    XBT_DEBUG("Add speed trace: %s to CPU(%s)", trace_name, elm);
     if (cpu->p_availTrace)
       delete cpu->p_availTrace;
 
-    cpu->p_availTrace = new CpuTiTgmr(trace, cpu->m_powerScale);
+    cpu->p_availTrace = new CpuTiTgmr(trace, cpu->m_speedScale);
 
     /* add a fake trace event if periodicity == 0 */
     if (trace && xbt_dynar_length(trace->s_list.event_list) > 1) {
@@ -528,7 +527,7 @@ void CpuTiModel::addTraces()
       if (val.delta == 0) {
         tmgr_trace_t empty_trace;
         empty_trace = tmgr_empty_trace_new();
-        cpu->p_powerEvent =
+        cpu->p_speedEvent =
             tmgr_history_add_trace(history, empty_trace,
                                    cpu->p_availTrace->m_lastTime, 0, cpu);
       }
@@ -539,39 +538,37 @@ void CpuTiModel::addTraces()
 /************
  * Resource *
  ************/
-CpuTi::CpuTi(CpuTiModelPtr model, const char *name, xbt_dynar_t powerPeak,
-        int pstate, double powerScale, tmgr_trace_t powerTrace, int core,
+CpuTi::CpuTi(CpuTiModel *model, const char *name, xbt_dynar_t speedPeak,
+        int pstate, double speedScale, tmgr_trace_t speedTrace, int core,
         e_surf_resource_state_t stateInitial, tmgr_trace_t stateTrace,
-       xbt_dict_t properties)
-: Cpu(model, name, properties, core, 0, powerScale)
+             xbt_dict_t properties)
+  : Cpu(model, name, properties, core, 0, speedScale, stateInitial)
 {
-  p_powerEvent = NULL;
-  setState(stateInitial);
-  m_powerScale = powerScale;
+  p_speedEvent = NULL;
+  m_speedScale = speedScale;
   m_core = core;
   tmgr_trace_t empty_trace;
   s_tmgr_event_t val;
   xbt_assert(core==1,"Multi-core not handled with this model yet");
-  XBT_DEBUG("power scale %f", powerScale);
-  p_availTrace = new CpuTiTgmr(powerTrace, powerScale);
+  XBT_DEBUG("speed scale %f", speedScale);
+  p_availTrace = new CpuTiTgmr(speedTrace, speedScale);
 
   p_actionSet = new ActionTiList();
 
   m_lastUpdate = 0;
 
-  xbt_dynar_get_cpy(powerPeak, 0, &m_powerPeak);
-  xbt_dynar_free(&powerPeak);  /* kill memory leak */
-  XBT_DEBUG("CPU create: peak=%f", m_powerPeak);
+  xbt_dynar_get_cpy(speedPeak, 0, &m_speedPeak);
+  XBT_DEBUG("CPU create: peak=%f", m_speedPeak);
 
   if (stateTrace)
     p_stateEvent = tmgr_history_add_trace(history, stateTrace, 0.0, 0, this);
-  if (powerTrace && xbt_dynar_length(powerTrace->s_list.event_list) > 1) {
+  if (speedTrace && xbt_dynar_length(speedTrace->s_list.event_list) > 1) {
     // add a fake trace event if periodicity == 0
-    xbt_dynar_get_cpy(powerTrace->s_list.event_list,
-                      xbt_dynar_length(powerTrace->s_list.event_list) - 1, &val);
+    xbt_dynar_get_cpy(speedTrace->s_list.event_list,
+                      xbt_dynar_length(speedTrace->s_list.event_list) - 1, &val);
     if (val.delta == 0) {
       empty_trace = tmgr_empty_trace_new();
-      p_powerEvent =
+      p_speedEvent =
         tmgr_history_add_trace(history, empty_trace,
                                p_availTrace->m_lastTime, 0, this);
     }
@@ -587,11 +584,11 @@ CpuTi::~CpuTi(){
 void CpuTi::updateState(tmgr_trace_event_t event_type,
                         double value, double date)
 {
-  CpuTiActionPtr action;
+  CpuTiAction *action;
 
-  if (event_type == p_powerEvent) {
-    tmgr_trace_t power_trace;
-    CpuTiTgmrPtr trace;
+  if (event_type == p_speedEvent) {
+    tmgr_trace_t speedTrace;
+    CpuTiTgmr *trace;
     s_tmgr_event_t val;
 
     XBT_DEBUG("Finish trace date: %f value %f date %f", surf_get_clock(),
@@ -601,12 +598,12 @@ void CpuTi::updateState(tmgr_trace_event_t event_type,
 
     modified(true);
 
-    power_trace = p_availTrace->p_powerTrace;
-    xbt_dynar_get_cpy(power_trace->s_list.event_list,
-                      xbt_dynar_length(power_trace->s_list.event_list) - 1, &val);
+    speedTrace = p_availTrace->p_speedTrace;
+    xbt_dynar_get_cpy(speedTrace->s_list.event_list,
+                      xbt_dynar_length(speedTrace->s_list.event_list) - 1, &val);
     /* free old trace */
     delete p_availTrace;
-    m_powerScale = val.value;
+    m_speedScale = val.value;
 
     trace = new CpuTiTgmr(TRACE_FIXED, val.value);
     XBT_DEBUG("value %f", val.value);
@@ -614,7 +611,7 @@ void CpuTi::updateState(tmgr_trace_event_t event_type,
     p_availTrace = trace;
 
     if (tmgr_trace_event_free(event_type))
-      p_powerEvent = NULL;
+      p_speedEvent = NULL;
 
   } else if (event_type == p_stateEvent) {
     if (value > 0) {
@@ -634,8 +631,8 @@ void CpuTi::updateState(tmgr_trace_event_t event_type,
           action->setFinishTime(date);
           action->setState(SURF_ACTION_FAILED);
           if (action->m_indexHeap >= 0) {
-            CpuTiActionPtr heap_act = (CpuTiActionPtr)
-                xbt_heap_remove(static_cast<CpuTiModelPtr>(getModel())->p_tiActionHeap, action->m_indexHeap);
+            CpuTiAction *heap_act = (CpuTiAction*)
+                xbt_heap_remove(static_cast<CpuTiModel*>(getModel())->p_tiActionHeap, action->m_indexHeap);
             if (heap_act != action)
               DIE_IMPOSSIBLE;
           }
@@ -654,7 +651,7 @@ void CpuTi::updateState(tmgr_trace_event_t event_type,
 
 void CpuTi::updateActionsFinishTime(double now)
 {
-  CpuTiActionPtr action;
+  CpuTiAction *action;
   double sum_priority = 0.0, total_area, min_finish = -1;
 
 /* update remaning amount of actions */
@@ -696,7 +693,7 @@ updateRemainingAmount(now);
           (action->getRemains()) * sum_priority *
            action->getPriority();
 
-      total_area /= m_powerPeak;
+      total_area /= m_speedPeak;
 
       action->setFinishTime(p_availTrace->solve(now, total_area));
       /* verify which event will happen before (max_duration or finish time) */
@@ -713,13 +710,13 @@ updateRemainingAmount(now);
     /* add in action heap */
     XBT_DEBUG("action(%p) index %d", action, action->m_indexHeap);
     if (action->m_indexHeap >= 0) {
-      CpuTiActionPtr heap_act = (CpuTiActionPtr)
-          xbt_heap_remove(static_cast<CpuTiModelPtr>(getModel())->p_tiActionHeap, action->m_indexHeap);
+      CpuTiAction *heap_act = (CpuTiAction*)
+          xbt_heap_remove(static_cast<CpuTiModel*>(getModel())->p_tiActionHeap, action->m_indexHeap);
       if (heap_act != action)
         DIE_IMPOSSIBLE;
     }
     if (min_finish != NO_MAX_DURATION)
-      xbt_heap_push(static_cast<CpuTiModelPtr>(getModel())->p_tiActionHeap, action, min_finish);
+      xbt_heap_push(static_cast<CpuTiModel*>(getModel())->p_tiActionHeap, action, min_finish);
 
     XBT_DEBUG
         ("Update finish time: Cpu(%s) Action: %p, Start Time: %f Finish Time: %f Max duration %f",
@@ -738,7 +735,7 @@ bool CpuTi::isUsed()
 
 double CpuTi::getAvailableSpeed()
 {
-  m_powerScale = p_availTrace->getPowerScale(surf_get_clock());
+  m_speedScale = p_availTrace->getPowerScale(surf_get_clock());
   return Cpu::getAvailableSpeed();
 }
 
@@ -750,14 +747,14 @@ double CpuTi::getAvailableSpeed()
 void CpuTi::updateRemainingAmount(double now)
 {
   double area_total;
-  CpuTiActionPtr action;
+  CpuTiAction *action;
 
   /* already updated */
   if (m_lastUpdate >= now)
     return;
 
 /* calcule the surface */
-  area_total = p_availTrace->integrate(m_lastUpdate, now) * m_powerPeak;
+  area_total = p_availTrace->integrate(m_lastUpdate, now) * m_speedPeak;
   XBT_DEBUG("Flops total: %f, Last update %f", area_total,
          m_lastUpdate);
 
@@ -794,10 +791,10 @@ void CpuTi::updateRemainingAmount(double now)
   m_lastUpdate = now;
 }
 
-CpuActionPtr CpuTi::execute(double size)
+CpuAction *CpuTi::execute(double size)
 {
   XBT_IN("(%s,%g)", getName(), size);
-  CpuTiActionPtr action = new CpuTiAction(static_cast<CpuTiModelPtr>(getModel()), size, getState() != SURF_RESOURCE_ON, this);
+  CpuTiAction *action = new CpuTiAction(static_cast<CpuTiModel*>(getModel()), size, getState() != SURF_RESOURCE_ON, this);
 
   p_actionSet->push_back(*action);
 
@@ -806,13 +803,13 @@ CpuActionPtr CpuTi::execute(double size)
 }
 
 
-CpuActionPtr CpuTi::sleep(double duration)
+CpuAction *CpuTi::sleep(double duration)
 {
   if (duration > 0)
     duration = MAX(duration, sg_surf_precision);
 
   XBT_IN("(%s,%g)", getName(), duration);
-  CpuTiActionPtr action = new CpuTiAction(static_cast<CpuTiModelPtr>(getModel()), 1.0, getState() != SURF_RESOURCE_ON, this);
+  CpuTiAction *action = new CpuTiAction(static_cast<CpuTiModel*>(getModel()), 1.0, getState() != SURF_RESOURCE_ON, this);
 
   action->m_maxDuration = duration;
   action->m_suspended = 2;
@@ -820,7 +817,7 @@ CpuActionPtr CpuTi::sleep(double duration)
    /* Move to the *end* of the corresponding action set. This convention
       is used to speed up update_resource_state  */
        action->getStateSet()->erase(action->getStateSet()->iterator_to(*action));
-    action->p_stateSet = static_cast<CpuTiModelPtr>(getModel())->p_runningActionSetThatDoesNotNeedBeingChecked;
+    action->p_stateSet = static_cast<CpuTiModel*>(getModel())->p_runningActionSetThatDoesNotNeedBeingChecked;
     action->getStateSet()->push_back(*action);
   }
 
@@ -831,13 +828,13 @@ CpuActionPtr CpuTi::sleep(double duration)
 }
 
 void CpuTi::modified(bool modified){
-  CpuTiListPtr modifiedCpu = static_cast<CpuTiModelPtr>(getModel())->p_modifiedCpu;
+  CpuTiList *modifiedCpu = static_cast<CpuTiModel*>(getModel())->p_modifiedCpu;
   if (modified) {
-    if (!is_linked()) {
+    if (!cpu_ti_hook.is_linked()) {
       modifiedCpu->push_back(*this);
     }
   } else {
-    if (is_linked()) {
+    if (cpu_ti_hook.is_linked()) {
       modifiedCpu->erase(modifiedCpu->iterator_to(*this));
     }
   }
@@ -849,11 +846,11 @@ void CpuTi::modified(bool modified){
 
 static void cpu_ti_action_update_index_heap(void *action, int i)
 {
-((CpuTiActionPtr)action)->updateIndexHeap(i);
+((CpuTiAction*)action)->updateIndexHeap(i);
 }
 
-CpuTiAction::CpuTiAction(CpuTiModelPtr model_, double cost, bool failed,
-                                CpuTiPtr cpu)
+CpuTiAction::CpuTiAction(CpuTiModel *model_, double cost, bool failed,
+                                CpuTi *cpu)
  : CpuAction(model_, cost, failed)
 {
   m_suspended = 0;        /* Should be useless because of the
@@ -878,13 +875,13 @@ int CpuTiAction::unref()
 {
   m_refcount--;
   if (!m_refcount) {
-       if (actionHook::is_linked())
+       if (action_hook.is_linked())
          getStateSet()->erase(getStateSet()->iterator_to(*this));
     /* remove from action_set */
-    if (actionTiHook::is_linked())
+    if (action_ti_hook.is_linked())
       p_cpu->p_actionSet->erase(p_cpu->p_actionSet->iterator_to(*this));
     /* remove from heap */
-    xbt_heap_remove(static_cast<CpuTiModelPtr>(getModel())->p_tiActionHeap, this->m_indexHeap);
+    xbt_heap_remove(static_cast<CpuTiModel*>(getModel())->p_tiActionHeap, this->m_indexHeap);
     p_cpu->modified(true);
     delete this;
     return 1;
@@ -900,11 +897,6 @@ void CpuTiAction::cancel()
   return;
 }
 
-void CpuTiAction::recycle()
-{
-  DIE_IMPOSSIBLE;
-}
-
 void CpuTiAction::suspend()
 {
   XBT_IN("(%p)", this);
@@ -947,7 +939,7 @@ void CpuTiAction::setMaxDuration(double duration)
 
 /* add in action heap */
   if (m_indexHeap >= 0) {
-    CpuTiActionPtr heap_act = (CpuTiActionPtr)
+    CpuTiAction *heap_act = (CpuTiAction*)
         xbt_heap_remove(getModel()->getActionHeap(), m_indexHeap);
     if (heap_act != this)
       DIE_IMPOSSIBLE;