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();
}
/* -------------------------------------------------------------------------------------------------------------- */
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
/** @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
} 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:");
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 */
/* 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",
/*********
* 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;
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 {
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();
}
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
/** @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:) */