Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
This void* for Constraint::id_ is a Resource*.
[simgrid.git] / src / surf / cpu_interface.cpp
index 0c71813..7682995 100644 (file)
@@ -4,17 +4,19 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "cpu_interface.hpp"
+#include "src/kernel/resource/profile/Profile.hpp"
 #include "src/surf/surf_interface.hpp"
 #include "surf/surf.hpp"
 
 XBT_LOG_EXTERNAL_CATEGORY(surf_kernel);
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_cpu, surf, "Logging specific to the SURF cpu module");
 
-simgrid::surf::CpuModel *surf_cpu_model_pm;
-simgrid::surf::CpuModel *surf_cpu_model_vm;
+simgrid::kernel::resource::CpuModel* surf_cpu_model_pm;
+simgrid::kernel::resource::CpuModel* surf_cpu_model_vm;
 
 namespace simgrid {
-namespace surf {
+namespace kernel {
+namespace resource {
 
 /*********
  * Model *
@@ -39,13 +41,11 @@ void CpuModel::update_actions_state_full(double /*now*/, double delta)
     ++it; // increment iterator here since the following calls to action.finish() may invalidate it
 
     action.update_remains(action.get_variable()->get_value() * delta);
+    action.update_max_duration(delta);
 
-    if (action.get_max_duration() != NO_MAX_DURATION)
-      action.update_max_duration(delta);
-
-    if (((action.get_remains_no_update() <= 0) && (action.get_variable()->get_weight() > 0)) ||
+    if (((action.get_remains_no_update() <= 0) && (action.get_variable()->get_penalty() > 0)) ||
         ((action.get_max_duration() != NO_MAX_DURATION) && (action.get_max_duration() <= 0))) {
-      action.finish(kernel::resource::Action::State::FINISHED);
+      action.finish(Action::State::FINISHED);
     }
   }
 }
@@ -53,35 +53,27 @@ void CpuModel::update_actions_state_full(double /*now*/, double delta)
 /************
  * Resource *
  ************/
-Cpu::Cpu(kernel::resource::Model* model, simgrid::s4u::Host* host, std::vector<double>* speedPerPstate, int core)
-    : Cpu(model, host, nullptr /*constraint*/, speedPerPstate, core)
+Cpu::Cpu(Model* model, s4u::Host* host, const std::vector<double>& speed_per_pstate, int core)
+    : Cpu(model, host, nullptr /*constraint*/, speed_per_pstate, core)
 {
 }
 
-Cpu::Cpu(kernel::resource::Model* model, simgrid::s4u::Host* host, kernel::lmm::Constraint* constraint,
-         std::vector<double>* speedPerPstate, int core)
-    : Resource(model, host->get_cname(), constraint), core_count_(core), host_(host)
+Cpu::Cpu(Model* model, s4u::Host* host, lmm::Constraint* constraint, const std::vector<double>& speed_per_pstate,
+         int core)
+    : Resource(model, host->get_cname(), constraint)
+    , core_count_(core)
+    , host_(host)
+    , speed_per_pstate_(speed_per_pstate)
 {
   xbt_assert(core > 0, "Host %s must have at least one core, not 0.", host->get_cname());
 
-  speed_.peak = speedPerPstate->front();
+  speed_.peak     = speed_per_pstate_.front();
   speed_.scale = 1;
   host->pimpl_cpu = this;
   xbt_assert(speed_.scale > 0, "Speed of host %s must be >0", host->get_cname());
-
-  // Copy the power peak array:
-  for (double const& value : *speedPerPstate) {
-    speed_per_pstate_.push_back(value);
-  }
-}
-
-Cpu::~Cpu()
-{
-  if (get_model() == surf_cpu_model_pm)
-    speed_per_pstate_.clear();
 }
 
-int Cpu::get_pstate_count()
+int Cpu::get_pstate_count() const
 {
   return speed_per_pstate_.size();
 }
@@ -100,12 +92,12 @@ void Cpu::set_pstate(int pstate_index)
   on_speed_change();
 }
 
-int Cpu::get_pstate()
+int Cpu::get_pstate() const
 {
   return pstate_;
 }
 
-double Cpu::get_pstate_peak_speed(int pstate_index)
+double Cpu::get_pstate_peak_speed(int pstate_index) const
 {
   xbt_assert((pstate_index <= static_cast<int>(speed_per_pstate_.size())),
              "Invalid parameters (pstate index out of bounds)");
@@ -113,7 +105,7 @@ double Cpu::get_pstate_peak_speed(int pstate_index)
   return speed_per_pstate_[pstate_index];
 }
 
-double Cpu::get_speed(double load)
+double Cpu::get_speed(double load) const
 {
   return load * speed_.peak;
 }
@@ -138,7 +130,7 @@ void Cpu::set_speed_profile(kernel::profile::Profile* profile)
 {
   xbt_assert(speed_.event == nullptr, "Cannot set a second speed trace to Host %s", host_->get_cname());
 
-  speed_.event = profile->schedule(&future_evt_set, this);
+  speed_.event = profile->schedule(&profile::future_evt_set, this);
 }
 
 
@@ -150,7 +142,7 @@ void CpuAction::update_remains_lazy(double now)
 {
   xbt_assert(get_state_set() == get_model()->get_started_action_set(),
              "You're updating an action that is not running.");
-  xbt_assert(get_priority() > 0, "You're updating an action that seems suspended.");
+  xbt_assert(get_sharing_penalty() > 0, "You're updating an action that seems suspended.");
 
   double delta = now - get_last_update();
 
@@ -166,17 +158,17 @@ void CpuAction::update_remains_lazy(double now)
   set_last_value(get_variable()->get_value());
 }
 
-simgrid::xbt::signal<void(simgrid::surf::CpuAction*, kernel::resource::Action::State)> CpuAction::on_state_change;
+xbt::signal<void(CpuAction const&, Action::State)> CpuAction::on_state_change;
 
 void CpuAction::suspend(){
   Action::State previous = get_state();
-  on_state_change(this, previous);
+  on_state_change(*this, previous);
   Action::suspend();
 }
 
 void CpuAction::resume(){
   Action::State previous = get_state();
-  on_state_change(this, previous);
+  on_state_change(*this, previous);
   Action::resume();
 }
 
@@ -184,19 +176,19 @@ void CpuAction::set_state(Action::State state)
 {
   Action::State previous = get_state();
   Action::set_state(state);
-  on_state_change(this, previous);
+  on_state_change(*this, previous);
 }
 
 /** @brief returns a list of all CPUs that this action is using */
-std::list<Cpu*> CpuAction::cpus() {
+std::list<Cpu*> CpuAction::cpus() const
+{
   std::list<Cpu*> retlist;
   int llen = get_variable()->get_number_of_constraint();
 
   for (int i = 0; i < llen; i++) {
     /* Beware of composite actions: ptasks put links and cpus together */
     // extra pb: we cannot dynamic_cast from void*...
-    kernel::resource::Resource* resource =
-        static_cast<kernel::resource::Resource*>(get_variable()->get_constraint(i)->get_id());
+    Resource* resource = get_variable()->get_constraint(i)->get_id();
     Cpu* cpu           = dynamic_cast<Cpu*>(resource);
     if (cpu != nullptr)
       retlist.push_back(cpu);
@@ -204,6 +196,6 @@ std::list<Cpu*> CpuAction::cpus() {
 
   return retlist;
 }
-
-}
-}
+} // namespace resource
+} // namespace kernel
+} // namespace simgrid