X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/708022beac42d3fe3fc04330be0a543831d6f319..3fb28e990d3e18eef76fa5d21a134f0bd4e2fbaa:/src/kernel/resource/CpuImpl.cpp diff --git a/src/kernel/resource/CpuImpl.cpp b/src/kernel/resource/CpuImpl.cpp index 5a64cb5e37..313b3fcb11 100644 --- a/src/kernel/resource/CpuImpl.cpp +++ b/src/kernel/resource/CpuImpl.cpp @@ -1,18 +1,17 @@ -/* Copyright (c) 2013-2021. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2013-2023. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #include "src/kernel/resource/CpuImpl.hpp" +#include "src/kernel/EngineImpl.hpp" +#include "src/kernel/resource/models/cpu_ti.hpp" #include "src/kernel/resource/profile/Profile.hpp" -#include "src/surf/cpu_ti.hpp" -#include "src/surf/surf_interface.hpp" +#include "src/simgrid/math_utils.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(res_cpu, ker_resource, "CPU resource, fueling execution activites"); -namespace simgrid { -namespace kernel { -namespace resource { +namespace simgrid::kernel::resource { /********* * Model * @@ -20,7 +19,7 @@ namespace resource { void CpuModel::update_actions_state_lazy(double now, double /*delta*/) { - while (not get_action_heap().empty() && double_equals(get_action_heap().top_date(), now, sg_surf_precision)) { + while (not get_action_heap().empty() && double_equals(get_action_heap().top_date(), now, sg_precision_timing)) { auto* action = static_cast(get_action_heap().pop()); XBT_DEBUG("Something happened to action %p", action); @@ -68,9 +67,9 @@ CpuImpl* CpuImpl::set_pstate(unsigned long pstate_index) { xbt_assert( pstate_index < speed_per_pstate_.size(), - "Invalid parameters for CPU %s (pstate %lu >= length of pstates %d). Please fix your platform file, or your " + "Invalid parameters for CPU %s (pstate %lu >= length of pstates %zu). Please fix your platform file, or your " "call to change the pstate.", - get_cname(), pstate_index, static_cast(speed_per_pstate_.size())); + get_cname(), pstate_index, speed_per_pstate_.size()); double new_peak_speed = speed_per_pstate_[pstate_index]; pstate_ = pstate_index; @@ -91,14 +90,15 @@ CpuImpl* CpuImpl::set_pstate_speed(const std::vector& speed_per_state) double CpuImpl::get_pstate_peak_speed(unsigned long pstate_index) const { - xbt_assert((pstate_index <= speed_per_pstate_.size()), "Invalid parameters (pstate index out of bounds)"); - + xbt_assert(pstate_index < speed_per_pstate_.size(), "Invalid parameters (pstate index %lu out of bounds %zu)", + pstate_index, speed_per_pstate_.size()); return speed_per_pstate_[pstate_index]; } void CpuImpl::on_speed_change() { s4u::Host::on_speed_change(*piface_); + piface_->on_this_speed_change(*piface_); } CpuImpl* CpuImpl::set_core_count(int core_count) @@ -114,7 +114,7 @@ CpuImpl* CpuImpl::set_core_count(int core_count) void CpuImpl::apply_sharing_policy_cfg() const { - if (!get_constraint()) + if (not get_constraint()) return; kernel::lmm::Constraint::SharingPolicy lmm_policy = kernel::lmm::Constraint::SharingPolicy::SHARED; @@ -153,6 +153,23 @@ void CpuImpl::seal() Resource::seal(); } +void CpuImpl::turn_off() +{ + if (is_on()) { + Resource::turn_off(); + + const kernel::lmm::Element* elem = nullptr; + double now = EngineImpl::get_clock(); + while (const auto* var = get_constraint()->get_variable(&elem)) { + Action* action = var->get_id(); + if (action->get_state() == Action::State::INITED || action->get_state() == Action::State::STARTED) { + action->set_finish_time(now); + action->set_state(Action::State::FAILED); + } + } + } +} + /********** * Action * **********/ @@ -177,27 +194,11 @@ void CpuAction::update_remains_lazy(double now) set_last_value(get_rate()); } -xbt::signal CpuAction::on_state_change; - -void CpuAction::suspend() -{ - Action::State previous = get_state(); - on_state_change(*this, previous); - Action::suspend(); -} - -void CpuAction::resume() -{ - Action::State previous = get_state(); - on_state_change(*this, previous); - Action::resume(); -} - void CpuAction::set_state(Action::State state) { Action::State previous = get_state(); Action::set_state(state); - on_state_change(*this, previous); + s4u::Host::on_exec_state_change(*this, previous); } /** @brief returns a list of all CPUs that this action is using */ @@ -217,6 +218,4 @@ std::list CpuAction::cpus() const return retlist; } -} // namespace resource -} // namespace kernel -} // namespace simgrid +} // namespace simgrid::kernel::resource