Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Objectifies the CPU model
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Wed, 15 Feb 2023 16:24:12 +0000 (17:24 +0100)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Wed, 15 Feb 2023 16:24:12 +0000 (17:24 +0100)
src/kernel/routing/NetZoneImpl.cpp
src/simgrid/module.cpp
src/simgrid/module.hpp
src/simgrid/sg_config.cpp
src/surf/cpu_cas01.cpp
src/surf/host_clm03.cpp
src/surf/surf_interface.hpp

index fa210c3..cce24fe 100644 (file)
@@ -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();
   }
index f4ee704..c160aea 100644 (file)
@@ -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
index 2e83c16..c21a264 100644 (file)
@@ -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
index fa7446e..74ceaf2 100644 (file)
@@ -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",
index 13f499c..83aa5f9 100644 (file)
@@ -40,8 +40,7 @@ static simgrid::config::Flag<std::string> 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 {
 
index acac620..1691f7e 100644 (file)
@@ -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();
 }
index 0a48400..f3393e1 100644 (file)
@@ -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:) */