From fb66e911fd2302c1cc8c0191165e348e163b1afa Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Wed, 15 Feb 2023 17:24:12 +0100 Subject: [PATCH] Objectifies the CPU model --- src/kernel/routing/NetZoneImpl.cpp | 2 +- src/simgrid/module.cpp | 2 -- src/simgrid/module.hpp | 15 +++++++++++++-- src/simgrid/sg_config.cpp | 8 ++++---- src/surf/cpu_cas01.cpp | 5 ++--- src/surf/host_clm03.cpp | 2 +- src/surf/surf_interface.hpp | 13 ------------- 7 files changed, 21 insertions(+), 26 deletions(-) diff --git a/src/kernel/routing/NetZoneImpl.cpp b/src/kernel/routing/NetZoneImpl.cpp index fa210c3950..cce24fe140 100644 --- a/src/kernel/routing/NetZoneImpl.cpp +++ b/src/kernel/routing/NetZoneImpl.cpp @@ -45,7 +45,7 @@ static void surf_config_models_setup() xbt_enforce(not disk_model_name.empty(), "Set a disk model to use with the 'compound' host model"); xbt_enforce(not network_model_name.empty(), "Set a network model to use with the 'compound' host model"); - surf_cpu_model_description.by_name(cpu_model_name).init(); + simgrid_cpu_models().by_name(cpu_model_name).init(); surf_disk_model_description.by_name(disk_model_name).init(); simgrid_network_models().by_name(network_model_name).init(); } diff --git a/src/simgrid/module.cpp b/src/simgrid/module.cpp index f4ee704da5..c160aeabe9 100644 --- a/src/simgrid/module.cpp +++ b/src/simgrid/module.cpp @@ -50,13 +50,11 @@ std::string ModuleGroup::existing_values() const /* -------------------------------------------------------------------------------------------------------------- */ simgrid::ModuleGroup surf_optimization_mode_description("optimization mode"); -simgrid::ModuleGroup surf_cpu_model_description("CPU model"); simgrid::ModuleGroup surf_disk_model_description("disk model"); simgrid::ModuleGroup surf_host_model_description("host model"); void simgrid_create_models() { - surf_cpu_model_description.add("Cas01", "Simplistic CPU model (time=size/speed).", &surf_cpu_model_init_Cas01); surf_disk_model_description.add("S19", "Simplistic disk model.", &surf_disk_model_init_S19); surf_host_model_description diff --git a/src/simgrid/module.hpp b/src/simgrid/module.hpp index 2e83c168b5..c21a2642ec 100644 --- a/src/simgrid/module.hpp +++ b/src/simgrid/module.hpp @@ -60,8 +60,19 @@ inline auto& simgrid_plugins() // Function to avoid static initialization order /** @brief The list of all available network model (pick one with --cfg=network/model) */ inline auto& simgrid_network_models() // Function to avoid static initialization order fiasco { - static simgrid::ModuleGroup plugins("network model"); - return plugins; + static simgrid::ModuleGroup models("network model"); + return models; } +#define SIMGRID_REGISTER_CPU_MODEL(id, desc, init) \ + static void XBT_ATTRIB_CONSTRUCTOR(800) _XBT_CONCAT3(simgrid_, id, _cpu_model_register)() \ + { \ + simgrid_cpu_models().add(_XBT_STRINGIFY(id), (desc), (init)); \ + } +/** @brief The list of all available CPU model (pick one with --cfg=cpu/model) */ +inline auto& simgrid_cpu_models() // Function to avoid static initialization order fiasco +{ + static simgrid::ModuleGroup models("CPU model"); + return models; +} #endif \ No newline at end of file diff --git a/src/simgrid/sg_config.cpp b/src/simgrid/sg_config.cpp index fa7446e55c..74ceaf2a53 100644 --- a/src/simgrid/sg_config.cpp +++ b/src/simgrid/sg_config.cpp @@ -97,7 +97,7 @@ static void sg_config_cmd_line(int *argc, char **argv) } else if (parse_args && not strcmp(argv[i], "--help-models")) { surf_host_model_description.help(); XBT_HELP("%s", ""); - surf_cpu_model_description.help(); + simgrid_cpu_models().help(); XBT_HELP("%s", ""); simgrid_network_models().help(); XBT_HELP("\nLong description of all optimization levels accepted by the models of this simulator:"); @@ -155,12 +155,12 @@ static void _sg_cfg_cb__cpu_model(const std::string& value) xbt_assert(_sg_cfg_init_status < 2, "Cannot change the model after the initialization"); if (value == "help") { - surf_cpu_model_description.help(); + simgrid_cpu_models().help(); exit(0); } /* Make sure that the model exists */ - surf_cpu_model_description.by_name(value); + simgrid_cpu_models().by_name(value); } /* callback of the cpu/model variable */ @@ -240,7 +240,7 @@ void sg_config_init(int *argc, char **argv) /* Plugins configuration */ declare_model_flag("plugin", "", &_sg_cfg_cb__plugin, simgrid_plugins(), "plugin", "The plugins"); - declare_model_flag("cpu/model", "Cas01", &_sg_cfg_cb__cpu_model, surf_cpu_model_description, "model", + declare_model_flag("cpu/model", "Cas01", &_sg_cfg_cb__cpu_model, simgrid_cpu_models(), "model", "The model to use for the CPU"); declare_model_flag("disk/model", "S19", &_sg_cfg_cb__disk_model, surf_disk_model_description, "model", diff --git a/src/surf/cpu_cas01.cpp b/src/surf/cpu_cas01.cpp index 13f499c045..83aa5f9654 100644 --- a/src/surf/cpu_cas01.cpp +++ b/src/surf/cpu_cas01.cpp @@ -40,8 +40,7 @@ static simgrid::config::Flag cfg_cpu_solver("cpu/solver", "Set line /********* * Model * *********/ -void surf_cpu_model_init_Cas01() -{ +SIMGRID_REGISTER_CPU_MODEL(Cas01, "Simplistic CPU model (time=size/speed)", []() { if (cpu_optim_opt == "TI") { simgrid::kernel::resource::CpuTiModel::create_pm_models(); return; @@ -51,7 +50,7 @@ void surf_cpu_model_init_Cas01() 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::kernel::resource { diff --git a/src/surf/host_clm03.cpp b/src/surf/host_clm03.cpp index acac620492..1691f7e5c9 100644 --- a/src/surf/host_clm03.cpp +++ b/src/surf/host_clm03.cpp @@ -21,7 +21,7 @@ void surf_host_model_init_current_default() 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(); + simgrid_cpu_models().by_name("Cas01").init(); surf_disk_model_init_S19(); simgrid_network_models().by_name("LV08").init(); } diff --git a/src/surf/surf_interface.hpp b/src/surf/surf_interface.hpp index 0a48400102..f3393e18c6 100644 --- a/src/surf/surf_interface.hpp +++ b/src/surf/surf_interface.hpp @@ -63,17 +63,6 @@ static inline int double_equals(double value1, double value2, double precision) return (fabs(value1 - value2) < precision); } -/** @ingroup SURF_models - * @brief Initializes the CPU model with the model Cas01 - * - * By default, this model uses the lazy optimization mechanism that relies on partial invalidation in LMM and a heap - * for lazy action update. - * You can change this behavior by setting the cpu/optim configuration variable to a different value. - * - * You shouldn't have to call it by yourself. - */ -XBT_PUBLIC void surf_cpu_model_init_Cas01(); - XBT_PUBLIC void surf_disk_model_init_S19(); /** @ingroup SURF_models @@ -117,8 +106,6 @@ XBT_PUBLIC void surf_host_model_init_ptask_L07(); /** @brief The list of all available optimization modes (both for cpu and networks). * These optimization modes can be set using --cfg=cpu/optim:... and --cfg=network/optim:... */ XBT_PUBLIC_DATA simgrid::ModuleGroup surf_optimization_mode_description; -/** @brief The list of all cpu models (pick one with --cfg=cpu/model) */ -XBT_PUBLIC_DATA simgrid::ModuleGroup surf_cpu_model_description; /** @brief The list of all disk models (pick one with --cfg=disk/model) */ XBT_PUBLIC_DATA simgrid::ModuleGroup surf_disk_model_description; /** @brief The list of all host models (pick one with --cfg=host/model:) */ -- 2.20.1