Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[SMPI] Add 3 tracing functions for SAMPI
authorChristian Heinrich <franz-christian.heinrich@inria.fr>
Wed, 16 May 2018 13:24:48 +0000 (15:24 +0200)
committerChristian Heinrich <franz-christian.heinrich@inria.fr>
Thu, 2 Aug 2018 15:34:51 +0000 (17:34 +0200)
- TRACE_Iteration_in
- TRACE_Iteration_out
- TRACE_migration_call

src/instr/instr_smpi.hpp
src/smpi/internals/instr_smpi.cpp

index 4a7130a..8bced80 100644 (file)
@@ -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:
index 3f7fcd3..30352d1 100644 (file)
@@ -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<simgrid::instr::EventType*>(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();
+  }
+}