X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5b6c79c94d59ddc7911e5594d82c6765f2e125db..c0bda26f8216132898999052ea1fdbbe01fd2aa0:/src/surf/cpu_ti.cpp diff --git a/src/surf/cpu_ti.cpp b/src/surf/cpu_ti.cpp index e36d98c70d..0611e46a0d 100644 --- a/src/surf/cpu_ti.cpp +++ b/src/surf/cpu_ti.cpp @@ -5,7 +5,6 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include "cpu_ti.hpp" -#include "xbt/heap.h" #include "src/surf/trace_mgr.hpp" #ifndef SURF_MODEL_CPUTI_H_ @@ -331,9 +330,6 @@ CpuTiModel::CpuTiModel() : CpuModel() runningActionSetThatDoesNotNeedBeingChecked_ = new ActionList(); modifiedCpu_ = new CpuTiList(); - - actionHeap_ = xbt_heap_new(8, nullptr); - xbt_heap_set_update_callback(actionHeap_, surf_action_lmm_update_index_heap); } CpuTiModel::~CpuTiModel() @@ -341,7 +337,6 @@ CpuTiModel::~CpuTiModel() surf_cpu_model_pm = nullptr; delete runningActionSetThatDoesNotNeedBeingChecked_; delete modifiedCpu_; - xbt_heap_free(actionHeap_); } Cpu *CpuTiModel::createCpu(simgrid::s4u::Host *host, std::vector* speedPerPstate, int core) @@ -363,8 +358,8 @@ double CpuTiModel::nextOccuringEvent(double now) } /* get the min next event if heap not empty */ - if (xbt_heap_size(actionHeap_) > 0) - min_action_duration = xbt_heap_maxkey(actionHeap_) - now; + if (not actionHeapIsEmpty()) + min_action_duration = actionHeapTopDate() - now; XBT_DEBUG("Share resources, min next event date: %f", min_action_duration); @@ -373,8 +368,8 @@ double CpuTiModel::nextOccuringEvent(double now) void CpuTiModel::updateActionsState(double now, double /*delta*/) { - while ((xbt_heap_size(actionHeap_) > 0) && (xbt_heap_maxkey(actionHeap_) <= now)) { - CpuTiAction* action = static_cast(xbt_heap_pop(actionHeap_)); + while (not actionHeapIsEmpty() && actionHeapTopDate() <= now) { + CpuTiAction* action = static_cast(actionHeapPop()); XBT_DEBUG("Action %p: finish", action); action->finish(Action::State::done); /* set the remains to 0 due to precision problems when updating the remaining amount */ @@ -464,12 +459,7 @@ void CpuTi::apply_event(tmgr_trace_event_t event, double value) || action->getState() == Action::State::not_in_the_system) { action->setFinishTime(date); action->setState(Action::State::failed); - if (action->getIndexHeap() >= 0) { - CpuTiAction* heap_act = - static_cast(xbt_heap_remove(model()->getActionHeap(), action->getIndexHeap())); - if (heap_act != action) - DIE_IMPOSSIBLE; - } + action->heapRemove(model()->getActionHeap()); } } } @@ -535,15 +525,10 @@ void CpuTi::updateActionsFinishTime(double now) min_finish = action->getStartTime() + action->getMaxDuration(); } /* add in action heap */ - XBT_DEBUG("action(%p) index %d", action, action->getIndexHeap()); - if (action->getIndexHeap() >= 0) { - CpuTiAction* heap_act = - static_cast(xbt_heap_remove(model()->getActionHeap(), action->getIndexHeap())); - if (heap_act != action) - DIE_IMPOSSIBLE; - } if (min_finish > NO_MAX_DURATION) - xbt_heap_push(model()->getActionHeap(), action, min_finish); + action->heapUpdate(model()->getActionHeap(), min_finish, NOTSET); + else + action->heapRemove(model()->getActionHeap()); XBT_DEBUG("Update finish time: Cpu(%s) Action: %p, Start Time: %f Finish Time: %f Max duration %f", getCname(), action, action->getStartTime(), action->getFinishTime(), action->getMaxDuration()); @@ -661,7 +646,6 @@ CpuTiAction::CpuTiAction(CpuTiModel *model_, double cost, bool failed, CpuTi *cp : CpuAction(model_, cost, failed) , cpu_(cpu) { - updateIndexHeap(-1); cpu_->modified(true); } @@ -681,7 +665,7 @@ int CpuTiAction::unref() if (action_ti_hook.is_linked()) cpu_->actionSet_->erase(cpu_->actionSet_->iterator_to(*this)); /* remove from heap */ - xbt_heap_remove(getModel()->getActionHeap(), getIndexHeap()); + heapRemove(getModel()->getActionHeap()); cpu_->modified(true); delete this; return 1; @@ -692,7 +676,7 @@ int CpuTiAction::unref() void CpuTiAction::cancel() { this->setState(Action::State::failed); - xbt_heap_remove(getModel()->getActionHeap(), getIndexHeap()); + heapRemove(getModel()->getActionHeap()); cpu_->modified(true); } @@ -701,7 +685,7 @@ void CpuTiAction::suspend() XBT_IN("(%p)", this); if (suspended_ != 2) { suspended_ = 1; - xbt_heap_remove(getModel()->getActionHeap(), getIndexHeap()); + heapRemove(getModel()->getActionHeap()); cpu_->modified(true); } XBT_OUT(); @@ -731,13 +715,8 @@ void CpuTiAction::setMaxDuration(double duration) else min_finish = getFinishTime(); -/* add in action heap */ - if (getIndexHeap() >= 0) { - CpuTiAction* heap_act = static_cast(xbt_heap_remove(getModel()->getActionHeap(), getIndexHeap())); - if (heap_act != this) - DIE_IMPOSSIBLE; - } - xbt_heap_push(getModel()->getActionHeap(), this, min_finish); + /* add in action heap */ + heapUpdate(getModel()->getActionHeap(), min_finish, NOTSET); XBT_OUT(); }