X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0617119206ff65bfdad4e484f653638abbc3c747..eecf563b3a3a0333dac9f754fe11f047c99cd27d:/src/surf/cpu_ti.cpp diff --git a/src/surf/cpu_ti.cpp b/src/surf/cpu_ti.cpp index c1c9ec471f..d15f1d2d58 100644 --- a/src/surf/cpu_ti.cpp +++ b/src/surf/cpu_ti.cpp @@ -4,9 +4,9 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include "cpu_ti.hpp" +#include "src/surf/surf_interface.hpp" #include "src/surf/trace_mgr.hpp" -#include "xbt/utility.hpp" -#include +#include "surf/surf.hpp" #ifndef SURF_MODEL_CPUTI_H_ #define SURF_MODEL_CPUTI_H_ @@ -45,10 +45,9 @@ CpuTiTrace::~CpuTiTrace() delete [] integral_; } -CpuTiTgmr::~CpuTiTgmr() +CpuTiTmgr::~CpuTiTmgr() { - if (trace_) - delete trace_; + delete trace_; } /** @@ -61,7 +60,7 @@ CpuTiTgmr::~CpuTiTgmr() * \param b End of interval * \return the integrate value. -1 if an error occurs. */ -double CpuTiTgmr::integrate(double a, double b) +double CpuTiTmgr::integrate(double a, double b) { int a_index; @@ -138,7 +137,7 @@ double CpuTiTrace::integrate_simple_point(double a) * \param amount Amount to be executed * \return End time */ -double CpuTiTgmr::solve(double a, double amount) +double CpuTiTmgr::solve(double a, double amount) { /* Fix very small negative numbers */ if ((a < 0.0) && (a > -EPSILON)) { @@ -212,7 +211,7 @@ double CpuTiTrace::solve_simple(double a, double amount) * \param a Time * \return CPU speed scale */ -double CpuTiTgmr::get_power_scale(double a) +double CpuTiTmgr::get_power_scale(double a) { double reduced_a = a - floor(a / last_time_) * last_time_; int point = trace_->binary_search(trace_->time_points_, reduced_a, 0, trace_->nb_points_ - 1); @@ -221,19 +220,19 @@ double CpuTiTgmr::get_power_scale(double a) } /** -* \brief Creates a new integration trace from a tmgr_trace_t -* -* \param speedTrace CPU availability trace -* \param value Percentage of CPU speed available (useful to fixed tracing) -* \return Integration trace structure -*/ -CpuTiTgmr::CpuTiTgmr(tmgr_trace_t speedTrace, double value) : speed_trace_(speedTrace) + * \brief Creates a new integration trace from a tmgr_trace_t + * + * \param speed_trace CPU availability trace + * \param value Percentage of CPU speed available (useful to fixed tracing) + * \return Integration trace structure + */ +CpuTiTmgr::CpuTiTmgr(tmgr_trace_t speed_trace, double value) : speed_trace_(speed_trace) { double total_time = 0.0; trace_ = 0; -/* no availability file, fixed trace */ - if (not speedTrace) { + /* no availability file, fixed trace */ + if (not speed_trace) { type_ = TRACE_FIXED; value_ = value; XBT_DEBUG("No availability trace. Constant value = %f", value); @@ -241,22 +240,21 @@ CpuTiTgmr::CpuTiTgmr(tmgr_trace_t speedTrace, double value) : speed_trace_(speed } /* only one point available, fixed trace */ - if (speedTrace->event_list.size() == 1) { - trace_mgr::DatedValue val = speedTrace->event_list.front(); - type_ = TRACE_FIXED; - value_ = val.value_; + if (speed_trace->event_list.size() == 1) { + type_ = TRACE_FIXED; + value_ = speed_trace->event_list.front().value_; return; } type_ = TRACE_DYNAMIC; /* count the total time of trace file */ - for (auto const& val : speedTrace->event_list) + for (auto const& val : speed_trace->event_list) total_time += val.date_; - trace_ = new CpuTiTrace(speedTrace); + trace_ = new CpuTiTrace(speed_trace); last_time_ = total_time; - total_ = trace_->integrate_simple(0, total_time); + total_ = trace_->integrate_simple(0, total_time); XBT_DEBUG("Total integral %f, last_time %f ", total_, last_time_); } @@ -326,9 +324,9 @@ double CpuTiModel::next_occuring_event(double now) /* iterates over modified cpus to update share resources */ for (auto it = std::begin(modified_cpus_); it != std::end(modified_cpus_);) { - CpuTi& ti = *it; - ++it; // increment iterator here since the following call to ti.updateActionsFinishTime() may invalidate it - ti.update_actions_finish_time(now); + CpuTi& cpu = *it; + ++it; // increment iterator here since the following call to ti.update_actions_finish_time() may invalidate it + cpu.update_actions_finish_time(now); } /* get the min next event if heap not empty */ @@ -345,7 +343,7 @@ void CpuTiModel::update_actions_state(double now, double /*delta*/) while (not get_action_heap().empty() && double_equals(get_action_heap().top_date(), now, sg_surf_precision)) { CpuTiAction* action = static_cast(get_action_heap().pop()); XBT_DEBUG("Action %p: finish", action); - action->finish(kernel::resource::Action::State::done); + action->finish(kernel::resource::Action::State::FINISHED); /* update remaining amount of all actions */ action->cpu_->update_remaining_amount(surf_get_clock()); } @@ -362,7 +360,7 @@ CpuTi::CpuTi(CpuTiModel *model, simgrid::s4u::Host *host, std::vector *s speed_.peak = speedPerPstate->front(); XBT_DEBUG("CPU create: peak=%f", speed_.peak); - speed_integrated_trace_ = new CpuTiTgmr(nullptr, 1 /*scale*/); + speed_integrated_trace_ = new CpuTiTmgr(nullptr, 1 /*scale*/); } CpuTi::~CpuTi() @@ -372,10 +370,8 @@ CpuTi::~CpuTi() } void CpuTi::set_speed_trace(tmgr_trace_t trace) { - if (speed_integrated_trace_) - delete speed_integrated_trace_; - - speed_integrated_trace_ = new CpuTiTgmr(trace, speed_.scale); + delete speed_integrated_trace_; + speed_integrated_trace_ = new CpuTiTmgr(trace, speed_.scale); /* add a fake trace event if periodicity == 0 */ if (trace && trace->event_list.size() > 1) { @@ -388,21 +384,18 @@ void CpuTi::set_speed_trace(tmgr_trace_t trace) void CpuTi::apply_event(tmgr_trace_event_t event, double value) { if (event == speed_.event) { - tmgr_trace_t speedTrace; - CpuTiTgmr *trace; - XBT_DEBUG("Finish trace date: value %f", value); /* update remaining of actions and put in modified cpu list */ update_remaining_amount(surf_get_clock()); set_modified(true); - speedTrace = speed_integrated_trace_->speed_trace_; + tmgr_trace_t speedTrace = speed_integrated_trace_->speed_trace_; trace_mgr::DatedValue val = speedTrace->event_list.back(); delete speed_integrated_trace_; speed_.scale = val.value_; - trace = new CpuTiTgmr(TRACE_FIXED, val.value_); + CpuTiTmgr* trace = new CpuTiTmgr(TRACE_FIXED, val.value_); XBT_DEBUG("value %f", val.value_); speed_integrated_trace_ = trace; @@ -420,11 +413,11 @@ void CpuTi::apply_event(tmgr_trace_event_t event, double value) /* put all action running on cpu to failed */ for (CpuTiAction& action : action_set_) { - if (action.get_state() == kernel::resource::Action::State::running || - action.get_state() == kernel::resource::Action::State::ready || - action.get_state() == kernel::resource::Action::State::not_in_the_system) { + if (action.get_state() == kernel::resource::Action::State::INITED || + action.get_state() == kernel::resource::Action::State::STARTED || + action.get_state() == kernel::resource::Action::State::IGNORED) { action.set_finish_time(date); - action.set_state(kernel::resource::Action::State::failed); + action.set_state(kernel::resource::Action::State::FAILED); get_model()->get_action_heap().remove(&action); } } @@ -446,7 +439,7 @@ void CpuTi::update_actions_finish_time(double now) sum_priority_ = 0.0; for (CpuTiAction const& action : action_set_) { /* action not running, skip it */ - if (action.get_state_set() != surf_cpu_model_pm->get_running_action_set()) + if (action.get_state_set() != surf_cpu_model_pm->get_started_action_set()) continue; /* bogus priority, skip it */ @@ -463,7 +456,7 @@ void CpuTi::update_actions_finish_time(double now) for (CpuTiAction& action : action_set_) { double min_finish = -1; /* action not running, skip it */ - if (action.get_state_set() != surf_cpu_model_pm->get_running_action_set()) + if (action.get_state_set() != surf_cpu_model_pm->get_started_action_set()) continue; /* verify if the action is really running on cpu */ @@ -520,7 +513,7 @@ void CpuTi::update_remaining_amount(double now) XBT_DEBUG("Flops total: %f, Last update %f", area_total, last_update_); for (CpuTiAction& action : action_set_) { /* action not running, skip it */ - if (action.get_state_set() != get_model()->get_running_action_set()) + if (action.get_state_set() != get_model()->get_started_action_set()) continue; /* bogus priority, skip it */ @@ -549,9 +542,9 @@ void CpuTi::update_remaining_amount(double now) CpuAction *CpuTi::execution_start(double size) { XBT_IN("(%s,%g)", get_cname(), size); - CpuTiAction* action = new CpuTiAction(static_cast(get_model()), size, is_off(), this); + CpuTiAction* action = new CpuTiAction(this, size); - action_set_.push_back(*action); + action_set_.push_back(*action); // Actually start the action XBT_OUT(); return action; @@ -564,16 +557,12 @@ CpuAction *CpuTi::sleep(double duration) duration = std::max(duration, sg_surf_precision); XBT_IN("(%s,%g)", get_cname(), duration); - CpuTiAction* action = new CpuTiAction(static_cast(get_model()), 1.0, is_off(), this); + CpuTiAction* action = new CpuTiAction(this, 1.0); action->set_max_duration(duration); action->suspended_ = kernel::resource::Action::SuspendStates::sleeping; - if (duration == NO_MAX_DURATION) { - /* Move to the *end* of the corresponding action set. This convention is used to speed up update_resource_state */ - simgrid::xbt::intrusive_erase(*action->get_state_set(), *action); - action->state_set_ = &static_cast(get_model())->runningActionSetThatDoesNotNeedBeingChecked_; - action->get_state_set()->push_back(*action); - } + if (duration < 0) // NO_MAX_DURATION + action->set_state(simgrid::kernel::resource::Action::State::IGNORED); action_set_.push_back(*action); @@ -583,14 +572,14 @@ CpuAction *CpuTi::sleep(double duration) void CpuTi::set_modified(bool modified) { - CpuTiList& modifiedCpu = static_cast(get_model())->modified_cpus_; + CpuTiList& modified_cpus = static_cast(get_model())->modified_cpus_; if (modified) { if (not cpu_ti_hook.is_linked()) { - modifiedCpu.push_back(*this); + modified_cpus.push_back(*this); } } else { if (cpu_ti_hook.is_linked()) - simgrid::xbt::intrusive_erase(modifiedCpu, *this); + simgrid::xbt::intrusive_erase(modified_cpus, *this); } } @@ -598,9 +587,7 @@ void CpuTi::set_modified(bool modified) * Action * **********/ -CpuTiAction::CpuTiAction(CpuTiModel *model_, double cost, bool failed, CpuTi *cpu) - : CpuAction(model_, cost, failed) - , cpu_(cpu) +CpuTiAction::CpuTiAction(CpuTi* cpu, double cost) : CpuAction(cpu->get_model(), cost, cpu->is_off()), cpu_(cpu) { cpu_->set_modified(true); } @@ -622,7 +609,7 @@ void CpuTiAction::set_state(Action::State state) void CpuTiAction::cancel() { - this->set_state(Action::State::failed); + this->set_state(Action::State::FAILED); get_model()->get_action_heap().remove(this); cpu_->set_modified(true); }