Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
simplify writing in model setup + may fix issue with unit-tests
authorSUTER Frederic <frederic.suter@cc.in2p3.fr>
Mon, 20 Sep 2021 09:55:46 +0000 (11:55 +0200)
committerSUTER Frederic <frederic.suter@cc.in2p3.fr>
Mon, 20 Sep 2021 09:55:46 +0000 (11:55 +0200)
14 files changed:
src/kernel/EngineImpl.cpp
src/kernel/EngineImpl.hpp
src/kernel/actor/ActorImpl.cpp
src/s4u/s4u_Engine.cpp
src/surf/cpu_cas01.cpp
src/surf/cpu_ti.cpp
src/surf/disk_s19.cpp
src/surf/host_clm03.cpp
src/surf/network_cm02.cpp
src/surf/network_constant.cpp
src/surf/network_ib.cpp
src/surf/network_ns3.cpp
src/surf/network_smpi.cpp
src/surf/ptask_L07.cpp

index d79c21f..f38a4ab 100644 (file)
@@ -128,11 +128,6 @@ static void install_segvhandler()
 namespace simgrid {
 namespace kernel {
 
-EngineImpl::EngineImpl(int* argc, char** argv)
-{
-  EngineImpl::instance_ = this;
-}
-
 EngineImpl::~EngineImpl()
 {
   /* Since hosts_ is a std::map, the hosts are destroyed in the lexicographic order, which ensures that the output is
@@ -164,6 +159,9 @@ EngineImpl::~EngineImpl()
 
 void EngineImpl::initialize(int* argc, char** argv)
 {
+  xbt_assert(EngineImpl::instance_ == nullptr,
+             "It is currently forbidden to create more than one instance of kernel::EngineImpl");
+  EngineImpl::instance_ = this;
 #if SIMGRID_HAVE_MC
   // The communication initialization is done ASAP, as we need to get some init parameters from the MC for different
   // layers. But simix_global needs to be created, as we send the address of some of its fields to the MC that wants to
@@ -189,12 +187,11 @@ void EngineImpl::initialize(int* argc, char** argv)
   if (config::get_value<bool>("debug/clean-atexit"))
     atexit(shutdown);
 }
+
 void EngineImpl::shutdown()
 {
-  static bool already_cleaned_up = false;
-  if (already_cleaned_up)
-    return; // to avoid double cleaning by java and C
-  already_cleaned_up = true;
+  if (EngineImpl::instance_ == nullptr)
+    return;
   XBT_DEBUG("EngineImpl::shutdown() called. Simulation's over.");
   if (instance_->has_actors_to_run() && simgrid_get_clock() <= 0.0) {
     XBT_CRITICAL("   ");
index 3cd04d4..febb9db 100644 (file)
@@ -78,7 +78,7 @@ class EngineImpl {
   friend s4u::Engine;
 
 public:
-  explicit EngineImpl(int* argc, char** argv);
+  EngineImpl() = default;
 
   /* Currently, only one instance is allowed to exist. This is why you can't copy or move it */
 #ifndef DOXYGEN
@@ -137,6 +137,9 @@ public:
     else
       return res->second;
   }
+
+  routing::NetZoneImpl* get_netzone_root() const { return netzone_root_; }
+
   void add_daemon(actor::ActorImpl* d) { daemons_.insert(d); }
   void remove_daemon(actor::ActorImpl* d);
   void add_actor_to_run_list(actor::ActorImpl* actor);
index f50964b..93549a5 100644 (file)
@@ -234,7 +234,8 @@ void ActorImpl::exit()
 
 void ActorImpl::kill(ActorImpl* actor) const
 {
-  xbt_assert(not EngineImpl::get_instance()->is_maestro(actor), "Killing maestro is a rather bad idea");
+  auto* engine = EngineImpl::get_instance();
+  xbt_assert(not engine->is_maestro(actor), "Killing maestro is a rather bad idea");
   if (actor->finished_) {
     XBT_DEBUG("Ignoring request to kill actor %s@%s that is already dead", actor->get_cname(),
               actor->host_->get_cname());
@@ -249,7 +250,7 @@ void ActorImpl::kill(ActorImpl* actor) const
   if (actor == this) {
     XBT_DEBUG("Go on, this is a suicide,");
   } else
-    EngineImpl::get_instance()->add_actor_to_run_list(actor);
+    engine->add_actor_to_run_list(actor);
 }
 
 void ActorImpl::kill_all() const
@@ -518,7 +519,7 @@ void create_maestro(const std::function<void()>& code)
   }
 
   maestro->simcall_.issuer_ = maestro;
-  EngineImpl::get_instance()->set_maestro(maestro);
+  engine->set_maestro(maestro);
 }
 
 } // namespace actor
index 04f5166..f9d5e1a 100644 (file)
@@ -52,14 +52,14 @@ void Engine::initialize(int* argc, char** argv)
   kernel::actor::create_maestro(maestro_code);
 }
 
-Engine::Engine(std::string name) : pimpl(new kernel::EngineImpl(nullptr, nullptr))
+Engine::Engine(std::string name) : pimpl(new kernel::EngineImpl())
 {
   int argc   = 1;
   char* argv = &name[0];
   initialize(&argc, &argv);
 }
 
-Engine::Engine(int* argc, char** argv) : pimpl(new kernel::EngineImpl(argc, argv))
+Engine::Engine(int* argc, char** argv) : pimpl(new kernel::EngineImpl())
 {
   initialize(argc, argv);
 }
index b3b215b..47b5397 100644 (file)
@@ -46,8 +46,9 @@ void surf_cpu_model_init_Cas01()
   }
 
   auto cpu_model_pm = std::make_shared<simgrid::kernel::resource::CpuCas01Model>("Cpu_Cas01");
-  simgrid::kernel::EngineImpl::get_instance()->add_model(cpu_model_pm);
-  simgrid::s4u::Engine::get_instance()->get_netzone_root()->get_impl()->set_cpu_pm_model(cpu_model_pm);
+  auto* engine      = simgrid::kernel::EngineImpl::get_instance();
+  engine->add_model(cpu_model_pm);
+  engine->get_netzone_root()->set_cpu_pm_model(cpu_model_pm);
 }
 
 namespace simgrid {
index 7df0d78..d183dc3 100644 (file)
@@ -270,8 +270,9 @@ long CpuTiProfile::binary_search(const std::vector<double>& array, double a)
 void CpuTiModel::create_pm_models()
 {
   auto cpu_model_pm = std::make_shared<CpuTiModel>("Cpu_TI");
-  simgrid::kernel::EngineImpl::get_instance()->add_model(cpu_model_pm);
-  simgrid::s4u::Engine::get_instance()->get_netzone_root()->get_impl()->set_cpu_pm_model(cpu_model_pm);
+  auto* engine      = EngineImpl::get_instance();
+  engine->add_model(cpu_model_pm);
+  engine->get_netzone_root()->set_cpu_pm_model(cpu_model_pm);
 }
 
 CpuImpl* CpuTiModel::create_cpu(s4u::Host* host, const std::vector<double>& speed_per_pstate)
index 1686085..c1edbda 100644 (file)
@@ -23,8 +23,9 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(res_disk);
 void surf_disk_model_init_default()
 {
   auto disk_model = std::make_shared<simgrid::kernel::resource::DiskS19Model>("Disk");
-  simgrid::kernel::EngineImpl::get_instance()->add_model(disk_model);
-  simgrid::s4u::Engine::get_instance()->get_netzone_root()->get_impl()->set_disk_model(disk_model);
+  auto* engine    = simgrid::kernel::EngineImpl::get_instance();
+  engine->add_model(disk_model);
+  engine->get_netzone_root()->set_disk_model(disk_model);
 }
 
 namespace simgrid {
index 5e49c86..f58719d 100644 (file)
@@ -15,10 +15,11 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(res_host);
 
 void surf_host_model_init_current_default()
 {
-  auto host_model = std::make_shared<simgrid::surf::HostCLM03Model>("Host_CLM03");
   simgrid::config::set_default<bool>("network/crosstraffic", true);
-  simgrid::kernel::EngineImpl::get_instance()->add_model(host_model);
-  simgrid::s4u::Engine::get_instance()->get_netzone_root()->get_impl()->set_host_model(host_model);
+  auto host_model = std::make_shared<simgrid::surf::HostCLM03Model>("Host_CLM03");
+  auto* engine    = simgrid::kernel::EngineImpl::get_instance();
+  engine->add_model(host_model);
+  engine->get_netzone_root()->set_host_model(host_model);
   surf_cpu_model_init_Cas01();
   surf_network_model_init_LegrandVelho();
 }
@@ -26,8 +27,9 @@ void surf_host_model_init_current_default()
 void surf_host_model_init_compound()
 {
   auto host_model = std::make_shared<simgrid::surf::HostCLM03Model>("Host_CLM03");
-  simgrid::kernel::EngineImpl::get_instance()->add_model(host_model);
-  simgrid::s4u::Engine::get_instance()->get_netzone_root()->get_impl()->set_host_model(host_model);
+  auto* engine    = simgrid::kernel::EngineImpl::get_instance();
+  engine->add_model(host_model);
+  engine->get_netzone_root()->set_host_model(host_model);
 }
 
 namespace simgrid {
index 398a61b..753f2a6 100644 (file)
@@ -40,8 +40,9 @@ double sg_weight_S_parameter = 0.0; /* default value; can be set by model or fro
 void surf_network_model_init_LegrandVelho()
 {
   auto net_model = std::make_shared<simgrid::kernel::resource::NetworkCm02Model>("Network_LegrandVelho");
-  simgrid::kernel::EngineImpl::get_instance()->add_model(net_model);
-  simgrid::s4u::Engine::get_instance()->get_netzone_root()->get_impl()->set_network_model(net_model);
+  auto* engine   = simgrid::kernel::EngineImpl::get_instance();
+  engine->add_model(net_model);
+  engine->get_netzone_root()->set_network_model(net_model);
 
   simgrid::config::set_default<double>("network/latency-factor", 13.01);
   simgrid::config::set_default<double>("network/bandwidth-factor", 0.97);
@@ -66,8 +67,9 @@ void surf_network_model_init_CM02()
   simgrid::config::set_default<double>("network/weight-S", 0.0);
 
   auto net_model = std::make_shared<simgrid::kernel::resource::NetworkCm02Model>("Network_CM02");
-  simgrid::kernel::EngineImpl::get_instance()->add_model(net_model);
-  simgrid::s4u::Engine::get_instance()->get_netzone_root()->get_impl()->set_network_model(net_model);
+  auto* engine   = simgrid::kernel::EngineImpl::get_instance();
+  engine->add_model(net_model);
+  engine->get_netzone_root()->set_network_model(net_model);
 }
 
 namespace simgrid {
index 5bd7210..7d36bab 100644 (file)
@@ -18,8 +18,9 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(res_network);
 void surf_network_model_init_Constant()
 {
   auto net_model = std::make_shared<simgrid::kernel::resource::NetworkConstantModel>("Network_Constant");
-  simgrid::kernel::EngineImpl::get_instance()->add_model(net_model);
-  simgrid::s4u::Engine::get_instance()->get_netzone_root()->get_impl()->set_network_model(net_model);
+  auto* engine   = simgrid::kernel::EngineImpl::get_instance();
+  engine->add_model(net_model);
+  engine->get_netzone_root()->set_network_model(net_model);
 }
 
 namespace simgrid {
index c62ea55..47d7ef6 100644 (file)
@@ -35,8 +35,9 @@ void surf_network_model_init_IB()
   using simgrid::kernel::resource::NetworkIBModel;
 
   auto net_model = std::make_shared<NetworkIBModel>("Network_IB");
-  simgrid::kernel::EngineImpl::get_instance()->add_model(net_model);
-  simgrid::s4u::Engine::get_instance()->get_netzone_root()->get_impl()->set_network_model(net_model);
+  auto* engine   = simgrid::kernel::EngineImpl::get_instance();
+  engine->add_model(net_model);
+  engine->get_netzone_root()->set_network_model(net_model);
 
   simgrid::s4u::Link::on_communication_state_change.connect(NetworkIBModel::IB_action_state_changed_callback);
   simgrid::s4u::Link::on_communicate.connect(NetworkIBModel::IB_action_init_callback);
index cc89335..1a80fe6 100644 (file)
@@ -275,8 +275,9 @@ static void routeCreation_cb(bool symmetrical, simgrid::kernel::routing::NetPoin
 void surf_network_model_init_NS3()
 {
   auto net_model = std::make_shared<simgrid::kernel::resource::NetworkNS3Model>("NS3 network model");
-  simgrid::kernel::EngineImpl::get_instance()->add_model(net_model);
-  simgrid::s4u::Engine::get_instance()->get_netzone_root()->get_impl()->set_network_model(net_model);
+  auto* engine   = simgrid::kernel::EngineImpl::get_instance();
+  engine->add_model(net_model);
+  engine->get_netzone_root()->set_network_model(net_model);
 }
 
 static simgrid::config::Flag<std::string>
index 6dd0e42..4fcd646 100644 (file)
@@ -33,8 +33,9 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(res_network);
 void surf_network_model_init_SMPI()
 {
   auto net_model = std::make_shared<simgrid::kernel::resource::NetworkSmpiModel>("Network_SMPI");
-  simgrid::kernel::EngineImpl::get_instance()->add_model(net_model);
-  simgrid::s4u::Engine::get_instance()->get_netzone_root()->get_impl()->set_network_model(net_model);
+  auto* engine   = simgrid::kernel::EngineImpl::get_instance();
+  engine->add_model(net_model);
+  engine->get_netzone_root()->set_network_model(net_model);
 
   simgrid::config::set_default<double>("network/weight-S", 8775);
 }
index 5af0e52..cc27a24 100644 (file)
@@ -24,8 +24,9 @@ void surf_host_model_init_ptask_L07()
   XBT_CINFO(xbt_cfg, "Switching to the L07 model to handle parallel tasks.");
 
   auto host_model = std::make_shared<simgrid::surf::HostL07Model>("Host_Ptask");
-  simgrid::kernel::EngineImpl::get_instance()->add_model(host_model);
-  simgrid::s4u::Engine::get_instance()->get_netzone_root()->get_impl()->set_host_model(host_model);
+  auto* engine    = simgrid::kernel::EngineImpl::get_instance();
+  engine->add_model(host_model);
+  engine->get_netzone_root()->set_host_model(host_model);
 }
 
 namespace simgrid {
@@ -39,11 +40,11 @@ HostL07Model::HostL07Model(const std::string& name) : HostModel(name)
   auto net_model = std::make_shared<NetworkL07Model>("Network_Ptask", this, maxmin_system);
   auto engine    = simgrid::kernel::EngineImpl::get_instance();
   engine->add_model(net_model);
-  simgrid::s4u::Engine::get_instance()->get_netzone_root()->get_impl()->set_network_model(net_model);
+  engine->get_netzone_root()->set_network_model(net_model);
 
   auto cpu_model = std::make_shared<CpuL07Model>("Cpu_Ptask", this, maxmin_system);
   engine->add_model(cpu_model);
-  simgrid::s4u::Engine::get_instance()->get_netzone_root()->get_impl()->set_cpu_pm_model(cpu_model);
+  engine->get_netzone_root()->set_cpu_pm_model(cpu_model);
 }
 
 CpuL07Model::CpuL07Model(const std::string& name, HostL07Model* hmodel, kernel::lmm::System* sys)