X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/33d0a5072b2c5d0a0d12740ba41434a5876ce997..5c9583c94b9cef3f02ffec69b6cc245b1739f97e:/src/smpi/internals/smpi_global.cpp diff --git a/src/smpi/internals/smpi_global.cpp b/src/smpi/internals/smpi_global.cpp index 6638b9cf75..34327f6171 100644 --- a/src/smpi/internals/smpi_global.cpp +++ b/src/smpi/internals/smpi_global.cpp @@ -15,6 +15,8 @@ #include "xbt/config.hpp" #include +#include /* trim_right / trim_left */ +#include #include /* DBL_MAX */ #include #include /* intmax_t */ @@ -23,6 +25,14 @@ #include #include +#if SG_HAVE_SENDFILE +#include +#endif + +#if HAVE_PAPI +#include "papi.h" +#endif + #if not defined(__APPLE__) && not defined(__HAIKU__) #include #endif @@ -39,13 +49,7 @@ constexpr bool HAVE_WORKING_MMAP = false; constexpr bool HAVE_WORKING_MMAP = true; #endif -#if SG_HAVE_SENDFILE -#include -#endif - XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_kernel, smpi, "Logging specific to SMPI (kernel)"); -#include -#include /* trim_right / trim_left */ #if SMPI_IFORT extern "C" void for_rtl_init_ (int *, char **); @@ -68,7 +72,6 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_kernel, smpi, "Logging specific to SMPI (ke #endif #if HAVE_PAPI -#include "papi.h" std::string papi_default_config_name = "default"; std::map units2papi_setup; #endif @@ -76,9 +79,7 @@ std::map units2papi_ std::unordered_map location2speedup; static std::map process_data; -int process_count = 0; static int smpi_exit_status = 0; -int smpi_universe_size = 0; extern double smpi_total_benched_time; xbt_os_timer_t global_timer; static std::vector privatize_libs_paths; @@ -105,11 +106,6 @@ static simgrid::config::Flag smpi_init_sleep( void (*smpi_comm_copy_data_callback)(simgrid::kernel::activity::CommImpl*, void*, size_t) = &smpi_comm_copy_buffer_callback; -int smpi_process_count() -{ - return process_count; -} - simgrid::smpi::ActorExt* smpi_process() { simgrid::s4u::ActorPtr me = simgrid::s4u::Actor::self(); @@ -236,7 +232,7 @@ static void smpi_check_options() xbt_assert(simgrid::config::get_value("smpi/async-small-thresh") <= simgrid::config::get_value("smpi/send-is-detached-thresh")); - if (simgrid::config::is_default("smpi/host-speed")) { + if (simgrid::config::is_default("smpi/host-speed") && not MC_is_active()) { XBT_INFO("You did not set the power of the host running the simulation. " "The timings will certainly not be accurate. " "Use the option \"--cfg=smpi/host-speed:\" to set its value. " @@ -375,8 +371,10 @@ static void smpi_init_options(){ simgrid::smpi::Colls::set_collectives(); simgrid::smpi::Colls::smpi_coll_cleanup_callback = nullptr; smpi_cpu_threshold = simgrid::config::get_value("smpi/cpu-threshold"); - smpi_host_speed = simgrid::config::get_value("smpi/host-speed"); - xbt_assert(smpi_host_speed > 0.0, "You're trying to set the host_speed to a non-positive value (given: %f)", smpi_host_speed); + if (smpi_cpu_threshold < 0) + smpi_cpu_threshold = DBL_MAX; + + smpi_host_speed = simgrid::config::get_value("smpi/host-speed"); std::string smpi_privatize_option = simgrid::config::get_value("smpi/privatization"); if (smpi_privatize_option == "no" || smpi_privatize_option == "0") smpi_privatize_global_variables = SmpiPrivStrategies::NONE; @@ -398,9 +396,6 @@ static void smpi_init_options(){ smpi_privatize_global_variables = SmpiPrivStrategies::DLOPEN; } - if (smpi_cpu_threshold < 0) - smpi_cpu_threshold = DBL_MAX; - std::string val = simgrid::config::get_value("smpi/shared-malloc"); if ((val == "yes") || (val == "1") || (val == "on") || (val == "global")) { smpi_cfg_shared_malloc = SharedMallocType::GLOBAL; @@ -418,8 +413,8 @@ typedef std::function smpi_entry_point_type; typedef int (* smpi_c_entry_point_type)(int argc, char **argv); typedef void (*smpi_fortran_entry_point_type)(); -static int smpi_run_entry_point(const smpi_entry_point_type& entry_point, const std::string& executable_path, - std::vector args) +template +static int smpi_run_entry_point(const F& entry_point, const std::string& executable_path, std::vector args) { // copy C strings, we need them writable std::vector* args4argv = new std::vector(args.size()); @@ -561,13 +556,11 @@ static void smpi_init_privatization_dlopen(const std::string& executable) char fullpath[512] = {'\0'}; strncpy(fullpath, libname.c_str(), 511); #if not defined(__APPLE__) && not defined(__HAIKU__) - int ret = dl_iterate_phdr(visit_libs, fullpath); - if (ret == 0) - xbt_die("Can't find a linked %s - check the setting you gave to smpi/privatize-libs", fullpath); - else - XBT_DEBUG("Extra lib to privatize found : %s", fullpath); + xbt_assert(0 != dl_iterate_phdr(visit_libs, fullpath), + "Can't find a linked %s - check your settings in smpi/privatize-libs", fullpath); + XBT_DEBUG("Extra lib to privatize '%s' found", fullpath); #else - xbt_die("smpi/privatize-libs is not (yet) compatible with OSX"); + xbt_die("smpi/privatize-libs is not (yet) compatible with OSX nor with Haiku"); #endif privatize_libs_paths.push_back(fullpath); dlclose(libhandle); @@ -683,8 +676,6 @@ int smpi_main(const char* executable, int argc, char* argv[]) SMPI_app_instance_register(smpi_default_instance_name.c_str(), nullptr, process_data.size()); // This call has a side effect on process_count... MPI_COMM_WORLD = *smpi_deployment_comm_world(smpi_default_instance_name); - smpi_universe_size = process_count; - /* Clean IO before the run */ fflush(stdout); @@ -718,7 +709,7 @@ int smpi_main(const char* executable, int argc, char* argv[]) void SMPI_init(){ simgrid::s4u::Actor::on_creation.connect([](simgrid::s4u::Actor& actor) { if (not actor.is_daemon()) { - process_data.insert({&actor, new simgrid::smpi::ActorExt(&actor, nullptr)}); + process_data.insert({&actor, new simgrid::smpi::ActorExt(&actor)}); } }); simgrid::s4u::Actor::on_destruction.connect([](simgrid::s4u::Actor const& actor) {