X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/cba941895d9d4ebfa7db99954d8585039dc9b88a..e44a0d71a8bacd7ab03e284fc32ad23731f5869c:/src/simgrid/sg_config.cpp diff --git a/src/simgrid/sg_config.cpp b/src/simgrid/sg_config.cpp index 900285aca8..8aa0849048 100644 --- a/src/simgrid/sg_config.cpp +++ b/src/simgrid/sg_config.cpp @@ -20,12 +20,10 @@ #include "simgrid/simix.h" #include "simgrid/sg_config.h" #include "simgrid_config.h" /* what was compiled in? */ -#if HAVE_SMPI -#include "smpi/smpi_interface.h" -#endif #include "mc/mc.h" #include "simgrid/instr.h" #include "src/mc/mc_replay.h" +#include "src/surf/surf_interface.hpp" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_config, surf, "About the configuration of SimGrid"); @@ -47,19 +45,20 @@ int _sg_cfg_exit_asap = 0; static void sg_config_cmd_line(int *argc, char **argv) { int shall_exit = 0; - int i, j; + int i; + int j; for (j = i = 1; i < *argc; i++) { - if (!strncmp(argv[i], "--cfg=", strlen("--cfg="))) { + if (not strncmp(argv[i], "--cfg=", strlen("--cfg="))) { char *opt = strchr(argv[i], '='); opt++; xbt_cfg_set_parse(opt); XBT_DEBUG("Did apply '%s' as config setting", opt); - } else if (!strcmp(argv[i], "--version")) { + } else if (not strcmp(argv[i], "--version")) { printf("%s\n", SIMGRID_VERSION_STRING); shall_exit = 1; - } else if (!strcmp(argv[i], "--cfg-help") || !strcmp(argv[i], "--help")) { + } else if (not strcmp(argv[i], "--cfg-help") || not strcmp(argv[i], "--help")) { printf("Description of the configuration accepted by this simulator:\n"); xbt_cfg_help(); printf( @@ -77,12 +76,12 @@ static void sg_config_cmd_line(int *argc, char **argv) "\n" ); shall_exit = 1; - } else if (!strcmp(argv[i], "--help-aliases")) { + } else if (not strcmp(argv[i], "--help-aliases")) { printf("Here is a list of all deprecated option names, with their replacement.\n"); xbt_cfg_aliases(); printf("Please consider using the recent names\n"); shall_exit = 1; - } else if (!strcmp(argv[i], "--help-models")) { + } else if (not strcmp(argv[i], "--help-models")) { model_help("host", surf_host_model_description); printf("\n"); model_help("CPU", surf_cpu_model_description); @@ -95,7 +94,7 @@ static void sg_config_cmd_line(int *argc, char **argv) surf_optimization_mode_description[k].description); printf("Both network and CPU models have 'Lazy' as default optimization level\n\n"); shall_exit = 1; - } else if (!strcmp(argv[i], "--help-tracing")) { + } else if (not strcmp(argv[i], "--help-tracing")) { TRACE_help (1); shall_exit = 1; } else { @@ -119,7 +118,7 @@ static void _sg_cfg_cb__plugin(const char *name) if (val==nullptr || val[0] == '\0') return; - if (!strcmp(val, "help")) { + if (not strcmp(val, "help")) { model_help("plugin", surf_plugin_description); sg_cfg_exit_early(); } @@ -134,7 +133,7 @@ static void _sg_cfg_cb__host_model(const char *name) xbt_assert(_sg_cfg_init_status < 2, "Cannot change the model after the initialization"); char *val = xbt_cfg_get_string(name); - if (!strcmp(val, "help")) { + if (not strcmp(val, "help")) { model_help("host", surf_host_model_description); sg_cfg_exit_early(); } @@ -149,7 +148,7 @@ static void _sg_cfg_cb__cpu_model(const char *name) xbt_assert(_sg_cfg_init_status < 2, "Cannot change the model after the initialization"); char *val = xbt_cfg_get_string(name); - if (!strcmp(val, "help")) { + if (not strcmp(val, "help")) { model_help("CPU", surf_cpu_model_description); sg_cfg_exit_early(); } @@ -164,7 +163,7 @@ static void _sg_cfg_cb__optimization_mode(const char *name) xbt_assert(_sg_cfg_init_status < 2, "Cannot change the model after the initialization"); char *val = xbt_cfg_get_string(name); - if (!strcmp(val, "help")) { + if (not strcmp(val, "help")) { model_help("optimization", surf_optimization_mode_description); sg_cfg_exit_early(); } @@ -179,7 +178,7 @@ static void _sg_cfg_cb__storage_mode(const char *name) xbt_assert(_sg_cfg_init_status < 2, "Cannot change the model after the initialization"); char *val = xbt_cfg_get_string(name); - if (!strcmp(val, "help")) { + if (not strcmp(val, "help")) { model_help("storage", surf_storage_model_description); sg_cfg_exit_early(); } @@ -193,7 +192,7 @@ static void _sg_cfg_cb__network_model(const char *name) xbt_assert(_sg_cfg_init_status < 2, "Cannot change the model after the initialization"); char *val = xbt_cfg_get_string(name); - if (!strcmp(val, "help")) { + if (not strcmp(val, "help")) { model_help("network", surf_network_model_description); sg_cfg_exit_early(); } @@ -201,64 +200,6 @@ static void _sg_cfg_cb__network_model(const char *name) /* New Module missing */ find_model_description(surf_network_model_description, val); } - -#if HAVE_SMPI -/* callback of the mpi collectives: simply check that this is a valid name. It will be picked up in smpi_global.cpp */ -static void _check_coll(const char *category, - s_mpi_coll_description_t * table, - const char *name) -{ - xbt_assert(_sg_cfg_init_status < 2, "Cannot change the collective algorithm after the initialization"); - - char *val = xbt_cfg_get_string(name); - if (val && !strcmp(val, "help")) { - coll_help(category, table); - sg_cfg_exit_early(); - } - - find_coll_description(table, val, category); -} -static void _check_coll_gather(const char *name){ - _check_coll("gather", mpi_coll_gather_description, name); -} -static void _check_coll_allgather(const char *name){ - _check_coll("allgather", mpi_coll_allgather_description, name); -} -static void _check_coll_allgatherv(const char *name){ - _check_coll("allgatherv", mpi_coll_allgatherv_description, name); -} -static void _check_coll_allreduce(const char *name) -{ - _check_coll("allreduce", mpi_coll_allreduce_description, name); -} -static void _check_coll_alltoall(const char *name) -{ - _check_coll("alltoall", mpi_coll_alltoall_description, name); -} -static void _check_coll_alltoallv(const char *name) -{ - _check_coll("alltoallv", mpi_coll_alltoallv_description, name); -} -static void _check_coll_bcast(const char *name) -{ - _check_coll("bcast", mpi_coll_bcast_description, name); -} -static void _check_coll_reduce(const char *name) -{ - _check_coll("reduce", mpi_coll_reduce_description, name); -} -static void _check_coll_reduce_scatter(const char *name){ - _check_coll("reduce_scatter", mpi_coll_reduce_scatter_description, name); -} -static void _check_coll_scatter(const char *name){ - _check_coll("scatter", mpi_coll_scatter_description, name); -} -static void _check_coll_barrier(const char *name){ - _check_coll("barrier", mpi_coll_barrier_description, name); -} - -#endif - /* callback to decide if we want to use the model-checking */ #include "src/xbt_modinter.h" @@ -268,7 +209,7 @@ static void _sg_cfg_cb_model_check_replay(const char *name) { MC_record_path = nullptr; } -#if HAVE_MC +#if SIMGRID_HAVE_MC extern int _sg_do_model_check_record; static void _sg_cfg_cb_model_check_record(const char *name) { _sg_do_model_check_record = xbt_cfg_get_boolean(name); @@ -312,13 +253,11 @@ static void _sg_cfg_cb_contexts_parallel_threshold(const char *name) static void _sg_cfg_cb_contexts_parallel_mode(const char *name) { const char* mode_name = xbt_cfg_get_string(name); - if (!strcmp(mode_name, "posix")) { + if (not strcmp(mode_name, "posix")) { SIMIX_context_set_parallel_mode(XBT_PARMAP_POSIX); - } - else if (!strcmp(mode_name, "futex")) { + } else if (not strcmp(mode_name, "futex")) { SIMIX_context_set_parallel_mode(XBT_PARMAP_FUTEX); - } - else if (!strcmp(mode_name, "busy_wait")) { + } else if (not strcmp(mode_name, "busy_wait")) { SIMIX_context_set_parallel_mode(XBT_PARMAP_BUSY_WAIT); } else { @@ -421,8 +360,7 @@ void sg_config_init(int *argc, char **argv) "", [](std::string const& path) { if (path[0] != '\0') { - char* copy = xbt_strdup(path.c_str()); - xbt_dynar_push(surf_path, ©); + surf_path.push_back(path); } }); @@ -436,7 +374,7 @@ void sg_config_init(int *argc, char **argv) xbt_cfg_register_string("model-check/replay", nullptr, _sg_cfg_cb_model_check_replay, "Model-check path to replay (as reported by SimGrid when a violation is reported)"); -#if HAVE_MC +#if SIMGRID_HAVE_MC /* do model-checking-record */ xbt_cfg_register_boolean("model-check/record", "no", _sg_cfg_cb_model_check_record, "Record the model-checking paths"); @@ -533,6 +471,8 @@ void sg_config_init(int *argc, char **argv) xbt_cfg_register_alias("smpi/host-speed","smpi/running_power"); xbt_cfg_register_alias("smpi/host-speed","smpi/running-power"); + xbt_cfg_register_boolean("smpi/keep-temps", "no", nullptr, "Whether we should keep the generated temporary files."); + xbt_cfg_register_boolean("smpi/display-timing", "no", nullptr, "Whether we should display the timing after simulation."); xbt_cfg_register_alias("smpi/display-timing", "smpi/display_timing"); @@ -543,6 +483,9 @@ void sg_config_init(int *argc, char **argv) "Whether SMPI_SHARED_MALLOC is enabled. Disable it for debugging purposes."); xbt_cfg_register_alias("smpi/shared-malloc", "smpi/use-shared-malloc"); xbt_cfg_register_alias("smpi/shared-malloc", "smpi/use_shared_malloc"); + xbt_cfg_register_double("smpi/shared-malloc-blocksize", 1UL << 20, nullptr, "Size of the bogus file which will be created for global shared allocations"); + xbt_cfg_register_string("smpi/shared-malloc-hugepage", "", nullptr, + "Path to a mounted hugetlbfs, to use huge pages with shared malloc."); xbt_cfg_register_double("smpi/cpu-threshold", 1e-6, nullptr, "Minimal computation time (in seconds) not discarded, or -1 for infinity."); xbt_cfg_register_alias("smpi/cpu-threshold", "smpi/cpu_threshold"); @@ -559,8 +502,15 @@ void sg_config_init(int *argc, char **argv) xbt_cfg_register_alias("smpi/send-is-detached-thresh","smpi/send_is_detached_thresh"); xbt_cfg_register_alias("smpi/send-is-detached-thresh","smpi/send_is_detached_thres"); - xbt_cfg_register_boolean("smpi/privatize-global-variables", "no", nullptr, "Whether we should privatize global variable at runtime."); - xbt_cfg_register_alias("smpi/privatize-global-variables", "smpi/privatize_global_variables"); + const char* default_privatization = std::getenv("SMPI_PRIVATIZATION"); + if (default_privatization == nullptr) + default_privatization = "no"; + + xbt_cfg_register_string("smpi/privatization", default_privatization, nullptr, + "How we should privatize global variable at runtime (no, yes, mmap, dlopen)."); + + xbt_cfg_register_alias("smpi/privatization", "smpi/privatize-global-variables"); + xbt_cfg_register_alias("smpi/privatization", "smpi/privatize_global_variables"); xbt_cfg_register_boolean("smpi/grow-injected-times", "yes", nullptr, "Whether we want to make the injected time in MPI_Iprobe and MPI_Test grow, to allow faster simulation. This can make simulation less precise, though."); @@ -576,18 +526,18 @@ void sg_config_init(int *argc, char **argv) xbt_cfg_register_string("smpi/coll-selector", "default", nullptr, "Which collective selector to use"); xbt_cfg_register_alias("smpi/coll-selector","smpi/coll_selector"); - xbt_cfg_register_string("smpi/gather", nullptr, &_check_coll_gather, "Which collective to use for gather"); - xbt_cfg_register_string("smpi/allgather", nullptr, &_check_coll_allgather, "Which collective to use for allgather"); - xbt_cfg_register_string("smpi/barrier", nullptr, &_check_coll_barrier, "Which collective to use for barrier"); - xbt_cfg_register_string("smpi/reduce-scatter",nullptr, &_check_coll_reduce_scatter, "Which collective to use for reduce_scatter"); - xbt_cfg_register_alias("smpi/reduce-scatter","smpi/reduce_scatter"); - xbt_cfg_register_string("smpi/scatter", nullptr, &_check_coll_scatter, "Which collective to use for scatter"); - xbt_cfg_register_string("smpi/allgatherv", nullptr, &_check_coll_allgatherv, "Which collective to use for allgatherv"); - xbt_cfg_register_string("smpi/allreduce", nullptr, &_check_coll_allreduce, "Which collective to use for allreduce"); - xbt_cfg_register_string("smpi/alltoall", nullptr, &_check_coll_alltoall, "Which collective to use for alltoall"); - xbt_cfg_register_string("smpi/alltoallv", nullptr, &_check_coll_alltoallv,"Which collective to use for alltoallv"); - xbt_cfg_register_string("smpi/bcast", nullptr, &_check_coll_bcast, "Which collective to use for bcast"); - xbt_cfg_register_string("smpi/reduce", nullptr, &_check_coll_reduce, "Which collective to use for reduce"); + xbt_cfg_register_string("smpi/gather", nullptr, nullptr, "Which collective to use for gather"); + xbt_cfg_register_string("smpi/allgather", nullptr, nullptr, "Which collective to use for allgather"); + xbt_cfg_register_string("smpi/barrier", nullptr, nullptr, "Which collective to use for barrier"); + xbt_cfg_register_string("smpi/reduce_scatter",nullptr, nullptr, "Which collective to use for reduce_scatter"); + xbt_cfg_register_alias("smpi/reduce_scatter","smpi/reduce-scatter"); + xbt_cfg_register_string("smpi/scatter", nullptr, nullptr, "Which collective to use for scatter"); + xbt_cfg_register_string("smpi/allgatherv", nullptr, nullptr, "Which collective to use for allgatherv"); + xbt_cfg_register_string("smpi/allreduce", nullptr, nullptr, "Which collective to use for allreduce"); + xbt_cfg_register_string("smpi/alltoall", nullptr, nullptr, "Which collective to use for alltoall"); + xbt_cfg_register_string("smpi/alltoallv", nullptr, nullptr,"Which collective to use for alltoallv"); + xbt_cfg_register_string("smpi/bcast", nullptr, nullptr, "Which collective to use for bcast"); + xbt_cfg_register_string("smpi/reduce", nullptr, nullptr, "Which collective to use for reduce"); #endif // HAVE_SMPI /* Storage */ @@ -605,12 +555,11 @@ void sg_config_init(int *argc, char **argv) "Whether to cleanup SimGrid at exit. Disable it if your code segfaults after its end."); xbt_cfg_register_alias("clean-atexit","clean_atexit"); - if (!surf_path) { + if (surf_path.empty()) { /* retrieves the current directory of the current process */ const char *initial_path = __surf_get_initial_path(); xbt_assert((initial_path), "__surf_get_initial_path() failed! Can't resolve current Windows directory"); - surf_path = xbt_dynar_new(sizeof(char *), &xbt_free_ref); xbt_cfg_setdefault_string("path", initial_path); } @@ -626,7 +575,7 @@ void sg_config_init(int *argc, char **argv) void sg_config_finalize() { - if (!_sg_cfg_init_status) + if (not _sg_cfg_init_status) return; /* Not initialized yet. Nothing to do */ xbt_cfg_free(&simgrid_config);