Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
make update_algorithm optional in model creation. Full is default
authorSUTER Frederic <frederic.suter@cc.in2p3.fr>
Wed, 17 Mar 2021 09:02:08 +0000 (10:02 +0100)
committerSUTER Frederic <frederic.suter@cc.in2p3.fr>
Wed, 17 Mar 2021 09:33:08 +0000 (10:33 +0100)
14 files changed:
include/simgrid/kernel/resource/Model.hpp
src/kernel/resource/DiskImpl.cpp
src/kernel/resource/Model.cpp
src/plugins/vm/VirtualMachineImpl.cpp
src/surf/HostImpl.hpp
src/surf/cpu_cas01.cpp
src/surf/cpu_cas01.hpp
src/surf/cpu_ti.cpp
src/surf/cpu_ti.hpp
src/surf/network_cm02.cpp
src/surf/network_constant.cpp
src/surf/network_constant.hpp
src/surf/network_ns3.cpp
src/surf/ptask_L07.cpp

index 72617af..a2ba0c3 100644 (file)
@@ -38,14 +38,14 @@ public:
                    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_; }
@@ -136,8 +136,8 @@ public:
   }
 
 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 */
index f8132f3..42676d9 100644 (file)
@@ -19,9 +19,9 @@ namespace resource {
  * 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 */));
 }
 
 /************
index b02fe64..c9058be 100644 (file)
@@ -12,9 +12,14 @@ namespace simgrid {
 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();
index c5e65c6..1d668d7 100644 (file)
@@ -24,10 +24,7 @@ void surf_vm_model_init_HL13()
   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);
index b7e70d6..aaf60f2 100644 (file)
@@ -27,8 +27,6 @@ namespace surf {
  */
 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;
index 957c474..8570cff 100644 (file)
@@ -44,13 +44,7 @@ void surf_cpu_model_init_Cas01()
     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);
@@ -60,8 +54,11 @@ namespace simgrid {
 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()) {
index 4c42e85..ee4ed16 100644 (file)
@@ -27,7 +27,7 @@ class XBT_PRIVATE CpuCas01Action;
 
 class CpuCas01Model : public CpuModel {
 public:
-  explicit CpuCas01Model(Model::UpdateAlgo algo);
+  CpuCas01Model();
   CpuCas01Model(const CpuCas01Model&) = delete;
   CpuCas01Model& operator=(const CpuCas01Model&) = delete;
 
index 3c91c3e..bb70aef 100644 (file)
@@ -276,8 +276,6 @@ void CpuTiModel::create_pm_models()
   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);
index e50d877..48178a1 100644 (file)
@@ -142,7 +142,7 @@ class CpuTiModel : public CpuModel {
 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;
index a392cd3..f70895c 100644 (file)
@@ -77,9 +77,10 @@ namespace kernel {
 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");
 
index ba728d4..40db132 100644 (file)
@@ -27,8 +27,6 @@ namespace simgrid {
 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)
 {
index 751b225..4be06bc 100644 (file)
@@ -16,7 +16,6 @@ namespace resource {
 
 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;
index cba54fc..2badf58 100644 (file)
@@ -290,7 +290,7 @@ namespace simgrid {
 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?");
index d735582..14fb47d 100644 (file)
@@ -47,8 +47,7 @@ HostL07Model::HostL07Model() : HostModel()
   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);
 }
@@ -58,8 +57,7 @@ CpuL07Model::~CpuL07Model()
   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(