X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/bfb1e611d8d12a8d6b3611449c067ee0a39893ec..2f259d0bacb09640eb5a69b025593e91bb2aa005:/src/smpi/internals/instr_smpi.cpp diff --git a/src/smpi/internals/instr_smpi.cpp b/src/smpi/internals/instr_smpi.cpp index 5807ffc423..e4d371fcfb 100644 --- a/src/smpi/internals/instr_smpi.cpp +++ b/src/smpi/internals/instr_smpi.cpp @@ -5,11 +5,13 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include "private.hpp" +#include #include #include #include #include #include +#include XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_smpi, instr, "Tracing SMPI"); @@ -59,38 +61,28 @@ static const char *smpi_colors[] ={ nullptr, nullptr, }; -static char *str_tolower (const char *str) +static const char* instr_find_color(const char* state) { - char* ret = xbt_strdup(str); - int n = strlen(ret); - for (int i = 0; i < n; i++) - ret[i] = tolower (str[i]); - return ret; -} - -static const char *instr_find_color (const char *state) -{ - char* target = str_tolower(state); + std::string target = std::string(state); + boost::algorithm::to_lower(target); const char* ret = nullptr; unsigned int i = 0; const char* current = smpi_colors[i]; while (current != nullptr) { - if (strcmp (state, current) == 0 //exact match - || strstr(target, current) != 0 ){//as substring - ret = smpi_colors[i+1]; - break; + if (state == current // exact match + || target.find(current) != 0) { // as substring + ret = smpi_colors[i + 1]; + break; } i+=2; current = smpi_colors[i]; } - xbt_free(target); return ret; } -XBT_PRIVATE char *smpi_container(int rank, char *container, int n) +XBT_PRIVATE std::string smpi_container(int rank) { - snprintf(container, n, "rank-%d", rank); - return container; + return std::string("rank-") + std::to_string(rank); } static char *TRACE_smpi_get_key(int src, int dst, int tag, char *key, int n, int send); @@ -184,8 +176,7 @@ void TRACE_smpi_init(int rank) if (not TRACE_smpi_is_enabled()) return; - char str[INSTR_DEFAULT_STR_SIZE]; - smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); + std::string str = smpi_container(rank); container_t father; if (TRACE_smpi_is_grouped()){ @@ -193,8 +184,7 @@ void TRACE_smpi_init(int rank) }else{ father = PJ_container_get_root (); } - xbt_assert(father!=nullptr, - "Could not find a parent for mpi rank %s at function %s", str, __FUNCTION__); + xbt_assert(father != nullptr, "Could not find a parent for mpi rank %s at function %s", str.c_str(), __FUNCTION__); #if HAVE_PAPI container_t container = #endif @@ -219,9 +209,8 @@ void TRACE_smpi_finalize(int rank) if (not TRACE_smpi_is_enabled()) return; - char str[INSTR_DEFAULT_STR_SIZE]; - container_t container = simgrid::instr::Container::byName(smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE)); - PJ_container_remove_from_parent (container); + container_t container = simgrid::instr::Container::byName(smpi_container(rank)); + container->removeFromParent(); delete container; } @@ -232,13 +221,12 @@ void TRACE_smpi_collective_in(int rank, const char *operation, instr_extra_data return; } - char str[INSTR_DEFAULT_STR_SIZE]; - smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = simgrid::instr::Container::byName(str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); + container_t container = simgrid::instr::Container::byName(smpi_container(rank)); + simgrid::instr::Type* type = container->type_->byName("MPI_STATE"); const char *color = instr_find_color (operation); - simgrid::instr::Value* val = simgrid::instr::Value::byNameOrCreate(operation, color, type); - new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, type, val, static_cast(extra)); + type->addEntityValue(operation, color); + new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, type, type->getEntityValue(operation), + static_cast(extra)); } void TRACE_smpi_collective_out(int rank, const char *operation) @@ -246,10 +234,8 @@ void TRACE_smpi_collective_out(int rank, const char *operation) if (not TRACE_smpi_is_enabled()) return; - char str[INSTR_DEFAULT_STR_SIZE]; - smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = simgrid::instr::Container::byName(str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); + container_t container = simgrid::instr::Container::byName(smpi_container(rank)); + simgrid::instr::Type* type = container->type_->byName("MPI_STATE"); new simgrid::instr::PopStateEvent(SIMIX_get_clock(), container, type); } @@ -260,13 +246,10 @@ void TRACE_smpi_computing_init(int rank) if (not TRACE_smpi_is_enabled() || not TRACE_smpi_is_computing()) return; - char str[INSTR_DEFAULT_STR_SIZE]; - smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = simgrid::instr::Container::byName(str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); - const char* color = instr_find_color("computing"); - new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, type, - simgrid::instr::Value::byNameOrCreate("computing", color, type)); + container_t container = simgrid::instr::Container::byName(smpi_container(rank)); + simgrid::instr::Type* type = container->type_->byName("MPI_STATE"); + type->addEntityValue("computing", instr_find_color("computing")); + new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, type, type->getEntityValue("computing")); } void TRACE_smpi_computing_in(int rank, instr_extra_data extra) @@ -277,22 +260,20 @@ void TRACE_smpi_computing_in(int rank, instr_extra_data extra) return; } - char str[INSTR_DEFAULT_STR_SIZE]; - smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = simgrid::instr::Container::byName(str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); - simgrid::instr::Value* val = simgrid::instr::Value::byNameOrCreate("computing", "", type); - new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, type, val, static_cast(extra)); + container_t container = simgrid::instr::Container::byName(smpi_container(rank)); + simgrid::instr::Type* type = container->type_->byName("MPI_STATE"); + type->addEntityValue("computing"); + new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, type, type->getEntityValue("computing"), + static_cast(extra)); } void TRACE_smpi_computing_out(int rank) { if (not TRACE_smpi_is_enabled() || not TRACE_smpi_is_computing()) return; - char str[INSTR_DEFAULT_STR_SIZE]; - smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = simgrid::instr::Container::byName(str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); + + container_t container = simgrid::instr::Container::byName(smpi_container(rank)); + simgrid::instr::Type* type = container->type_->byName("MPI_STATE"); new simgrid::instr::PopStateEvent(SIMIX_get_clock(), container, type); } @@ -302,13 +283,10 @@ void TRACE_smpi_sleeping_init(int rank) if (not TRACE_smpi_is_enabled() || not TRACE_smpi_is_sleeping()) return; - char str[INSTR_DEFAULT_STR_SIZE]; - smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = simgrid::instr::Container::byName(str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); - const char *color = instr_find_color ("sleeping"); - simgrid::instr::Value* val = simgrid::instr::Value::byNameOrCreate("sleeping", color, type); - new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, type, val); + container_t container = simgrid::instr::Container::byName(smpi_container(rank)); + simgrid::instr::Type* state = container->type_->byName("MPI_STATE"); + state->addEntityValue("sleeping", instr_find_color("sleeping")); + new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, state, state->getEntityValue("sleeping")); } void TRACE_smpi_sleeping_in(int rank, instr_extra_data extra) @@ -319,22 +297,20 @@ void TRACE_smpi_sleeping_in(int rank, instr_extra_data extra) return; } - char str[INSTR_DEFAULT_STR_SIZE]; - smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = simgrid::instr::Container::byName(str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); - simgrid::instr::Value* val = simgrid::instr::Value::byNameOrCreate("sleeping", "", type); - new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, type, val, static_cast(extra)); + container_t container = simgrid::instr::Container::byName(smpi_container(rank)); + simgrid::instr::Type* state = container->type_->byName("MPI_STATE"); + state->addEntityValue("sleeping"); + new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, state, state->getEntityValue("sleeping"), + static_cast(extra)); } void TRACE_smpi_sleeping_out(int rank) { if (not TRACE_smpi_is_enabled() || not TRACE_smpi_is_sleeping()) return; - char str[INSTR_DEFAULT_STR_SIZE]; - smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = simgrid::instr::Container::byName(str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); + + container_t container = simgrid::instr::Container::byName(smpi_container(rank)); + simgrid::instr::Type* type = container->type_->byName("MPI_STATE"); new simgrid::instr::PopStateEvent(SIMIX_get_clock(), container, type); } @@ -346,22 +322,20 @@ void TRACE_smpi_testing_in(int rank, instr_extra_data extra) return; } - char str[INSTR_DEFAULT_STR_SIZE]; - smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = simgrid::instr::Container::byName(str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); - simgrid::instr::Value* val = simgrid::instr::Value::byNameOrCreate("test", "", type); - new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, type, val, static_cast(extra)); + container_t container = simgrid::instr::Container::byName(smpi_container(rank)); + simgrid::instr::Type* state = container->type_->byName("MPI_STATE"); + state->addEntityValue("test"); + new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, state, state->getEntityValue("test"), + static_cast(extra)); } void TRACE_smpi_testing_out(int rank) { if (not TRACE_smpi_is_enabled()) return; - char str[INSTR_DEFAULT_STR_SIZE]; - smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = simgrid::instr::Container::byName(str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); + + container_t container = simgrid::instr::Container::byName(smpi_container(rank)); + simgrid::instr::Type* type = container->type_->byName("MPI_STATE"); new simgrid::instr::PopStateEvent(SIMIX_get_clock(), container, type); } @@ -372,13 +346,11 @@ void TRACE_smpi_ptp_in(int rank, const char *operation, instr_extra_data extra) return; } - char str[INSTR_DEFAULT_STR_SIZE]; - smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = simgrid::instr::Container::byName(str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); - const char *color = instr_find_color (operation); - simgrid::instr::Value* val = simgrid::instr::Value::byNameOrCreate(operation, color, type); - new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, type, val, static_cast(extra)); + container_t container = simgrid::instr::Container::byName(smpi_container(rank)); + simgrid::instr::Type* state = container->type_->byName("MPI_STATE"); + state->addEntityValue(operation, instr_find_color(operation)); + new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, state, state->getEntityValue(operation), + static_cast(extra)); } void TRACE_smpi_ptp_out(int rank, int dst, const char *operation) @@ -386,10 +358,8 @@ void TRACE_smpi_ptp_out(int rank, int dst, const char *operation) if (not TRACE_smpi_is_enabled()) return; - char str[INSTR_DEFAULT_STR_SIZE]; - smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = simgrid::instr::Container::byName(str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); + container_t container = simgrid::instr::Container::byName(smpi_container(rank)); + simgrid::instr::Type* type = container->type_->byName("MPI_STATE"); new simgrid::instr::PopStateEvent(SIMIX_get_clock(), container, type); } @@ -402,10 +372,8 @@ void TRACE_smpi_send(int rank, int src, int dst, int tag, int size) char key[INSTR_DEFAULT_STR_SIZE] = {0}; TRACE_smpi_get_key(src, dst, tag, key, INSTR_DEFAULT_STR_SIZE,1); - char str[INSTR_DEFAULT_STR_SIZE]; - smpi_container(src, str, INSTR_DEFAULT_STR_SIZE); - container_t container = simgrid::instr::Container::byName(str); - simgrid::instr::Type* type = PJ_type_get_root()->getChild("MPI_LINK"); + container_t container = simgrid::instr::Container::byName(smpi_container(rank)); + simgrid::instr::Type* type = simgrid::instr::Type::getRootType()->byName("MPI_LINK"); XBT_DEBUG("Send tracing from %d to %d, tag %d, with key %s", src, dst, tag, key); new simgrid::instr::StartLinkEvent(SIMIX_get_clock(), PJ_container_get_root(), type, container, "PTP", key, size); } @@ -418,10 +386,8 @@ void TRACE_smpi_recv(int src, int dst, int tag) char key[INSTR_DEFAULT_STR_SIZE] = {0}; TRACE_smpi_get_key(src, dst, tag, key, INSTR_DEFAULT_STR_SIZE,0); - char str[INSTR_DEFAULT_STR_SIZE]; - smpi_container(dst, str, INSTR_DEFAULT_STR_SIZE); - container_t container = simgrid::instr::Container::byName(str); - simgrid::instr::Type* type = PJ_type_get_root()->getChild("MPI_LINK"); + container_t container = simgrid::instr::Container::byName(smpi_container(dst)); + simgrid::instr::Type* type = simgrid::instr::Type::getRootType()->byName("MPI_LINK"); XBT_DEBUG("Recv tracing from %d to %d, tag %d, with key %s", src, dst, tag, key); new simgrid::instr::EndLinkEvent(SIMIX_get_clock(), PJ_container_get_root(), type, container, "PTP", key); }