Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of https://framagit.org/simgrid/simgrid
authormlaurent <mathieu.laurent@ens-rennes.fr>
Tue, 13 Jun 2023 13:05:28 +0000 (15:05 +0200)
committermlaurent <mathieu.laurent@ens-rennes.fr>
Tue, 13 Jun 2023 13:05:28 +0000 (15:05 +0200)
src/mc/inspect/mc_unw.cpp
src/mc/inspect/mc_unw_vmread.cpp
src/smpi/colls/smpi_coll.cpp
src/smpi/include/smpi_coll.hpp
src/smpi/internals/smpi_global.cpp
src/smpi/smpirun.in
teshsuite/smpi/CMakeLists.txt

index d7e0c92..c93f195 100644 (file)
@@ -211,8 +211,15 @@ unw_addr_space_t UnwindContext::createUnwindAddressSpace()
    *
    * Use nullptr as access_fpreg and resume, as we don't need them.
    */
-  unw_accessors_t accessors = {&find_proc_info, &put_unwind_info, &get_dyn_info_list_addr, &access_mem, &access_reg,
-                               nullptr,         nullptr,          &get_proc_name};
+  unw_accessors_t accessors        = {};
+  accessors.find_proc_info         = &find_proc_info;
+  accessors.put_unwind_info        = &put_unwind_info;
+  accessors.get_dyn_info_list_addr = &get_dyn_info_list_addr;
+  accessors.access_mem             = &access_mem;
+  accessors.access_reg             = &access_reg;
+  accessors.access_fpreg           = nullptr;
+  accessors.resume                 = nullptr;
+  accessors.get_proc_name          = &get_proc_name;
   return unw_create_addr_space(&accessors, BYTE_ORDER);
 }
 
index 21fc478..7241da9 100644 (file)
@@ -98,9 +98,8 @@ unw_addr_space_t create_addr_space()
    */
   // TODO, we could get rid of this if we properly stop the model-checked
   // process before reading the memory.
-  unw_accessors_t accessors = {&_UPT_find_proc_info, &_UPT_put_unwind_info, &_UPT_get_dyn_info_list_addr,
-                               &access_mem,          &_UPT_access_reg,      &_UPT_access_fpreg,
-                               &_UPT_resume,         &_UPT_get_proc_name};
+  unw_accessors_t accessors = _UPT_accessors;
+  accessors.access_mem      = &access_mem;
   return unw_create_addr_space(&accessors, BYTE_ORDER);
 }
 
index b9d1680..c2c0000 100644 (file)
 #include "smpi_request.hpp"
 #include "xbt/config.hpp"
 
+#include <iomanip>
 #include <map>
+#include <numeric>
+#include <sstream>
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_coll, smpi, "Logging specific to SMPI collectives.");
 
@@ -242,6 +245,29 @@ std::vector<s_mpi_coll_description_t>* colls::get_smpi_coll_descriptions(const s
   return &iter->second;
 }
 
+std::string colls::get_smpi_coll_help()
+{
+  size_t max_name_len =
+      std::accumulate(begin(smpi_coll_descriptions), end(smpi_coll_descriptions), 0, [](auto len, auto const& coll) {
+        return std::max(len, std::accumulate(begin(coll.second), end(coll.second), 0, [](auto len, auto const& descr) {
+                          return std::max<size_t>(len, descr.name.length());
+                        }));
+      });
+  std::ostringstream oss;
+  std::string title = "Available collective algorithms (select them with \"smpi/collective_name:algo_name\"):";
+  oss << title << '\n' << std::setfill('=') << std::setw(title.length() + 1) << '\n';
+  for (auto const& [coll, algos] : smpi_coll_descriptions) {
+    std::string line = "Collective: \"" + coll + "\"";
+    oss << line << '\n' << std::setfill('-') << std::setw(line.length() + 1) << '\n';
+    oss << std::setfill(' ') << std::left;
+    for (auto const& [name, descr, _] : algos)
+      oss << "  " << std::setw(max_name_len) << name << " " << descr << "\n";
+    oss << std::right << '\n';
+  }
+  oss << "Please see https://simgrid.org/doc/latest/app_smpi.html#available-algorithms for more information.\n";
+  return oss.str();
+}
+
 static s_mpi_coll_description_t* find_coll_description(const std::string& collective, const std::string& algo)
 {
   std::vector<s_mpi_coll_description_t>* table = colls::get_smpi_coll_descriptions(collective);
index b882209..786a5e8 100644 (file)
@@ -57,6 +57,7 @@ struct s_mpi_coll_description_t {
 namespace colls {
 void set_collectives();
 XBT_PUBLIC std::vector<s_mpi_coll_description_t>* get_smpi_coll_descriptions(const std::string& name);
+std::string get_smpi_coll_help();
 
 void set_gather(const std::string& name);
 void set_allgather(const std::string& name);
index b7d4dce..36a3e39 100644 (file)
@@ -520,6 +520,10 @@ int smpi_main(const char* executable, int argc, char* argv[])
      * configuration tools */
     return 0;
   }
+  if (argv[0] == std::string("--help-coll")) {
+    std::cerr << simgrid::smpi::colls::get_smpi_coll_help();
+    return 0;
+  }
 
   smpi_init_options_internal(true);
   simgrid::s4u::Engine engine(&argc, argv);
index 2e94996..194934f 100755 (executable)
@@ -59,6 +59,8 @@ Options:
 
   -version                   # Displays the SimGrid version (human readable)
   -git-version               # Displays the git hash of SimGrid
+  -help                      # Displays this information
+  -help-coll                 # Displays all available collective algorithms
 
 or (deprecated usage):
   $0 [-keep-temps] [-np <numprocs>] [-bandwidth <bytes/sec>] [-latency <secs>] program [program-options]
@@ -240,6 +242,10 @@ while true; do
             usage
             exit 0
             ;;
+        "-help-coll" | "--help-coll")
+            ${WRAPPER} "@SMPIMAIN@" --help-coll
+            exit 0
+            ;;
         "-version" | "--version" | "-v")
             printf '%b\n' "$SIMGRID_VERSION"
             exit 0
index ce735ed..25b8ce3 100644 (file)
@@ -57,6 +57,8 @@ set(bin_files       ${bin_files}    ${CMAKE_CURRENT_SOURCE_DIR}/hostfile
 
 
 if(enable_smpi)
+  ADD_TEST(test-smpi-help-coll ${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -wrapper "${VALGRIND_WRAPPER_NO_LEAK_CHECK}" --help-coll)
+
   ADD_TESH_FACTORIES(tesh-smpi-macro-shared "*" --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/macro-shared --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi/macro-shared ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/macro-shared/macro-shared.tesh)
   ADD_TESH_FACTORIES(tesh-smpi-auto-shared "*" --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/auto-shared --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi/auto-shared ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/auto-shared/auto-shared.tesh)
   ADD_TESH_FACTORIES(tesh-smpi-macro-partial-shared "*" --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/macro-partial-shared --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi/macro-partial-shared ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/macro-partial-shared/macro-partial-shared.tesh)