From 58a6e74bc2e1f188543734ef1778169823c090c3 Mon Sep 17 00:00:00 2001 From: Bruno Donassolo Date: Wed, 3 Mar 2021 11:43:23 +0100 Subject: [PATCH] Getting rid off surf_network_model global Adapt network model initialization to remove surf_network_model occurrences. --- src/surf/host_clm03.cpp | 6 ++++-- src/surf/network_cm02.cpp | 14 ++++++++------ src/surf/network_constant.cpp | 6 ++++-- src/surf/network_ib.cpp | 7 ++++--- src/surf/network_interface.cpp | 2 -- src/surf/network_interface.hpp | 5 ----- src/surf/network_ns3.cpp | 7 ++++--- src/surf/network_smpi.cpp | 7 ++++--- src/surf/ptask_L07.cpp | 13 +++++-------- src/surf/ptask_L07.hpp | 4 ++++ src/surf/sg_platf.cpp | 5 ++++- 11 files changed, 41 insertions(+), 35 deletions(-) diff --git a/src/surf/host_clm03.cpp b/src/surf/host_clm03.cpp index de2d9793e4..340dc2adb7 100644 --- a/src/surf/host_clm03.cpp +++ b/src/surf/host_clm03.cpp @@ -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 { diff --git a/src/surf/network_cm02.cpp b/src/surf/network_cm02.cpp index aa1a9c0cb2..547275167f 100644 --- a/src/surf/network_cm02.cpp +++ b/src/surf/network_cm02.cpp @@ -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("network/latency-factor", 13.01); simgrid::config::set_default("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("network/latency-factor", 1.0); simgrid::config::set_default("network/bandwidth-factor", 1.0); simgrid::config::set_default("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 { diff --git a/src/surf/network_constant.cpp b/src/surf/network_constant.cpp index 7c075608c3..59e4c81690 100644 --- a/src/surf/network_constant.cpp +++ b/src/surf/network_constant.cpp @@ -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 { diff --git a/src/surf/network_ib.cpp b/src/surf/network_ib.cpp index f04b3fbe56..1fda88f010 100644 --- a/src/surf/network_ib.cpp +++ b/src/surf/network_ib.cpp @@ -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); diff --git a/src/surf/network_interface.cpp b/src/surf/network_interface.cpp index f33fe69971..359e820f6a 100644 --- a/src/surf/network_interface.cpp +++ b/src/surf/network_interface.cpp @@ -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 { diff --git a/src/surf/network_interface.hpp b/src/surf/network_interface.hpp index a109c14bf8..ea4880a356 100644 --- a/src/surf/network_interface.hpp +++ b/src/surf/network_interface.hpp @@ -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_ */ diff --git a/src/surf/network_ns3.cpp b/src/surf/network_ns3.cpp index 38c3c378bd..7320bf5c98 100644 --- a/src/surf/network_ns3.cpp +++ b/src/surf/network_ns3.cpp @@ -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 diff --git a/src/surf/network_smpi.cpp b/src/surf/network_smpi.cpp index 3ec527eeb0..7410aa2e81 100644 --- a/src/surf/network_smpi.cpp +++ b/src/surf/network_smpi.cpp @@ -31,9 +31,10 @@ std::vector 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("network/weight-S", 8775); } diff --git a/src/surf/ptask_L07.cpp b/src/surf/ptask_L07.cpp index 1c45a5d2ea..f0bf35644c 100644 --- a/src/surf/ptask_L07.cpp +++ b/src/surf/ptask_L07.cpp @@ -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(this, maxmin_system); + models_by_type[simgrid::kernel::resource::Model::Type::NETWORK].push_back(network_model_.get()); + cpu_model_pm_ = std::make_unique(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) diff --git a/src/surf/ptask_L07.hpp b/src/surf/ptask_L07.hpp index a7ce95401f..adcc812d19 100644 --- a/src/surf/ptask_L07.hpp +++ b/src/surf/ptask_L07.hpp @@ -44,6 +44,10 @@ public: void update_actions_state(double now, double delta) override; kernel::resource::CpuAction* execute_parallel(const std::vector& host_list, const double* flops_amount, const double* bytes_amount, double rate) override; + +private: + std::unique_ptr network_model_; + std::unique_ptr cpu_model_pm_; }; class CpuL07Model : public kernel::resource::CpuModel { diff --git a/src/surf/sg_platf.cpp b/src/surf/sg_platf.cpp index 9066f98feb..fe17a3cd88 100644 --- a/src/surf/sg_platf.cpp +++ b/src/surf/sg_platf.cpp @@ -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( + 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) { -- 2.20.1