From 4326c258372488ae763695bc79b0529ab96cc20d Mon Sep 17 00:00:00 2001 From: Frederic Suter Date: Mon, 27 Apr 2020 12:14:25 +0200 Subject: [PATCH] refactoring SMPI trace initialization --- src/instr/instr_smpi.hpp | 5 ++--- src/smpi/bindings/smpi_pmpi.cpp | 6 +----- src/smpi/internals/instr_smpi.cpp | 27 ++++++++++++--------------- src/smpi/internals/smpi_global.cpp | 2 +- src/smpi/internals/smpi_replay.cpp | 5 +---- 5 files changed, 17 insertions(+), 28 deletions(-) diff --git a/src/instr/instr_smpi.hpp b/src/instr/instr_smpi.hpp index a99c15f45c..2a24491bc8 100644 --- a/src/instr/instr_smpi.hpp +++ b/src/instr/instr_smpi.hpp @@ -14,17 +14,16 @@ XBT_PRIVATE container_t smpi_container(int rank); XBT_PRIVATE void TRACE_smpi_setup_container(int rank, const_sg_host_t host); -XBT_PRIVATE void TRACE_smpi_computing_init(int rank); XBT_PRIVATE void TRACE_smpi_computing_out(int rank); XBT_PRIVATE void TRACE_smpi_computing_in(int rank, double amount); -XBT_PRIVATE void TRACE_smpi_sleeping_init(int rank); XBT_PRIVATE void TRACE_smpi_sleeping_out(int rank); XBT_PRIVATE void TRACE_smpi_sleeping_in(int rank, double duration); XBT_PRIVATE void TRACE_smpi_comm_in(int rank, const char* operation, simgrid::instr::TIData* extra); XBT_PRIVATE void TRACE_smpi_comm_out(int rank); XBT_PRIVATE void TRACE_smpi_send(int rank, int src, int dst, int tag, int size); XBT_PRIVATE void TRACE_smpi_recv(int src, int dst, int tag); -XBT_PRIVATE void TRACE_smpi_init(int rank); +XBT_PRIVATE void TRACE_smpi_init(int rank, std::string calling_func); + /* SMPI + LB (load balancer) */ XBT_PRIVATE void TRACE_smpi_process_change_host(int rank, const_sg_host_t new_host); diff --git a/src/smpi/bindings/smpi_pmpi.cpp b/src/smpi/bindings/smpi_pmpi.cpp index 0b484fd3b4..de3c35d79a 100644 --- a/src/smpi/bindings/smpi_pmpi.cpp +++ b/src/smpi/bindings/smpi_pmpi.cpp @@ -42,11 +42,7 @@ int PMPI_Init(int*, char***) simgrid::smpi::ActorExt::init(); int rank_traced = simgrid::s4u::this_actor::get_pid(); - TRACE_smpi_init(rank_traced); - TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::NoOpTIData("init")); - TRACE_smpi_comm_out(rank_traced); - TRACE_smpi_computing_init(rank_traced); - TRACE_smpi_sleeping_init(rank_traced); + TRACE_smpi_init(rank_traced, __func__); smpi_bench_begin(); smpi_process()->mark_as_initialized(); diff --git a/src/smpi/internals/instr_smpi.cpp b/src/smpi/internals/instr_smpi.cpp index 4c27a616fb..dd5b325945 100644 --- a/src/smpi/internals/instr_smpi.cpp +++ b/src/smpi/internals/instr_smpi.cpp @@ -146,7 +146,7 @@ void TRACE_smpi_setup_container(int rank, const_sg_host_t host) father->create_child(std::string("rank-") + std::to_string(rank), "MPI"); // This container is of type MPI } -void TRACE_smpi_init(int rank) +void TRACE_smpi_init(int rank, std::string calling_func) { if (not TRACE_smpi_is_enabled()) return; @@ -155,6 +155,17 @@ void TRACE_smpi_init(int rank) TRACE_smpi_setup_container(rank, sg_host_self()); simgrid::s4u::this_actor::on_exit([self](bool) { smpi_container(self->get_pid())->remove_from_parent(); }); + + simgrid::instr::StateType* state = smpi_container(rank)->get_state("MPI_STATE"); + + state->add_entity_value(calling_func, instr_find_color(calling_func.c_str())); + state->push_event(calling_func, new simgrid::instr::NoOpTIData("init")); + state->pop_event(); + if (TRACE_smpi_is_computing()) + state->add_entity_value("computing", instr_find_color("computing")); + if (TRACE_smpi_is_sleeping()) + state->add_entity_value("sleeping", instr_find_color("sleeping")); + #if HAVE_PAPI const simgrid::instr::Container* container = smpi_container(rank); papi_counter_t counters = smpi_process()->papi_counters(); @@ -169,20 +180,6 @@ void TRACE_smpi_init(int rank) #endif } -void TRACE_smpi_computing_init(int rank) -{ - //first use, initialize the color in the trace - if (TRACE_smpi_is_enabled() && TRACE_smpi_is_computing()) - smpi_container(rank)->get_state("MPI_STATE")->add_entity_value("computing", instr_find_color("computing")); -} - -void TRACE_smpi_sleeping_init(int rank) -{ - //first use, initialize the color in the trace - if (TRACE_smpi_is_enabled() && TRACE_smpi_is_sleeping()) - smpi_container(rank)->get_state("MPI_STATE")->add_entity_value("sleeping", instr_find_color("sleeping")); -} - void TRACE_smpi_computing_in(int rank, double amount) { if (TRACE_smpi_is_enabled() && TRACE_smpi_is_computing()) diff --git a/src/smpi/internals/smpi_global.cpp b/src/smpi/internals/smpi_global.cpp index 7ddc56596c..c3e32fa864 100644 --- a/src/smpi/internals/smpi_global.cpp +++ b/src/smpi/internals/smpi_global.cpp @@ -642,5 +642,5 @@ void smpi_mpi_init() { } void SMPI_thread_create() { - TRACE_smpi_init(simgrid::s4u::this_actor::get_pid()); + TRACE_smpi_init(simgrid::s4u::this_actor::get_pid(), __func__); } diff --git a/src/smpi/internals/smpi_replay.cpp b/src/smpi/internals/smpi_replay.cpp index 1cd1302092..d05719e85d 100644 --- a/src/smpi/internals/smpi_replay.cpp +++ b/src/smpi/internals/smpi_replay.cpp @@ -773,10 +773,7 @@ void smpi_replay_init(const char* instance_id, int rank, double start_delay_flop int my_proc_id = simgrid::s4u::this_actor::get_pid(); - TRACE_smpi_init(my_proc_id); - TRACE_smpi_computing_init(my_proc_id); - TRACE_smpi_comm_in(my_proc_id, "smpi_replay_run_init", new simgrid::instr::NoOpTIData("init")); - TRACE_smpi_comm_out(my_proc_id); + TRACE_smpi_init(my_proc_id, "smpi_replay_run_init"); xbt_replay_action_register("init", [](simgrid::xbt::ReplayAction& action) { simgrid::smpi::replay::InitAction().execute(action); }); xbt_replay_action_register("finalize", [](simgrid::xbt::ReplayAction const&) { /* nothing to do */ }); xbt_replay_action_register("comm_size", [](simgrid::xbt::ReplayAction& action) { simgrid::smpi::replay::CommunicatorAction().execute(action); }); -- 2.20.1