From: Christian Heinrich Date: Thu, 2 Aug 2018 15:28:47 +0000 (+0200) Subject: [SAMPI] Move tracing functions definitions to instr_ampi.cpp X-Git-Tag: v3_21~322 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/61084fdc1e2f405d26e40050355ddbe063c0f404?hp=da282b56cdb81ba36fbc99a8ed065c2937838363 [SAMPI] Move tracing functions definitions to instr_ampi.cpp This will still not build, but it is simpler to to see the changes with smaller commits --- diff --git a/src/smpi/internals/instr_smpi.cpp b/src/smpi/internals/instr_smpi.cpp index 30352d17ac..792376a21e 100644 --- a/src/smpi/internals/instr_smpi.cpp +++ b/src/smpi/internals/instr_smpi.cpp @@ -56,7 +56,6 @@ static std::map smpi_colors = {{"recv", "1 0 0"}, {"put", "0.3 1 0"}, {"get", "0 1 0.3"}, {"accumulate", "1 0.3 0"}, - {"migration", "0.2 0.5 0.2"}, {"rput", "0.3 1 0"}, {"rget", "0 1 0.3"}, {"raccumulate", "1 0.3 0"}, @@ -318,46 +317,3 @@ void TRACE_smpi_process_change_host(int rank, sg_host_t new_host) 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(); - } -} diff --git a/src/smpi/plugins/ampi/instr_ampi.cpp b/src/smpi/plugins/ampi/instr_ampi.cpp new file mode 100644 index 0000000000..cd6d53b6df --- /dev/null +++ b/src/smpi/plugins/ampi/instr_ampi.cpp @@ -0,0 +1,60 @@ +/* Copyright (c) 2010-2018. The SimGrid Team. All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + +#include "src/smpi/plugins/ampi/instr_ampi.hpp" +#include "smpi/smpi.h" +#include "src/instr/instr_private.hpp" +#include +#include + +XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_sampi, instr, "Tracing (S)AMPI"); + +static std::map ampi_colors = {{"migrate", "0.2 0.5 0.2"}, + {"iteration", "0.5 0.5 0.5"} +}; + +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", ampi_colors["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 { + // FIXME 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, ampi_colors[operation.c_str()]); + smpi_container(rank)->get_state("MIGRATE_STATE")->push_event(operation, extra); + smpi_container(rank)->get_state("MIGRATE_STATE")->pop_event(); + } +}