From 1d1e91a2ab40ed962aad071c18f9bc1672c6f06c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com> Date: Thu, 11 Jul 2024 19:29:26 +0200 Subject: [PATCH] Add new CLI option to allow parallel output --- src/utils/Messenger.cpp | 8 ++++---- src/utils/Messenger.hpp | 4 ++-- src/utils/PugsUtils.cpp | 12 ++++++++---- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/utils/Messenger.cpp b/src/utils/Messenger.cpp index 05dfa43e5..14891477a 100644 --- a/src/utils/Messenger.cpp +++ b/src/utils/Messenger.cpp @@ -9,10 +9,10 @@ namespace parallel Messenger* Messenger::m_instance = nullptr; void -Messenger::create(int& argc, char* argv[]) +Messenger::create(int& argc, char* argv[], bool parallel_output) { if (Messenger::m_instance == nullptr) { - Messenger::m_instance = new Messenger(argc, argv); + Messenger::m_instance = new Messenger(argc, argv, parallel_output); } else { throw UnexpectedError("Messenger already created"); } @@ -28,7 +28,7 @@ Messenger::destroy() } } -Messenger::Messenger([[maybe_unused]] int& argc, [[maybe_unused]] char* argv[]) +Messenger::Messenger([[maybe_unused]] int& argc, [[maybe_unused]] char* argv[], bool parallel_output) { #ifdef PUGS_HAS_MPI MPI_Init(&argc, &argv); @@ -66,7 +66,7 @@ Messenger::Messenger([[maybe_unused]] int& argc, [[maybe_unused]] char* argv[]) return size; }(); - if (m_rank != 0) { + if ((not parallel_output) and (m_rank != 0)) { // LCOV_EXCL_START std::cout.setstate(std::ios::badbit); std::cerr.setstate(std::ios::badbit); diff --git a/src/utils/Messenger.hpp b/src/utils/Messenger.hpp index ac79ee849..a04c664d7 100644 --- a/src/utils/Messenger.hpp +++ b/src/utils/Messenger.hpp @@ -85,7 +85,7 @@ class Messenger }; static Messenger* m_instance; - Messenger(int& argc, char* argv[]); + Messenger(int& argc, char* argv[], bool parallel_output); #ifdef PUGS_HAS_MPI MPI_Comm m_pugs_comm_world = MPI_COMM_WORLD; @@ -406,7 +406,7 @@ class Messenger } public: - static void create(int& argc, char* argv[]); + static void create(int& argc, char* argv[], bool parallel_output = false); static void destroy(); PUGS_INLINE diff --git a/src/utils/PugsUtils.cpp b/src/utils/PugsUtils.cpp index 104e70cdd..3e759212c 100644 --- a/src/utils/PugsUtils.cpp +++ b/src/utils/PugsUtils.cpp @@ -85,9 +85,10 @@ setDefaultOMPEnvironment() std::string initialize(int& argc, char* argv[]) { - bool enable_fpe = true; - bool enable_signals = true; - int nb_threads = -1; + bool enable_fpe = true; + bool enable_signals = true; + int nb_threads = -1; + bool parallel_output = false; ParallelChecker::Mode pc_mode = ParallelChecker::Mode::automatic; std::string pc_filename = ParallelChecker::instance().filename(); @@ -132,6 +133,8 @@ initialize(int& argc, char* argv[]) app.add_flag("--reproducible-sums,!--no-reproducible-sums", show_preamble, "Special treatment of array sums to ensure reproducibility [default: true]"); + app.add_flag("--parallel-output", parallel_output, "All MPI processes output to console [default: false]"); + std::map<std::string, ParallelChecker::Mode> pc_mode_map{{"auto", ParallelChecker::Mode::automatic}, {"write", ParallelChecker::Mode::write}, {"read", ParallelChecker::Mode::read}}; @@ -169,7 +172,8 @@ initialize(int& argc, char* argv[]) SignalManager::setPauseForDebug(pause_on_error); ReproducibleSumManager::setReproducibleSums(reproducible_sums); } - parallel::Messenger::create(argc, argv); + + parallel::Messenger::create(argc, argv, parallel_output); PETScWrapper::initialize(argc, argv); SLEPcWrapper::initialize(argc, argv); -- GitLab