s4u::NetZone* get_iface() { return &piface_; }
/** @brief Make a host within that NetZone */
- simgrid::s4u::Host* create_host(const char* name, std::vector<double>* speed_per_pstate, int core_count,
+ simgrid::s4u::Host* create_host(const char* name, const std::vector<double>& speed_per_pstate, int core_count,
std::map<std::string, std::string>* props);
/** @brief Creates a new route in this NetZone */
virtual void add_bypass_route(NetPoint* src, NetPoint* dst, NetPoint* gw_src, NetPoint* gw_dst,
return count;
}
-simgrid::s4u::Host* NetZoneImpl::create_host(const char* name, std::vector<double>* speedPerPstate, int coreAmount,
- std::map<std::string, std::string>* props)
+simgrid::s4u::Host* NetZoneImpl::create_host(const char* name, const std::vector<double>& speed_per_pstate,
+ int coreAmount, std::map<std::string, std::string>* props)
{
simgrid::s4u::Host* res = new simgrid::s4u::Host(name);
res->pimpl_netpoint = new NetPoint(name, NetPoint::Type::Host, this);
- surf_cpu_model_pm->create_cpu(res, speedPerPstate, coreAmount);
+ surf_cpu_model_pm->create_cpu(res, speed_per_pstate, coreAmount);
if (props != nullptr)
for (auto const& kv : *props)
for (int i = 0; i < physical_host->get_pstate_count(); i++)
speeds.push_back(physical_host->get_pstate_speed(i));
- surf_cpu_model_vm->create_cpu(this, &speeds, core_amount);
+ surf_cpu_model_vm->create_cpu(this, speeds, core_amount);
if (physical_host->get_pstate() != 0)
set_pstate(physical_host->get_pstate());
}
surf_cpu_model_pm = nullptr;
}
-Cpu* CpuCas01Model::create_cpu(simgrid::s4u::Host* host, std::vector<double>* speed_per_pstate, int core)
+Cpu* CpuCas01Model::create_cpu(simgrid::s4u::Host* host, const std::vector<double>& speed_per_pstate, int core)
{
return new CpuCas01(this, host, speed_per_pstate, core);
}
/************
* Resource *
************/
-CpuCas01::CpuCas01(CpuCas01Model* model, simgrid::s4u::Host* host, std::vector<double>* speedPerPstate, int core)
- : Cpu(model, host, model->get_maxmin_system()->constraint_new(this, core * speedPerPstate->front()), speedPerPstate,
- core)
+CpuCas01::CpuCas01(CpuCas01Model* model, simgrid::s4u::Host* host, const std::vector<double>& speed_per_pstate,
+ int core)
+ : Cpu(model, host, model->get_maxmin_system()->constraint_new(this, core * speed_per_pstate.front()),
+ speed_per_pstate, core)
{
}
CpuCas01Model& operator=(const CpuCas01Model&) = delete;
~CpuCas01Model() override;
- Cpu* create_cpu(simgrid::s4u::Host* host, std::vector<double>* speed_per_pstate, int core) override;
+ Cpu* create_cpu(simgrid::s4u::Host* host, const std::vector<double>& speed_per_pstate, int core) override;
};
/************
class CpuCas01 : public Cpu {
public:
- CpuCas01(CpuCas01Model* model, simgrid::s4u::Host* host, std::vector<double>* speed_per_pstate, int core);
+ CpuCas01(CpuCas01Model* model, simgrid::s4u::Host* host, const std::vector<double>& speed_per_pstate, int core);
CpuCas01(const CpuCas01&) = delete;
CpuCas01& operator=(const CpuCas01&) = delete;
~CpuCas01() override;
/************
* 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(kernel::resource::Model* model, simgrid::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)
+ 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();
}
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)");
return speed_per_pstate_[pstate_index];
}
-double Cpu::get_speed(double load)
+double Cpu::get_speed(double load) const
{
return load * speed_.peak;
}
* This ignores any potential external load coming from a trace.
* @param core The number of core of this Cpu
*/
- virtual Cpu* create_cpu(simgrid::s4u::Host* host, std::vector<double>* speed_per_pstate, int core) = 0;
+ virtual Cpu* create_cpu(simgrid::s4u::Host* host, const std::vector<double>& speed_per_pstate, int core) = 0;
void update_actions_state_lazy(double now, double delta) override;
void update_actions_state_full(double now, double delta) override;
* @param speedPerPstate Processor speed (in flop per second) for each pstate
* @param core The number of core of this Cpu
*/
- Cpu(simgrid::kernel::resource::Model * model, simgrid::s4u::Host * host, kernel::lmm::Constraint * constraint,
- std::vector<double> * speedPerPstate, int core);
+ Cpu(simgrid::kernel::resource::Model* model, simgrid::s4u::Host* host, kernel::lmm::Constraint* constraint,
+ const std::vector<double>& speed_per_pstate, int core);
/**
* @brief Cpu constructor
* @param speedPerPstate Processor speed (in flop per second) for each pstate
* @param core The number of core of this Cpu
*/
- Cpu(simgrid::kernel::resource::Model * model, simgrid::s4u::Host * host, std::vector<double> * speedPerPstate,
+ Cpu(simgrid::kernel::resource::Model* model, simgrid::s4u::Host* host, const std::vector<double>& speed_per_pstate,
int core);
Cpu(const Cpu&) = delete;
Cpu& operator=(const Cpu&) = delete;
- ~Cpu();
/**
* @brief Execute some quantity of computation
*
* If you want to know the amount of flops currently delivered, use load = get_load()*get_speed_ratio()
*/
- virtual double get_speed(double load);
+ virtual double get_speed(double load) const;
protected:
/** @brief Take speed changes (either load or max) into account */
virtual double get_speed_ratio();
/** @brief Get the peak processor speed (in flops/s), at the specified pstate */
- virtual double get_pstate_peak_speed(int pstate_index);
+ virtual double get_pstate_peak_speed(int pstate_index) const;
- virtual int get_pstate_count();
+ virtual int get_pstate_count() const;
virtual void set_pstate(int pstate_index);
- virtual int get_pstate();
+ virtual int get_pstate() const;
simgrid::s4u::Host* get_host() { return host_; }
simgrid::s4u::Host* host_;
int pstate_ = 0; /*< Current pstate (index in the speed_per_pstate_)*/
- std::vector<double> speed_per_pstate_; /*< List of supported CPU capacities (pstate related) */
+ const std::vector<double> speed_per_pstate_; /*< List of supported CPU capacities (pstate related) */
public:
/*< @brief Setup the trace file with availability events (peak speed changes due to external load).
surf_cpu_model_pm = nullptr;
}
-Cpu* CpuTiModel::create_cpu(simgrid::s4u::Host* host, std::vector<double>* speed_per_pstate, int core)
+Cpu* CpuTiModel::create_cpu(simgrid::s4u::Host* host, const std::vector<double>& speed_per_pstate, int core)
{
return new CpuTi(this, host, speed_per_pstate, core);
}
/************
* Resource *
************/
-CpuTi::CpuTi(CpuTiModel *model, simgrid::s4u::Host *host, std::vector<double> *speedPerPstate, int core)
- : Cpu(model, host, speedPerPstate, core)
+CpuTi::CpuTi(CpuTiModel* model, simgrid::s4u::Host* host, const std::vector<double>& speed_per_pstate, int core)
+ : Cpu(model, host, speed_per_pstate, core)
{
xbt_assert(core == 1, "Multi-core not handled by this model yet");
- speed_.peak = speedPerPstate->front();
+ speed_.peak = speed_per_pstate.front();
XBT_DEBUG("CPU create: peak=%f", speed_.peak);
speed_integrated_trace_ = new CpuTiTmgr(nullptr, 1 /*scale*/);
************/
class CpuTi : public Cpu {
public:
- CpuTi(CpuTiModel* model, simgrid::s4u::Host* host, std::vector<double>* speed_per_pstate, int core);
+ CpuTi(CpuTiModel* model, simgrid::s4u::Host* host, const std::vector<double>& speed_per_pstate, int core);
CpuTi(const CpuTi&) = delete;
CpuTi& operator&(const CpuTi&) = delete;
~CpuTi() override;
CpuTiModel(const CpuTiModel&) = delete;
CpuTiModel& operator=(const CpuTiModel&) = delete;
~CpuTiModel() override;
- Cpu* create_cpu(simgrid::s4u::Host* host, std::vector<double>* speed_per_pstate, int core) override;
+ Cpu* create_cpu(simgrid::s4u::Host* host, const std::vector<double>& speed_per_pstate, int core) override;
double next_occuring_event(double now) override;
void update_actions_state(double now, double delta) override;
return res;
}
-Cpu* CpuL07Model::create_cpu(simgrid::s4u::Host* host, std::vector<double>* speed_per_pstate, int core)
+Cpu* CpuL07Model::create_cpu(simgrid::s4u::Host* host, const std::vector<double>& speed_per_pstate, int core)
{
return new CpuL07(this, host, speed_per_pstate, core);
}
* Resource *
************/
-CpuL07::CpuL07(CpuL07Model* model, simgrid::s4u::Host* host, std::vector<double>* speed_per_pstate, int core)
- : Cpu(model, host, model->get_maxmin_system()->constraint_new(this, speed_per_pstate->front()), speed_per_pstate,
+CpuL07::CpuL07(CpuL07Model* model, simgrid::s4u::Host* host, const std::vector<double>& speed_per_pstate, int core)
+ : Cpu(model, host, model->get_maxmin_system()->constraint_new(this, speed_per_pstate.front()), speed_per_pstate,
core)
{
}
CpuL07Model& operator=(const CpuL07Model&) = delete;
~CpuL07Model();
- Cpu* create_cpu(simgrid::s4u::Host* host, std::vector<double>* speed_per_pstate, int core) override;
+ Cpu* create_cpu(simgrid::s4u::Host* host, const std::vector<double>& speed_per_pstate, int core) override;
HostL07Model *hostModel_;
};
class CpuL07 : public Cpu {
public:
- CpuL07(CpuL07Model* model, s4u::Host* host, std::vector<double>* speed_per_pstate, int core);
+ CpuL07(CpuL07Model* model, s4u::Host* host, const std::vector<double>& speed_per_pstate, int core);
CpuL07(const CpuL07&) = delete;
CpuL07& operator=(const CpuL07&) = delete;
~CpuL07() override;
}
simgrid::s4u::Host* host =
- routing_get_current()->create_host(args->id, &args->speed_per_pstate, args->core_amount, &props);
+ routing_get_current()->create_host(args->id, args->speed_per_pstate, args->core_amount, &props);
host->pimpl_->storage_ = mount_list;
mount_list.clear();
simgrid::kernel::routing::VivaldiZone* as = dynamic_cast<simgrid::kernel::routing::VivaldiZone*>(current_routing);
xbt_assert(as, "<peer> tag can only be used in Vivaldi netzones.");
- std::vector<double> speedPerPstate;
- speedPerPstate.push_back(peer->speed);
- simgrid::s4u::Host* host = as->create_host(peer->id.c_str(), &speedPerPstate, 1, nullptr);
+ std::vector<double> speed_per_pstate;
+ speed_per_pstate.push_back(peer->speed);
+ simgrid::s4u::Host* host = as->create_host(peer->id.c_str(), speed_per_pstate, 1, nullptr);
as->set_peer_link(host->pimpl_netpoint, peer->bw_in, peer->bw_out, peer->coord);