From: Christian Heinrich Date: Wed, 16 May 2018 13:24:48 +0000 (+0200) Subject: [SMPI] Add 3 tracing functions for SAMPI X-Git-Tag: v3_21~339 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/e2571d096e408ef4b778cb3ce8c8298c024816e6 [SMPI] Add 3 tracing functions for SAMPI - TRACE_Iteration_in - TRACE_Iteration_out - TRACE_migration_call --- diff --git a/src/instr/instr_smpi.hpp b/src/instr/instr_smpi.hpp index 4a7130a3c2..8bced802cd 100644 --- a/src/instr/instr_smpi.hpp +++ b/src/instr/instr_smpi.hpp @@ -32,6 +32,9 @@ XBT_PRIVATE void TRACE_smpi_finalize(int rank); XBT_PRIVATE void TRACE_smpi_send_process_data_in(int rank); XBT_PRIVATE void TRACE_smpi_send_process_data_out(int rank); XBT_PRIVATE void TRACE_smpi_process_change_host(int rank, sg_host_t new_host); +XBT_PRIVATE void TRACE_Iteration_in(int rank, simgrid::instr::TIData* extra); +XBT_PRIVATE void TRACE_Iteration_out(int rank, simgrid::instr::TIData* extra); +XBT_PRIVATE void TRACE_migration_call(int rank, simgrid::instr::TIData* extra); class smpi_trace_call_location_t { public: diff --git a/src/smpi/internals/instr_smpi.cpp b/src/smpi/internals/instr_smpi.cpp index 3f7fcd3fed..30352d17ac 100644 --- a/src/smpi/internals/instr_smpi.cpp +++ b/src/smpi/internals/instr_smpi.cpp @@ -317,3 +317,47 @@ void TRACE_smpi_process_change_host(int rank, sg_host_t new_host) cont = smpi_container(rank); // This points to the newly created container simgrid::instr::Container::get_root()->get_link("MIGRATE_LINK")->end_event(cont, "M", key); } + +void TRACE_Iteration_in(int rank, simgrid::instr::TIData* extra) +{ + if (not TRACE_smpi_is_enabled()) { + delete extra; + return; + } + smpi_container(rank)->get_state("MPI_STATE")->add_entity_value("iteration", instr_find_color("iteration")); + smpi_container(rank)->get_state("MPI_STATE")->push_event("iteration", extra); +} + +void TRACE_Iteration_out(int rank, simgrid::instr::TIData* extra) +{ + if (not TRACE_smpi_is_enabled()) return; + + smpi_container(rank)->get_state("MPI_STATE")->pop_event(extra); +} + +void TRACE_migration_call(int rank, simgrid::instr::TIData* extra) +{ + if (not TRACE_smpi_is_enabled()) return; + + const std::string operation = "migrate"; + if(smpi_process()->replaying()) {//When replaying, we register an event. + smpi_container(rank)->get_state("MIGRATE_STATE")->add_entity_value(operation); + + simgrid::instr::EventType* type = + static_cast(smpi_container(rank)->type_->by_name(operation)); + new simgrid::instr::NewEvent(smpi_process()->simulated_elapsed(), smpi_container(rank), type, + type->get_entity_value(operation)); + } else { + // From rktesser: Ugly workaround! + // TI tracing uses states as events, and does not support printing events. + // So, we need a different code than for replay in order to be able to + // generate ti_traces for the migration calls. + if (!TRACE_smpi_is_enabled()) { + delete extra; + return; + } + smpi_container(rank)->get_state("MIGRATE_STATE")->add_entity_value(operation, instr_find_color(operation.c_str())); + smpi_container(rank)->get_state("MIGRATE_STATE")->push_event(operation, extra); + smpi_container(rank)->get_state("MIGRATE_STATE")->pop_event(); + } +}