X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ea10e88fd41a11386d9e3868d72ab8cb933a4292..39263f9f6bcc918f6c2f8632c908b71c76e645ed:/src/smpi/internals/smpi_config.cpp diff --git a/src/smpi/internals/smpi_config.cpp b/src/smpi/internals/smpi_config.cpp index 55b6c77825..614a00e264 100644 --- a/src/smpi/internals/smpi_config.cpp +++ b/src/smpi/internals/smpi_config.cpp @@ -1,12 +1,31 @@ -/* Copyright (c) 2008-2022. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2008-2023. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ -#include "smpi_config.hpp" -#include "include/xbt/config.hpp" -#include "mc/mc.h" + +#if defined(_GNU_SOURCE) + #define DEFINED_GNUSOURCE 1 +#else + #define _GNU_SOURCE +#endif + +#if defined(__linux__) + #include +//inspired by https://stackoverflow.com/a/70211227 + #if not defined(__USE_GNU) + #define __MUSL__ + #endif +#endif + +#ifndef DEFINED_GNUSOURCE + #undef _GNU_SOURCE +#endif + #include "private.hpp" #include "smpi_coll.hpp" +#include "smpi_config.hpp" +#include "src/mc/mc.h" +#include "xbt/config.hpp" #include "xbt/ex.h" #include "xbt/parse_units.hpp" @@ -16,6 +35,7 @@ #if SIMGRID_HAVE_MC #include "src/mc/mc_config.hpp" +#include "src/mc/mc_replay.hpp" #endif #if defined(__APPLE__) @@ -23,8 +43,12 @@ # ifndef MAC_OS_X_VERSION_10_12 # define MAC_OS_X_VERSION_10_12 101200 # endif -constexpr bool HAVE_WORKING_MMAP = (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12); -#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__sun) || defined(__HAIKU__) +# ifndef __MAC_11_0 +# define __MAC_11_0 110000 +# endif + +constexpr bool HAVE_WORKING_MMAP = ((MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12) && (MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_11_0)); +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__sun) || defined(__HAIKU__) || defined(__MUSL__) constexpr bool HAVE_WORKING_MMAP = false; #else constexpr bool HAVE_WORKING_MMAP = true; @@ -41,7 +65,7 @@ simgrid::config::Flag _smpi_cfg_host_speed_string{ [](const std::string& str) { _smpi_cfg_host_speed = xbt_parse_get_speed("smpi/host-speed", 1, str, "option smpi/host-speed"); xbt_assert(_smpi_cfg_host_speed > 0.0, "Invalid value (%s) for 'smpi/host-speed': it must be positive.", - _smpi_cfg_host_speed_string.get().c_str()); + str.c_str()); }}; simgrid::config::Flag _smpi_cfg_simulate_computation{ @@ -104,7 +128,7 @@ simgrid::config::Flag _smpi_cfg_comp_adjustment_file{ auto end = std::next(tok.begin()); std::string location = *it; boost::trim(location); - location2speedup.insert(std::pair(location, std::stod(*end))); + location2speedup.try_emplace(location, std::stod(*end)); } } }}; @@ -272,7 +296,12 @@ void smpi_init_options_internal(bool called_by_smpi_main) simgrid::config::declare_flag( "smpi/or", "Small messages timings (MPI_Recv minimum time for small messages)", "0:0:0:0:0"); - simgrid::config::declare_flag("smpi/finalization-barrier", "Do we add a barrier in MPI_Finalize or not", false); + simgrid::config::declare_flag("smpi/barrier-finalization", {"smpi/finalization-barrier"}, + "Do we add a barrier in MPI_Finalize or not", false); + simgrid::config::declare_flag("smpi/barrier-collectives", + "Inject a barrier in each colllective operation, to detect some deadlocks in " + "incorrect MPI codes, which may not be triggered in all cases", + false); smpi_options_initialized = true; } @@ -280,7 +309,7 @@ void smpi_init_options_internal(bool called_by_smpi_main) void smpi_check_options() { #if SIMGRID_HAVE_MC - if (MC_is_active()) { + if (MC_is_active() || MC_record_replay_is_active()) { if (_sg_mc_buffering == "zero") simgrid::config::set_value("smpi/send-is-detached-thresh", 0); else if (_sg_mc_buffering == "infty")