gets recomputed anyway. In that case, you'd better not try to be cleaver with lazy and go for
a simple full update. */
};
-
- explicit Model(Model::UpdateAlgo algo);
+ Model() = default;
Model(const Model&) = delete;
Model& operator=(const Model&) = delete;
virtual ~Model();
bool is_update_lazy() const { return update_algorithm_ == UpdateAlgo::LAZY; }
+ Model* set_update_algorithm(UpdateAlgo algo);
/** @brief Get the set of [actions](@ref Action) in *inited* state */
Action::StateSet* get_inited_action_set() { return &inited_action_set_; }
}
private:
+ UpdateAlgo update_algorithm_ = UpdateAlgo::FULL;
std::unique_ptr<lmm::System> maxmin_system_;
- const UpdateAlgo update_algorithm_;
Action::StateSet inited_action_set_; /**< Created not started */
Action::StateSet started_action_set_; /**< Started not done */
Action::StateSet failed_action_set_; /**< Done with failure */
* Model *
*********/
-DiskModel::DiskModel() : Model(Model::UpdateAlgo::FULL)
+DiskModel::DiskModel()
{
- set_maxmin_system(new simgrid::kernel::lmm::System(true /* selective update */));
+ set_maxmin_system(new lmm::System(true /* selective update */));
}
/************
namespace kernel {
namespace resource {
-Model::Model(Model::UpdateAlgo algo) : update_algorithm_(algo) {}
Model::~Model() = default; // Don't move this declaration to the header, or it will break external projects such as SimGrid-FMI
+Model* Model::set_update_algorithm(Model::UpdateAlgo algo)
+{
+ update_algorithm_ = algo;
+ return this;
+}
+
Action::ModifiedSet* Model::get_modified_set() const
{
return maxmin_system_->modified_set_.get();
if (cpu_optim == "TI") {
cpu_model_vm = std::make_shared<simgrid::kernel::resource::CpuTiModel>();
} else {
- simgrid::kernel::resource::Model::UpdateAlgo algo = simgrid::kernel::resource::Model::UpdateAlgo::FULL;
- if (cpu_optim == "Lazy")
- algo = simgrid::kernel::resource::Model::UpdateAlgo::LAZY;
- cpu_model_vm = std::make_shared<simgrid::kernel::resource::CpuCas01Model>(algo);
+ cpu_model_vm = std::make_shared<simgrid::kernel::resource::CpuCas01Model>();
}
simgrid::kernel::EngineImpl::get_instance()->add_model(simgrid::kernel::resource::Model::Type::CPU_VM, cpu_model_vm,
true);
*/
class XBT_PRIVATE HostModel : public kernel::resource::Model {
public:
- HostModel() : Model(Model::UpdateAlgo::FULL) {}
-
virtual kernel::resource::Action* execute_parallel(const std::vector<s4u::Host*>& host_list,
const double* flops_amount, const double* bytes_amount,
double rate) = 0;
return;
}
- simgrid::kernel::resource::Model::UpdateAlgo algo;
- if (cpu_optim_opt == "Lazy")
- algo = simgrid::kernel::resource::Model::UpdateAlgo::LAZY;
- else
- algo = simgrid::kernel::resource::Model::UpdateAlgo::FULL;
-
- auto cpu_model_pm = std::make_shared<simgrid::kernel::resource::CpuCas01Model>(algo);
+ auto cpu_model_pm = std::make_shared<simgrid::kernel::resource::CpuCas01Model>();
simgrid::kernel::EngineImpl::get_instance()->add_model(simgrid::kernel::resource::Model::Type::CPU_PM, cpu_model_pm,
true);
simgrid::s4u::Engine::get_instance()->get_netzone_root()->get_impl()->set_cpu_pm_model(cpu_model_pm);
namespace kernel {
namespace resource {
-CpuCas01Model::CpuCas01Model(Model::UpdateAlgo algo) : CpuModel(algo)
+CpuCas01Model::CpuCas01Model()
{
+ if (config::get_value<std::string>("cpu/optim") == "Lazy")
+ set_update_algorithm(Model::UpdateAlgo::LAZY);
+
bool select = config::get_value<bool>("cpu/maxmin-selective-update");
if (is_update_lazy()) {
class CpuCas01Model : public CpuModel {
public:
- explicit CpuCas01Model(Model::UpdateAlgo algo);
+ CpuCas01Model();
CpuCas01Model(const CpuCas01Model&) = delete;
CpuCas01Model& operator=(const CpuCas01Model&) = delete;
simgrid::s4u::Engine::get_instance()->get_netzone_root()->get_impl()->set_cpu_pm_model(cpu_model_pm);
}
-CpuTiModel::CpuTiModel() : CpuModel(Model::UpdateAlgo::FULL) {}
-
Cpu* CpuTiModel::create_cpu(s4u::Host* host, const std::vector<double>& speed_per_pstate)
{
return (new CpuTi(host, speed_per_pstate))->set_model(this);
public:
static void create_pm_models(); // Make CPU PM model
- CpuTiModel();
+ CpuTiModel() = default;
CpuTiModel(const CpuTiModel&) = delete;
CpuTiModel& operator=(const CpuTiModel&) = delete;
Cpu* create_cpu(s4u::Host* host, const std::vector<double>& speed_per_pstate) override;
namespace resource {
NetworkCm02Model::NetworkCm02Model()
- : NetworkModel(config::get_value<std::string>("network/optim") == "Full" ? Model::UpdateAlgo::FULL
- : Model::UpdateAlgo::LAZY)
{
+ if (config::get_value<std::string>("network/optim") == "Lazy")
+ set_update_algorithm(Model::UpdateAlgo::LAZY);
+
std::string optim = config::get_value<std::string>("network/optim");
bool select = config::get_value<bool>("network/maxmin-selective-update");
namespace kernel {
namespace resource {
-NetworkConstantModel::NetworkConstantModel() : NetworkModel(Model::UpdateAlgo::FULL) {}
-
LinkImpl* NetworkConstantModel::create_link(const std::string& name, const std::vector<double>& /*bandwidth*/,
s4u::Link::SharingPolicy)
{
class NetworkConstantModel : public NetworkModel {
public:
- NetworkConstantModel();
Action* communicate(s4u::Host* src, s4u::Host* dst, double size, double rate) override;
double next_occurring_event(double now) override;
void update_actions_state(double now, double delta) override;
namespace kernel {
namespace resource {
-NetworkNS3Model::NetworkNS3Model() : NetworkModel(Model::UpdateAlgo::FULL)
+NetworkNS3Model::NetworkNS3Model()
{
xbt_assert(not sg_link_energy_is_inited(),
"LinkEnergy plugin and ns-3 network models are not compatible. Are you looking for Ecofen, maybe?");
simgrid::s4u::Engine::get_instance()->get_netzone_root()->get_impl()->set_cpu_pm_model(cpu_model);
}
-CpuL07Model::CpuL07Model(HostL07Model* hmodel, kernel::lmm::System* sys)
- : CpuModel(Model::UpdateAlgo::FULL), hostModel_(hmodel)
+CpuL07Model::CpuL07Model(HostL07Model* hmodel, kernel::lmm::System* sys) : hostModel_(hmodel)
{
set_maxmin_system(sys);
}
set_maxmin_system(nullptr);
}
-NetworkL07Model::NetworkL07Model(HostL07Model* hmodel, kernel::lmm::System* sys)
- : NetworkModel(Model::UpdateAlgo::FULL), hostModel_(hmodel)
+NetworkL07Model::NetworkL07Model(HostL07Model* hmodel, kernel::lmm::System* sys) : hostModel_(hmodel)
{
set_maxmin_system(sys);
loopback_ = NetworkL07Model::create_link(