Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Getting rid off surf_network_model global
authorBruno Donassolo <bruno.donassolo@inria.fr>
Wed, 3 Mar 2021 10:43:23 +0000 (11:43 +0100)
committerBruno Donassolo <bruno.donassolo@inria.fr>
Tue, 9 Mar 2021 14:17:12 +0000 (15:17 +0100)
Adapt network model initialization to remove surf_network_model
occurrences.

src/surf/host_clm03.cpp
src/surf/network_cm02.cpp
src/surf/network_constant.cpp
src/surf/network_ib.cpp
src/surf/network_interface.cpp
src/surf/network_interface.hpp
src/surf/network_ns3.cpp
src/surf/network_smpi.cpp
src/surf/ptask_L07.cpp
src/surf/ptask_L07.hpp
src/surf/sg_platf.cpp

index de2d979..340dc2a 100644 (file)
@@ -21,8 +21,10 @@ void surf_host_model_init_current_default()
 void surf_host_model_init_compound()
 {
   xbt_assert(surf_cpu_model_pm, "No CPU model defined yet!");
-  xbt_assert(surf_network_model, "No network model defined yet!");
-  surf_host_model = new simgrid::surf::HostCLM03Model();
+  /* FIXME[donassolo]: this smells bad, but works
+   * (the constructor saves its pointer in all_existing_models and models_by_type :O).
+   * We need a manager for these models */
+  new simgrid::surf::HostCLM03Model();
 }
 
 namespace simgrid {
index aa1a9c0..5472751 100644 (file)
@@ -36,9 +36,10 @@ double sg_weight_S_parameter = 0.0; /* default value; can be set by model or fro
 /*  } */
 void surf_network_model_init_LegrandVelho()
 {
-  xbt_assert(surf_network_model == nullptr, "Cannot set the network model twice");
-
-  surf_network_model = new simgrid::kernel::resource::NetworkCm02Model();
+  /* FIXME[donassolo]: this smells bad, but works
+   * (the constructor saves its pointer in all_existing_models and models_by_type :O).
+   * We need a manager for these models */
+  new simgrid::kernel::resource::NetworkCm02Model();
 
   simgrid::config::set_default<double>("network/latency-factor", 13.01);
   simgrid::config::set_default<double>("network/bandwidth-factor", 0.97);
@@ -58,13 +59,14 @@ void surf_network_model_init_LegrandVelho()
 /* } */
 void surf_network_model_init_CM02()
 {
-  xbt_assert(surf_network_model == nullptr, "Cannot set the network model twice");
-
   simgrid::config::set_default<double>("network/latency-factor", 1.0);
   simgrid::config::set_default<double>("network/bandwidth-factor", 1.0);
   simgrid::config::set_default<double>("network/weight-S", 0.0);
 
-  surf_network_model = new simgrid::kernel::resource::NetworkCm02Model();
+  /* FIXME[donassolo]: this smells bad, but works
+   * (the constructor saves its pointer in all_existing_models and models_by_type :O).
+   * We need a manager for these models */
+  new simgrid::kernel::resource::NetworkCm02Model();
 }
 
 namespace simgrid {
index 7c07560..59e4c81 100644 (file)
@@ -14,8 +14,10 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(res_network);
  *********/
 void surf_network_model_init_Constant()
 {
-  xbt_assert(surf_network_model == nullptr);
-  surf_network_model = new simgrid::kernel::resource::NetworkConstantModel();
+  /* FIXME[donassolo]: this smells bad, but works
+   * (the constructor saves its pointer in all_existing_models and models_by_type :O).
+   * We need a manager for these models */
+  new simgrid::kernel::resource::NetworkConstantModel();
 }
 
 namespace simgrid {
index f04b3fb..1fda88f 100644 (file)
@@ -68,9 +68,10 @@ static void IB_action_init_callback(simgrid::kernel::resource::NetworkAction& ac
 /*  } */
 void surf_network_model_init_IB()
 {
-  xbt_assert(surf_network_model == nullptr, "Cannot set the network model twice");
-
-  surf_network_model = new simgrid::kernel::resource::NetworkIBModel();
+  /* FIXME[donassolo]: this smells bad, but works
+   * (the constructor saves its pointer in all_existing_models and models_by_type :O).
+   * We need a manager for these models */
+  new simgrid::kernel::resource::NetworkIBModel();
   simgrid::s4u::Link::on_communication_state_change.connect(IB_action_state_changed_callback);
   simgrid::s4u::Link::on_communicate.connect(IB_action_init_callback);
   simgrid::s4u::Host::on_creation.connect(IB_create_host_callback);
index f33fe69..359e820 100644 (file)
@@ -19,8 +19,6 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(res_network, ker_resource, "Network resources, t
  * Model *
  *********/
 
-simgrid::kernel::resource::NetworkModel* surf_network_model = nullptr;
-
 namespace simgrid {
 namespace kernel {
 namespace resource {
index a109c14..ea4880a 100644 (file)
@@ -210,11 +210,6 @@ public:
 } // namespace kernel
 } // namespace simgrid
 
-/** @ingroup SURF_models
- *  @brief The network model
- */
-XBT_PUBLIC_DATA simgrid::kernel::resource::NetworkModel* surf_network_model;
-
 #endif /* SURF_NETWORK_INTERFACE_HPP_ */
 
 
index 38c3c37..7320bf5 100644 (file)
@@ -258,9 +258,10 @@ static void routeCreation_cb(bool symmetrical, simgrid::kernel::routing::NetPoin
  *********/
 void surf_network_model_init_NS3()
 {
-  xbt_assert(surf_network_model == nullptr, "Cannot set the network model twice");
-
-  surf_network_model = new simgrid::kernel::resource::NetworkNS3Model();
+  /* FIXME[donassolo]: this smells bad, but works
+   * (the constructor saves its pointer in all_existing_models and models_by_type :O).
+   * We need a manager for these models */
+  new simgrid::kernel::resource::NetworkNS3Model();
 }
 
 static simgrid::config::Flag<std::string>
index 3ec527e..7410aa2 100644 (file)
@@ -31,9 +31,10 @@ std::vector<s_smpi_factor_t> smpi_lat_factor;
 /*  } */
 void surf_network_model_init_SMPI()
 {
-  if (surf_network_model)
-    return;
-  surf_network_model = new simgrid::kernel::resource::NetworkSmpiModel();
+  /* FIXME[donassolo]: this smells bad, but works
+   * (the constructor saves its pointer in all_existing_models and models_by_type :O).
+   * We need a manager for these models */
+  new simgrid::kernel::resource::NetworkSmpiModel();
 
   simgrid::config::set_default<double>("network/weight-S", 8775);
 }
index 1c45a5d..f0bf356 100644 (file)
@@ -20,7 +20,6 @@ void surf_host_model_init_ptask_L07()
 {
   XBT_CINFO(xbt_cfg, "Switching to the L07 model to handle parallel tasks.");
   xbt_assert(not surf_cpu_model_pm, "Cannot switch to ptasks: CPU model already defined");
-  xbt_assert(not surf_network_model, "Cannot switch to ptasks: network model already defined");
 
   surf_host_model = new simgrid::surf::HostL07Model();
   all_existing_models.push_back(surf_host_model);
@@ -34,15 +33,13 @@ HostL07Model::HostL07Model() : HostModel()
 {
   auto* maxmin_system = new simgrid::kernel::lmm::FairBottleneck(true /* selective update */);
   set_maxmin_system(maxmin_system);
-  surf_network_model = new NetworkL07Model(this, maxmin_system);
-  surf_cpu_model_pm  = new CpuL07Model(this, maxmin_system);
+  network_model_ = std::make_unique<NetworkL07Model>(this, maxmin_system);
+  models_by_type[simgrid::kernel::resource::Model::Type::NETWORK].push_back(network_model_.get());
+  cpu_model_pm_     = std::make_unique<CpuL07Model>(this, maxmin_system);
+  surf_cpu_model_pm = cpu_model_pm_.get();
 }
 
-HostL07Model::~HostL07Model()
-{
-  delete surf_network_model;
-  delete surf_cpu_model_pm;
-}
+HostL07Model::~HostL07Model() {}
 
 CpuL07Model::CpuL07Model(HostL07Model* hmodel, kernel::lmm::System* sys)
     : CpuModel(Model::UpdateAlgo::FULL), hostModel_(hmodel)
index a7ce954..adcc812 100644 (file)
@@ -44,6 +44,10 @@ public:
   void update_actions_state(double now, double delta) override;
   kernel::resource::CpuAction* execute_parallel(const std::vector<s4u::Host*>& host_list, const double* flops_amount,
                                                 const double* bytes_amount, double rate) override;
+
+private:
+  std::unique_ptr<NetworkL07Model> network_model_;
+  std::unique_ptr<CpuL07Model> cpu_model_pm_;
 };
 
 class CpuL07Model : public kernel::resource::CpuModel {
index 9066f98..fe17a3c 100644 (file)
@@ -514,7 +514,10 @@ simgrid::kernel::routing::NetZoneImpl* sg_platf_new_Zone_begin(const simgrid::ke
   /* search the routing model */
   simgrid::kernel::routing::NetZoneImpl* new_zone = nullptr;
   simgrid::kernel::resource::NetworkModel* netmodel =
-      current_routing == nullptr ? surf_network_model : current_routing->network_model_;
+      current_routing == nullptr ? static_cast<simgrid::kernel::resource::NetworkModel*>(
+                                       models_by_type[simgrid::kernel::resource::Model::Type::NETWORK][0])
+                                 : current_routing->network_model_;
+
   if (strcasecmp(zone->routing.c_str(), "Cluster") == 0) {
     new_zone = new simgrid::kernel::routing::ClusterZone(current_routing, zone->id, netmodel);
   } else if (strcasecmp(zone->routing.c_str(), "ClusterDragonfly") == 0) {