-/* 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. */
#undef _GNU_SOURCE
#endif
-#include "smpi_config.hpp"
-#include "include/xbt/config.hpp"
-#include "mc/mc.h"
#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"
#include <boost/algorithm/string.hpp> /* trim */
#include <boost/tokenizer.hpp>
-#if SIMGRID_HAVE_MC
#include "src/mc/mc_config.hpp"
-#endif
+#include "src/mc/mc_replay.hpp"
#if defined(__APPLE__)
# include <AvailabilityMacros.h>
# ifndef MAC_OS_X_VERSION_10_12
# define MAC_OS_X_VERSION_10_12 101200
# endif
+# 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);
+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
"Whether we should display the n first MPI handle leaks (addresses and type only) after simulation",
-1);
-simgrid::config::Flag<bool> _smpi_cfg_colls_inject_barrier{
- "smpi/colls-inject-barrier", "Inject a barrier in each colllective operation, to detect some deadlocks in incorrect MPI codes, which may not be triggered in all cases", false };
-
double smpi_cfg_host_speed(){
return _smpi_cfg_host_speed;
}
simgrid::config::declare_flag<std::string>(
"smpi/privatization", "How we should privatize global variable at runtime (no, yes, mmap, dlopen).",
default_privatization, [](const std::string& smpi_privatize_option) {
- if (smpi_privatize_option == "no" || smpi_privatize_option == "0")
+ if (smpi_privatize_option == "no" || smpi_privatize_option == "0" || smpi_privatize_option == "OFF")
_smpi_cfg_privatization = SmpiPrivStrategies::NONE;
- else if (smpi_privatize_option == "yes" || smpi_privatize_option == "1")
+ else if (smpi_privatize_option == "yes" || smpi_privatize_option == "1" || smpi_privatize_option == "ON")
_smpi_cfg_privatization = SmpiPrivStrategies::DEFAULT;
else if (smpi_privatize_option == "mmap")
_smpi_cfg_privatization = SmpiPrivStrategies::MMAP;
simgrid::config::declare_flag<std::string>(
"smpi/or", "Small messages timings (MPI_Recv minimum time for small messages)", "0:0:0:0:0");
- simgrid::config::declare_flag<bool>("smpi/finalization-barrier", "Do we add a barrier in MPI_Finalize or not", false);
+ simgrid::config::declare_flag<bool>("smpi/barrier-finalization", {"smpi/finalization-barrier"},
+ "Do we add a barrier in MPI_Finalize or not", false);
+ simgrid::config::declare_flag<bool>("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;
}
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<int>("smpi/send-is-detached-thresh", 0);
else if (_sg_mc_buffering == "infty")
else
THROW_IMPOSSIBLE;
}
-#endif
xbt_assert(smpi_cfg_async_small_thresh() <= smpi_cfg_detached_send_thresh(),
"smpi/async-small-thresh (=%d) should be smaller or equal to smpi/send-is-detached-thresh (=%d)",
simgrid::smpi::colls::set_collectives();
simgrid::smpi::colls::smpi_coll_cleanup_callback = nullptr;
}
-