X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0fa053f89a0b5f34a050f4790925d9d63ac11073..19e1048a7009c4144b0f361ad85fb9dff44761ea:/src/surf/ptask_L07.hpp diff --git a/src/surf/ptask_L07.hpp b/src/surf/ptask_L07.hpp index e0a8ae9b4c..d211954c7f 100644 --- a/src/surf/ptask_L07.hpp +++ b/src/surf/ptask_L07.hpp @@ -1,12 +1,12 @@ -/* Copyright (c) 2013-2018. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2013-2021. 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/surf/HostImpl.hpp" #include #include #include -#include "src/surf/HostImpl.hpp" #ifndef HOST_L07_HPP_ #define HOST_L07_HPP_ @@ -35,93 +35,122 @@ class XBT_PRIVATE L07Action; *********/ class HostL07Model : public HostModel { public: - HostL07Model(); - ~HostL07Model(); + explicit HostL07Model(const std::string& name); + HostL07Model(const HostL07Model&) = delete; + HostL07Model& operator=(const HostL07Model&) = delete; - double next_occuring_event(double now) override; + double next_occurring_event(double now) override; void update_actions_state(double now, double delta) override; - kernel::resource::Action* execute_parallel(int host_nb, sg_host_t* host_list, double* flops_amount, - double* bytes_amount, double rate) override; + kernel::resource::CpuAction* execute_parallel(const std::vector& host_list, const double* flops_amount, + const double* bytes_amount, double rate) override; }; -class CpuL07Model : public CpuModel { +class CpuL07Model : public kernel::resource::CpuModel { public: - CpuL07Model(HostL07Model* hmodel, kernel::lmm::System* sys); - ~CpuL07Model(); - - Cpu *createCpu(simgrid::s4u::Host *host, std::vector *speedPerPstate, int core) override; - HostL07Model *hostModel_; + CpuL07Model(const std::string& name, HostL07Model* hmodel, kernel::lmm::System* sys); + CpuL07Model(const CpuL07Model&) = delete; + CpuL07Model& operator=(const CpuL07Model&) = delete; + ~CpuL07Model() override; + void update_actions_state(double /*now*/, double /*delta*/) override{ + /* this action is done by HostL07Model which shares the LMM system with the CPU model + * Overriding to an empty function here allows us to handle the Cpu07Model as a regular + * method in surf_presolve */ + }; + + kernel::resource::CpuImpl* create_cpu(s4u::Host* host, const std::vector& speed_per_pstate) override; + HostL07Model* hostModel_; }; class NetworkL07Model : public kernel::resource::NetworkModel { public: - NetworkL07Model(HostL07Model* hmodel, kernel::lmm::System* sys); - ~NetworkL07Model(); - kernel::resource::LinkImpl* createLink(const std::string& name, double bandwidth, double latency, - e_surf_link_sharing_policy_t policy) override; + NetworkL07Model(const std::string& name, HostL07Model* hmodel, kernel::lmm::System* sys); + NetworkL07Model(const NetworkL07Model&) = delete; + NetworkL07Model& operator=(const NetworkL07Model&) = delete; + ~NetworkL07Model() override; + kernel::resource::LinkImpl* create_link(const std::string& name, const std::vector& bandwidths) final; + kernel::resource::LinkImpl* create_wifi_link(const std::string& name, const std::vector& bandwidths) override; kernel::resource::Action* communicate(s4u::Host* src, s4u::Host* dst, double size, double rate) override; + void update_actions_state(double /*now*/, double /*delta*/) override{ + /* this action is done by HostL07Model which shares the LMM system with the CPU model + * Overriding to an empty function here allows us to handle the Cpu07Model as a regular + * method in surf_presolve */ + }; - HostL07Model *hostModel_; + HostL07Model* hostModel_; }; /************ * Resource * ************/ -class CpuL07 : public Cpu { +class CpuL07 : public kernel::resource::CpuImpl { public: - CpuL07(CpuL07Model *model, simgrid::s4u::Host *host, std::vector * speedPerPstate, int core); - ~CpuL07() override; - bool is_used() override; - void apply_event(tmgr_trace_event_t event, double value) override; - kernel::resource::Action* execution_start(double size) override; - simgrid::kernel::resource::Action* execution_start(double size, int requestedCores) override + using kernel::resource::CpuImpl::CpuImpl; + CpuL07(const CpuL07&) = delete; + CpuL07& operator=(const CpuL07&) = delete; + + bool is_used() const override; + void apply_event(kernel::profile::Event* event, double value) override; + kernel::resource::CpuAction* execution_start(double size) override; + kernel::resource::CpuAction* execution_start(double, int) override { THROW_UNIMPLEMENTED; return nullptr; } - kernel::resource::Action* sleep(double duration) override; + kernel::resource::CpuAction* sleep(double duration) override; protected: - void onSpeedChange() override; + void on_speed_change() override; }; class LinkL07 : public kernel::resource::LinkImpl { public: - LinkL07(NetworkL07Model* model, const std::string& name, double bandwidth, double latency, - e_surf_link_sharing_policy_t policy); + LinkL07(const std::string& name, double bandwidth, kernel::lmm::System* system); + LinkL07(const LinkL07&) = delete; + LinkL07& operator=(const LinkL07&) = delete; ~LinkL07() override; - bool is_used() override; - void apply_event(tmgr_trace_event_t event, double value) override; - void setBandwidth(double value) override; - void setLatency(double value) override; + bool is_used() const override; + void apply_event(kernel::profile::Event* event, double value) override; + void set_bandwidth(double value) override; + void set_latency(double value) override; }; /********** * Action * **********/ -class L07Action : public CpuAction { - friend Action *CpuL07::execution_start(double size); - friend Action *CpuL07::sleep(double duration); - friend Action* HostL07Model::execute_parallel(int host_nb, sg_host_t* host_list, double* flops_amount, - double* bytes_amount, double rate); +class L07Action : public kernel::resource::CpuAction { + std::vector hostList_; + bool free_arrays_ = false; // By default, computationAmount_ and friends are freed by caller. But not for sequential + // exec and regular comms + const double* computationAmount_; /* pointer to the data that lives in s4u action -- do not free unless if + * free_arrays */ + const double* communicationAmount_; /* pointer to the data that lives in s4u action -- do not free unless if + * free_arrays */ + double latency_; + double rate_; + + friend CpuAction* CpuL07::execution_start(double size); + friend CpuAction* CpuL07::sleep(double duration); + friend CpuAction* HostL07Model::execute_parallel(const std::vector& host_list, const double* flops_amount, + const double* bytes_amount, double rate); + friend Action* NetworkL07Model::communicate(s4u::Host* src, s4u::Host* dst, double size, double rate); public: - L07Action(kernel::resource::Model* model, int host_nb, sg_host_t* host_list, double* flops_amount, - double* bytes_amount, double rate); - ~L07Action(); + L07Action() = delete; + L07Action(kernel::resource::Model* model, const std::vector& host_list, const double* flops_amount, + const double* bytes_amount, double rate); + L07Action(const L07Action&) = delete; + L07Action& operator=(const L07Action&) = delete; + ~L07Action() override; void updateBound(); - - std::vector* hostList_ = new std::vector(); - double *computationAmount_; - double *communicationAmount_; - double latency_; - double rate_; + double get_latency() const { return latency_; } + void set_latency(double latency) { latency_ = latency; } + void update_latency(double delta, double precision) { double_update(&latency_, delta, precision); } }; -} -} +} // namespace surf +} // namespace simgrid #endif /* HOST_L07_HPP_ */