X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/cdf6a962eb4e88efbed3df9c41343adabcf09e6c..4463714490dc394b7b4703969003aaab6f805851:/src/smpi/internals/instr_smpi.cpp diff --git a/src/smpi/internals/instr_smpi.cpp b/src/smpi/internals/instr_smpi.cpp index 30b9bf15be..3fa4aaff53 100644 --- a/src/smpi/internals/instr_smpi.cpp +++ b/src/smpi/internals/instr_smpi.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2010-2019. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2010-2020. 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. */ @@ -90,14 +90,14 @@ static const char* instr_find_color(const char* c_state) return smpi_colors.find(state)->second.c_str(); } for (const auto& pair : smpi_colors) { // Is an entry of our map a substring of this state name? - if (std::strstr(state.c_str(), pair.first.c_str()) != 0) + if (std::strstr(state.c_str(), pair.first.c_str()) != nullptr) return pair.second.c_str(); } return "0.5 0.5 0.5"; // Just in case we find nothing in the map ... } -XBT_PRIVATE container_t smpi_container(int rank) +XBT_PRIVATE simgrid::instr::Container* smpi_container(int rank) { return simgrid::instr::Container::by_name(std::string("rank-") + std::to_string(rank)); } @@ -136,9 +136,9 @@ static std::string TRACE_smpi_get_key(int src, int dst, int tag, int send) return key; } -void TRACE_smpi_setup_container(int rank, sg_host_t host) +void TRACE_smpi_setup_container(int rank, const_sg_host_t host) { - container_t father = simgrid::instr::Container::get_root(); + auto* father = simgrid::instr::Container::get_root(); if (TRACE_smpi_is_grouped()) { father = simgrid::instr::Container::by_name_or_null(host->get_name()); xbt_assert(father != nullptr, "Could not find a parent for mpi rank 'rank-%d' at function %s", rank, __func__); @@ -146,7 +146,7 @@ void TRACE_smpi_setup_container(int rank, 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, const std::string& calling_func) { if (not TRACE_smpi_is_enabled()) return; @@ -155,8 +155,19 @@ 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 - container_t container = smpi_container(rank); + const simgrid::instr::Container* container = smpi_container(rank); papi_counter_t counters = smpi_process()->papi_counters(); for (auto const& it : counters) { @@ -169,34 +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()) - smpi_container(rank) - ->get_state("MPI_STATE") - ->push_event("computing", new simgrid::instr::CpuTIData("compute", amount)); -} - -void TRACE_smpi_computing_out(int rank) -{ - if (TRACE_smpi_is_enabled() && TRACE_smpi_is_computing()) - smpi_container(rank)->get_state("MPI_STATE")->pop_event(); -} - void TRACE_smpi_sleeping_in(int rank, double duration) { if (TRACE_smpi_is_enabled() && TRACE_smpi_is_sleeping()) @@ -252,7 +235,7 @@ void TRACE_smpi_recv(int src, int dst, int tag) } /**************** Functions to trace the migration of tasks. *****************/ -void TRACE_smpi_process_change_host(int rank, sg_host_t new_host) +void TRACE_smpi_process_change_host(int rank, const_sg_host_t new_host) { if (not TRACE_smpi_is_enabled()) return; @@ -262,7 +245,7 @@ void TRACE_smpi_process_change_host(int rank, sg_host_t new_host) counter++; // start link (= tell the trace that this rank moves from A to B) - container_t cont = smpi_container(rank); + auto* cont = smpi_container(rank); simgrid::instr::Container::get_root()->get_link("MIGRATE_LINK")->start_event(cont, "M", key); // Destroy container of this rank on this host