X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/df2ef7baf0c06c66ca7b58c4048b37fd54de8abd..9f4ddf3b15fccdab0f2666bf44061e7fd8305f49:/src/surf/surf_config.c diff --git a/src/surf/surf_config.c b/src/surf/surf_config.c index 0005033e87..13abd42453 100644 --- a/src/surf/surf_config.c +++ b/src/surf/surf_config.c @@ -133,6 +133,25 @@ static void _surf_cfg_cb__optimization_mode(const char *name, int pos) find_model_description(surf_optimization_mode_description, val); } +/* callback of the cpu/model variable */ +static void _surf_cfg_cb__storage_mode(const char *name, int pos) +{ + char *val; + + xbt_assert(_surf_init_status < 2, + "Cannot change the model after the initialization"); + + val = xbt_cfg_get_string(_surf_cfg_set, name); + + if (!strcmp(val, "help")) { + model_help("storage", surf_storage_model_description); + exit(0); + } + + /* New Module missing */ + find_model_description(surf_storage_model_description, val); +} + /* callback of the workstation_model variable */ static void _surf_cfg_cb__network_model(const char *name, int pos) { @@ -247,11 +266,16 @@ static void _surf_cfg_cb_contexts_parallel_mode(const char *name, int pos) SIMIX_context_set_parallel_mode(XBT_PARMAP_BUSY_WAIT); } else { - XBT_WARN("Command line setting of the parallel synchronization mode should " + xbt_die("Command line setting of the parallel synchronization mode should " "be one of \"posix\", \"futex\" or \"busy_wait\""); } } +static void _surf_cfg_cb_surf_nthreads(const char *name, int pos) +{ + surf_set_nthreads(xbt_cfg_get_int(_surf_cfg_set, name)); +} + static void _surf_cfg_cb__surf_network_coordinates(const char *name, int pos) { @@ -326,6 +350,20 @@ void surf_config_init(int *argc, char **argv) xbt_cfg_register(&_surf_cfg_set, "cpu/optim", description, xbt_cfgelm_string, &default_value, 1, 1, &_surf_cfg_cb__optimization_mode, NULL); + sprintf(description, + "The model to use for the storage. Possible values: "); + p = description; + while (*(++p) != '\0'); + for (i = 0; surf_storage_model_description[i].name; i++) + p += sprintf(p, "%s%s", (i == 0 ? "" : ", "), + surf_storage_model_description[i].name); + sprintf(p, + ".\n (use 'help' as a value to see the long description of each model)"); + default_value = xbt_strdup("default"); + xbt_cfg_register(&_surf_cfg_set, "storage/model", description, xbt_cfgelm_string, + &default_value, 1, 1, &_surf_cfg_cb__storage_mode, + NULL); + sprintf(description, "The model to use for the network. Possible values: "); p = description; @@ -469,13 +507,24 @@ void surf_config_init(int *argc, char **argv) xbt_cfgelm_int, &default_value_int, 1, 1, _surf_cfg_cb_contexts_parallel_threshold, NULL); - /* minimal number of user contexts to be run in parallel */ + /* synchronization mode for parallel user contexts */ +#ifdef HAVE_FUTEX_H default_value = xbt_strdup("futex"); +#else //No futex on mac and posix is unimplememted yet + default_value = xbt_strdup("busy_wait"); +#endif xbt_cfg_register(&_surf_cfg_set, "contexts/synchro", "Synchronization mode to use when running contexts in parallel (either futex, posix or busy_wait)", xbt_cfgelm_string, &default_value, 1, 1, _surf_cfg_cb_contexts_parallel_mode, NULL); + /* number of parallel threads for Surf */ + default_value_int = surf_get_nthreads(); + xbt_cfg_register(&_surf_cfg_set, "surf/nthreads", + "Number of parallel threads used to update Surf models", + xbt_cfgelm_int, &default_value_int, 1, 1, + _surf_cfg_cb_surf_nthreads, NULL); + default_value = xbt_strdup("no"); xbt_cfg_register(&_surf_cfg_set, "network/coordinates", "\"yes\" or \"no\", specifying whether we use a coordinate-based routing (as Vivaldi)", @@ -510,6 +559,45 @@ void surf_config_init(int *argc, char **argv) NULL, NULL); xbt_cfg_setdefault_string(_surf_cfg_set, "ns3/TcpModel", "default"); #endif + +//SMPI + double default_reference_speed = 20000.0; + xbt_cfg_register(&_surf_cfg_set, "smpi/running_power", + "Power of the host running the simulation (in flop/s). Used to bench the operations.", + xbt_cfgelm_double, &default_reference_speed, 1, 1, NULL, + NULL); + + int default_display_timing = 0; + xbt_cfg_register(&_surf_cfg_set, "smpi/display_timing", + "Boolean indicating whether we should display the timing after simulation.", + xbt_cfgelm_int, &default_display_timing, 1, 1, NULL, + NULL); + + double default_threshold = 1e-6; + xbt_cfg_register(&_surf_cfg_set, "smpi/cpu_threshold", + "Minimal computation time (in seconds) not discarded.", + xbt_cfgelm_double, &default_threshold, 1, 1, NULL, + NULL); + + //For smpi/bw_factor and smpi/lat_factor + //Default value have to be "threshold0:value0;threshold1:value1;...;thresholdN:valueN" + //test is if( size >= thresholdN ) return valueN; + //Values can be modified with command line --cfg=smpi/bw_factor:"threshold0:value0;threshold1:value1;...;thresholdN:valueN" + // or with tag config put line + xbt_cfg_register(&_surf_cfg_set, "smpi/bw_factor", + "Bandwidth factors for smpi.", + xbt_cfgelm_string, NULL, 1, 1, NULL, + NULL); + xbt_cfg_setdefault_string(_surf_cfg_set, "smpi/bw_factor", "65472:0.940694;15424:0.697866;9376:0.58729;5776:1.08739;3484:0.77493;1426:0.608902;732:0.341987;257:0.338112;0:0.812084"); + + xbt_cfg_register(&_surf_cfg_set, "smpi/lat_factor", + "Latency factors for smpi.", + xbt_cfgelm_string, NULL, 1, 1, NULL, + NULL); + xbt_cfg_setdefault_string(_surf_cfg_set, "smpi/lat_factor", "65472:11.6436;15424:3.48845;9376:2.59299;5776:2.18796;3484:1.88101;1426:1.61075;732:1.9503;257:1.95341;0:2.01467"); +//END SMPI + + if (!surf_path) { /* retrieves the current directory of the current process */ const char *initial_path = __surf_get_initial_path(); @@ -543,11 +631,14 @@ void surf_config_models_setup() int workstation_id = -1; char *network_model_name = NULL; char *cpu_model_name = NULL; + int storage_id = -1; + char *storage_model_name = NULL; workstation_model_name = xbt_cfg_get_string(_surf_cfg_set, "workstation/model"); network_model_name = xbt_cfg_get_string(_surf_cfg_set, "network/model"); cpu_model_name = xbt_cfg_get_string(_surf_cfg_set, "cpu/model"); + storage_model_name = xbt_cfg_get_string(_surf_cfg_set, "storage/model"); /* Check whether we use a net/cpu model differing from the default ones, in which case * we should switch to the "compound" workstation model to correctly dispatch stuff to @@ -591,4 +682,8 @@ void surf_config_models_setup() XBT_DEBUG("Call workstation_model_init"); surf_workstation_model_description[workstation_id].model_init_preparse(); + + XBT_DEBUG("Call storage_model_init"); + storage_id = find_model_description(surf_storage_model_description, storage_model_name); + surf_storage_model_description[storage_id].model_init_preparse(); }