Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
get rid of kind field in instr Type
[simgrid.git] / src / smpi / internals / instr_smpi.cpp
index e4d371fcfbc83ee53b521fc39e46520eac5b8704..598569334837f6907440a9bd33dbf72f9741a386 100644 (file)
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_smpi, instr, "Tracing SMPI");
 
-static std::unordered_map<char*, std::deque<std::string>*> keys;
-
-static const char *smpi_colors[] ={
-    "recv",     "1 0 0",
-    "irecv",    "1 0.52 0.52",
-    "send",     "0 0 1",
-    "isend",    "0.52 0.52 1",
-    "sendrecv", "0 1 1",
-    "wait",     "1 1 0",
-    "waitall",  "0.78 0.78 0",
-    "waitany",  "0.78 0.78 0.58",
-    "test",     "0.52 0.52 0",
-
-    "allgather",     "1 0 0",
-    "allgatherv",    "1 0.52 0.52",
-    "allreduce",     "1 0 1",
-    "alltoall",      "0.52 0 1",
-    "alltoallv",     "0.78 0.52 1",
-    "barrier",       "0 0.78 0.78",
-    "bcast",         "0 0.78 0.39",
-    "gather",        "1 1 0",
-    "gatherv",       "1 1 0.52",
-    "reduce",        "0 1 0",
-    "reducescatter", "0.52 1 0.52",
-    "scan",          "1 0.58 0.23",
-    "exscan",          "1 0.54 0.25",
-    "scatterv",      "0.52 0 0.52",
-    "scatter",       "1 0.74 0.54",
-
-    "computing",     "0 1 1",
-    "sleeping",      "0 0.5 0.5",
-
-    "init",       "0 1 0",
-    "finalize",     "0 1 0",
-
-    "put",       "0.3 1 0",
-    "get",       "0 1 0.3",
-    "accumulate",       "1 0.3 0",
-    "win_fence",       "1 0 0.3",
-    "win_post",       "1 0 0.8",
-    "win_wait",       "1 0.8 0",
-    "win_start",       "0.8 0 1",
-    "win_complete",       "0.8 1 0",
-    nullptr, nullptr,
+static std::unordered_map<std::string, std::deque<std::string>*> keys;
+
+static const char* smpi_colors[] = {
+    "recv",      "1 0 0",       "irecv",         "1 0.52 0.52",    "send",       "0 0 1",
+    "isend",     "0.52 0.52 1", "sendrecv",      "0 1 1",          "wait",       "1 1 0",
+    "waitall",   "0.78 0.78 0", "waitany",       "0.78 0.78 0.58", "test",       "0.52 0.52 0",
+
+    "allgather", "1 0 0",       "allgatherv",    "1 0.52 0.52",    "allreduce",  "1 0 1",
+    "alltoall",  "0.52 0 1",    "alltoallv",     "0.78 0.52 1",    "barrier",    "0 0.78 0.78",
+    "bcast",     "0 0.78 0.39", "gather",        "1 1 0",          "gatherv",    "1 1 0.52",
+    "reduce",    "0 1 0",       "reducescatter", "0.52 1 0.52",    "scan",       "1 0.58 0.23",
+    "exscan",    "1 0.54 0.25", "scatterv",      "0.52 0 0.52",    "scatter",    "1 0.74 0.54",
+
+    "computing", "0 1 1",       "sleeping",      "0 0.5 0.5",
+
+    "init",      "0 1 0",       "finalize",      "0 1 0",
+
+    "put",       "0.3 1 0",     "get",           "0 1 0.3",        "accumulate", "1 0.3 0",
+    "win_fence", "1 0 0.3",     "win_post",      "1 0 0.8",        "win_wait",   "1 0.8 0",
+    "win_start", "0.8 0 1",     "win_complete",  "0.8 1 0",        nullptr,      nullptr,
 };
 
 static const char* instr_find_color(const char* state)
@@ -69,8 +45,8 @@ static const char* instr_find_color(const char* state)
   unsigned int i      = 0;
   const char* current = smpi_colors[i];
   while (current != nullptr) {
-    if (state == current                // exact match
-        || target.find(current) != 0) { // as substring
+    if (target == current                          // exact match
+        || strstr(target.c_str(), current) != 0) { // as substring
       ret = smpi_colors[i + 1];
       break;
     }
@@ -85,13 +61,11 @@ XBT_PRIVATE std::string smpi_container(int rank)
   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);
-
-static char *TRACE_smpi_put_key(int src, int dst, int tag, char *key, int n, int send)
+static std::string TRACE_smpi_put_key(int src, int dst, int tag, int send)
 {
-  //get the dynar for src#dst
-  char aux[INSTR_DEFAULT_STR_SIZE];
-  snprintf(aux, INSTR_DEFAULT_STR_SIZE, "%d#%d#%d#%d", src, dst, tag, send);
+  // get the deque for src#dst
+  std::string aux =
+      std::to_string(src) + "#" + std::to_string(dst) + "#" + std::to_string(tag) + "#" + std::to_string(send);
   auto it = keys.find(aux);
   std::deque<std::string>* d;
 
@@ -104,7 +78,8 @@ static char *TRACE_smpi_put_key(int src, int dst, int tag, char *key, int n, int
   //generate the key
   static unsigned long long counter = 0;
   counter++;
-  snprintf(key, n, "%d_%d_%d_%llu", src, dst, tag, counter);
+  std::string key =
+      std::to_string(src) + "_" + std::to_string(dst) + "_" + std::to_string(tag) + "_" + std::to_string(counter);
 
   //push it
   d->push_back(key);
@@ -112,16 +87,17 @@ static char *TRACE_smpi_put_key(int src, int dst, int tag, char *key, int n, int
   return key;
 }
 
-static char *TRACE_smpi_get_key(int src, int dst, int tag, char *key, int n, int send)
+static std::string TRACE_smpi_get_key(int src, int dst, int tag, int send)
 {
-  char aux[INSTR_DEFAULT_STR_SIZE];
-  snprintf(aux, INSTR_DEFAULT_STR_SIZE, "%d#%d#%d#%d", src, dst, tag, send==1?0:1);
+  std::string key;
+  std::string aux = std::to_string(src) + "#" + std::to_string(dst) + "#" + std::to_string(tag) + "#" +
+                    std::to_string(send == 1 ? 0 : 1);
   auto it = keys.find(aux);
   if (it == keys.end()) {
     // first posted
-    TRACE_smpi_put_key(src, dst, tag, key, n, send);
+    key = TRACE_smpi_put_key(src, dst, tag, send);
   } else {
-    snprintf(key, n, "%s", it->second->front().c_str());
+    key = it->second->front();
     it->second->pop_front();
   }
   return key;
@@ -180,15 +156,15 @@ void TRACE_smpi_init(int rank)
 
   container_t father;
   if (TRACE_smpi_is_grouped()){
-    father = simgrid::instr::Container::byName(sg_host_self_get_name());
+    father = simgrid::instr::Container::byNameOrNull(sg_host_self_get_name());
   }else{
-    father = PJ_container_get_root ();
+    father = simgrid::instr::Container::getRootContainer();
   }
   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
-      new simgrid::instr::Container(str, simgrid::instr::INSTR_SMPI, father);
+      new simgrid::instr::Container(str, "MPI", father);
 #if HAVE_PAPI
   papi_counter_t counters = smpi_process()->papi_counters();
 
@@ -222,10 +198,10 @@ void TRACE_smpi_collective_in(int rank, const char *operation, instr_extra_data
   }
 
   container_t container      = simgrid::instr::Container::byName(smpi_container(rank));
-  simgrid::instr::Type* type = container->type_->byName("MPI_STATE");
+  simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(container->type_->byName("MPI_STATE"));
   const char *color = instr_find_color (operation);
-  type->addEntityValue(operation, color);
-  new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, type, type->getEntityValue(operation),
+  state->addEntityValue(operation, color);
+  new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, state, state->getEntityValue(operation),
                                      static_cast<void*>(extra));
 }
 
@@ -247,9 +223,9 @@ void TRACE_smpi_computing_init(int rank)
    return;
 
  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"));
+ simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(container->type_->byName("MPI_STATE"));
state->addEntityValue("computing", instr_find_color("computing"));
+ new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, state, state->getEntityValue("computing"));
 }
 
 void TRACE_smpi_computing_in(int rank, instr_extra_data extra)
@@ -261,9 +237,9 @@ void TRACE_smpi_computing_in(int rank, instr_extra_data 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"),
+  simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(container->type_->byName("MPI_STATE"));
+  state->addEntityValue("computing");
+  new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, state, state->getEntityValue("computing"),
                                      static_cast<void*>(extra));
 }
 
@@ -284,7 +260,7 @@ void TRACE_smpi_sleeping_init(int rank)
     return;
 
   container_t container       = simgrid::instr::Container::byName(smpi_container(rank));
-  simgrid::instr::Type* state = container->type_->byName("MPI_STATE");
+  simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(container->type_->byName("MPI_STATE"));
   state->addEntityValue("sleeping", instr_find_color("sleeping"));
   new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, state, state->getEntityValue("sleeping"));
 }
@@ -298,7 +274,7 @@ void TRACE_smpi_sleeping_in(int rank, instr_extra_data extra)
   }
 
   container_t container       = simgrid::instr::Container::byName(smpi_container(rank));
-  simgrid::instr::Type* state = container->type_->byName("MPI_STATE");
+  simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(container->type_->byName("MPI_STATE"));
   state->addEntityValue("sleeping");
   new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, state, state->getEntityValue("sleeping"),
                                      static_cast<void*>(extra));
@@ -323,7 +299,7 @@ void TRACE_smpi_testing_in(int rank, instr_extra_data extra)
   }
 
   container_t container       = simgrid::instr::Container::byName(smpi_container(rank));
-  simgrid::instr::Type* state = container->type_->byName("MPI_STATE");
+  simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(container->type_->byName("MPI_STATE"));
   state->addEntityValue("test");
   new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, state, state->getEntityValue("test"),
                                      static_cast<void*>(extra));
@@ -347,7 +323,7 @@ void TRACE_smpi_ptp_in(int rank, const char *operation, instr_extra_data extra)
   }
 
   container_t container       = simgrid::instr::Container::byName(smpi_container(rank));
-  simgrid::instr::Type* state = container->type_->byName("MPI_STATE");
+  simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(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<void*>(extra));
@@ -369,13 +345,13 @@ void TRACE_smpi_send(int rank, int src, int dst, int tag, int size)
   if (not TRACE_smpi_is_enabled())
     return;
 
-  char key[INSTR_DEFAULT_STR_SIZE] = {0};
-  TRACE_smpi_get_key(src, dst, tag, key, INSTR_DEFAULT_STR_SIZE,1);
+  std::string key = TRACE_smpi_get_key(src, dst, tag, 1);
 
   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);
+  XBT_DEBUG("Send tracing from %d to %d, tag %d, with key %s", src, dst, tag, key.c_str());
+  new simgrid::instr::StartLinkEvent(SIMIX_get_clock(), simgrid::instr::Container::getRootContainer(), type, container,
+                                     "PTP", key, size);
 }
 
 void TRACE_smpi_recv(int src, int dst, int tag)
@@ -383,11 +359,11 @@ void TRACE_smpi_recv(int src, int dst, int tag)
   if (not TRACE_smpi_is_enabled())
     return;
 
-  char key[INSTR_DEFAULT_STR_SIZE] = {0};
-  TRACE_smpi_get_key(src, dst, tag, key, INSTR_DEFAULT_STR_SIZE,0);
+  std::string key = TRACE_smpi_get_key(src, dst, tag, 0);
 
   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);
+  XBT_DEBUG("Recv tracing from %d to %d, tag %d, with key %s", src, dst, tag, key.c_str());
+  new simgrid::instr::EndLinkEvent(SIMIX_get_clock(), simgrid::instr::Container::getRootContainer(), type, container,
+                                   "PTP", key);
 }