From 4d18789c406e94260275bdd03e624b82518859c3 Mon Sep 17 00:00:00 2001 From: Augustin Degomme Date: Tue, 17 Oct 2023 10:19:06 +0200 Subject: [PATCH] SMPI - delay allocation of mailboxes to save some memory in case they are not needed (when launched actors not really smpi actors) --- examples/smpi/mc/sendsend.tesh | 4 ++-- src/smpi/include/smpi_actor.hpp | 4 ++-- src/smpi/internals/smpi_actor.cpp | 22 +++++++++++++++++++--- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/examples/smpi/mc/sendsend.tesh b/examples/smpi/mc/sendsend.tesh index ece38f56e0..3a628573f9 100644 --- a/examples/smpi/mc/sendsend.tesh +++ b/examples/smpi/mc/sendsend.tesh @@ -22,10 +22,10 @@ $ $VALGRIND_NO_LEAK_CHECK ../../../smpi_script/bin/smpirun -quiet -wrapper "${bi > [0.000000] [ker_engine/INFO] 2 actors are still running, waiting for something. > [0.000000] [ker_engine/INFO] Legend of the following listing: "Actor (@): " > [0.000000] [ker_engine/INFO] Actor 1 (0@node-0.simgrid.org) simcall CommWait(comm_id:1 src:1 dst:-1 mbox:SMPI-2(id:2)) -> [0.000000] [ker_engine/INFO] Actor 2 (1@node-1.simgrid.org) simcall CommWait(comm_id:2 src:2 dst:-1 mbox:SMPI-1(id:0)) +> [0.000000] [ker_engine/INFO] Actor 2 (1@node-1.simgrid.org) simcall CommWait(comm_id:2 src:2 dst:-1 mbox:SMPI-1(id:3)) > [0.000000] [mc_global/INFO] Counter-example execution trace: > [0.000000] [mc_global/INFO] Actor 1 in :0:() ==> simcall: iSend(mbox=2) -> [0.000000] [mc_global/INFO] Actor 2 in :0:() ==> simcall: iSend(mbox=0) +> [0.000000] [mc_global/INFO] Actor 2 in :0:() ==> simcall: iSend(mbox=3) > [0.000000] [mc_Session/INFO] You can debug the problem (and see the whole details) by rerunning out of simgrid-mc with --cfg=model-check/replay:'1;2' > [0.000000] [mc_dfs/INFO] DFS exploration ended. 3 unique states visited; 0 backtracks (0 transition replays, 3 states visited overall) > Execution failed with code 3. diff --git a/src/smpi/include/smpi_actor.hpp b/src/smpi/include/smpi_actor.hpp index f6194db4a5..cb097d26c3 100644 --- a/src/smpi/include/smpi_actor.hpp +++ b/src/smpi/include/smpi_actor.hpp @@ -68,8 +68,8 @@ public: smpi_trace_call_location_t* call_location(); void set_privatized_region(smpi_privatization_region_t region); smpi_privatization_region_t privatized_region() const; - s4u::Mailbox* mailbox() const { return mailbox_; } - s4u::Mailbox* mailbox_small() const { return mailbox_small_; } + s4u::Mailbox* mailbox(); + s4u::Mailbox* mailbox_small(); s4u::MutexPtr mailboxes_mutex() const; #if HAVE_PAPI int papi_event_set() const; diff --git a/src/smpi/internals/smpi_actor.cpp b/src/smpi/internals/smpi_actor.cpp index 83bb79837f..2cd94c93ef 100644 --- a/src/smpi/internals/smpi_actor.cpp +++ b/src/smpi/internals/smpi_actor.cpp @@ -26,8 +26,8 @@ ActorExt::ActorExt(s4u::Actor* actor) : actor_(actor) if (not simgrid::smpi::ActorExt::EXTENSION_ID.valid()) simgrid::smpi::ActorExt::EXTENSION_ID = simgrid::s4u::Actor::extension_create(); - mailbox_ = s4u::Mailbox::by_name("SMPI-" + std::to_string(actor_->get_pid())); - mailbox_small_ = s4u::Mailbox::by_name("small-" + std::to_string(actor_->get_pid())); + mailbox_ = nullptr; + mailbox_small_ = nullptr; mailboxes_mutex_ = s4u::Mutex::create(); timer_ = xbt_os_timer_new(); state_ = SmpiProcessState::UNINITIALIZED; @@ -91,6 +91,22 @@ int ActorExt::initialized() const return (state_ == SmpiProcessState::INITIALIZED); } +/** @brief Return main mailbox of the process */ +s4u::Mailbox* ActorExt::mailbox() +{ + if(mailbox_==nullptr) + mailbox_=s4u::Mailbox::by_name("SMPI-" + std::to_string(actor_->get_pid())); + return mailbox_; +} + +/** @brief Return mailbox for small messages */ +s4u::Mailbox* ActorExt::mailbox_small() +{ + if(mailbox_small_==nullptr) + mailbox_small_=s4u::Mailbox::by_name("small-" + std::to_string(actor_->get_pid())); + return mailbox_small_; +} + /** @brief Mark a process as initialized (=MPI_Init called) */ void ActorExt::mark_as_initialized() { @@ -242,7 +258,7 @@ void ActorExt::init() ext->comm_world_ = smpi_deployment_comm_world(ext->instance_id_); // set the process attached to the mailbox - ext->mailbox_small_->set_receiver(ext->actor_); + ext->mailbox_small()->set_receiver(ext->actor_); XBT_DEBUG("<%ld> SMPI process has been initialized: %p", ext->actor_->get_pid(), ext->actor_); } -- 2.20.1