Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
handle MPI_ANY_SOURCE in recv replay
[simgrid.git] / src / smpi / internals / smpi_replay.cpp
index e503a21..b4830ff 100644 (file)
@@ -134,7 +134,10 @@ public:
     /* Sometimes we need to re-insert MPI_REQUEST_NULL but we still need src,dst and tag */
     void addNullRequest(int src, int dst, int tag)
     {
-      store.insert({req_key_t(src, dst, tag), MPI_REQUEST_NULL});
+      store.insert({req_key_t(
+            MPI_COMM_WORLD->group()->actor(src)->get_pid()-1,
+            MPI_COMM_WORLD->group()->actor(dst)->get_pid()-1,
+            tag), MPI_REQUEST_NULL});
     }
 };
 
@@ -444,8 +447,6 @@ void SendAction::kernel(simgrid::xbt::ReplayAction& action)
 
 void RecvAction::kernel(simgrid::xbt::ReplayAction& action)
 {
-  int src_traced = MPI_COMM_WORLD->group()->actor(args.partner)->get_pid();
-
   TRACE_smpi_comm_in(my_proc_id, __func__, new simgrid::instr::Pt2PtTIData(name, args.partner, args.size,
         args.tag, Datatype::encode(args.datatype1)));
 
@@ -466,6 +467,7 @@ void RecvAction::kernel(simgrid::xbt::ReplayAction& action)
   TRACE_smpi_comm_out(my_proc_id);
   // TODO: Check why this was only activated in the "recv" case and not in the "irecv" case
   if (name == "recv" && not TRACE_smpi_view_internals()) {
+    int src_traced = MPI_COMM_WORLD->group()->actor(status.MPI_SOURCE)->get_pid();
     TRACE_smpi_recv(src_traced, my_proc_id, args.tag);
   }
 }
@@ -701,7 +703,9 @@ static std::unordered_map<aid_t, simgrid::smpi::replay::RequestStorage> storage;
 /** @brief Only initialize the replay, don't do it for real */
 void smpi_replay_init(int* argc, char*** argv)
 {
-  simgrid::smpi::Process::init(argc, argv);
+  if (not smpi_process()->initializing()){
+    simgrid::smpi::ActorExt::init(argc, argv);
+  }
   smpi_process()->mark_as_initialized();
   smpi_process()->set_replaying(true);
 
@@ -744,9 +748,8 @@ void smpi_replay_init(int* argc, char*** argv)
     XBT_VERB("Delayed start for instance - Sleeping for %f flops ",value );
     smpi_execute_flops(value);
   } else {
-    //UGLY: force a context switch to be sure that all MSG_processes begin initialization
-    XBT_DEBUG("Force context switch by smpi_execute_flops  - Sleeping for 0.0 flops ");
-    smpi_execute_flops(0.0);
+    // Wait for the other actors to initialize also
+    simgrid::s4u::this_actor::yield();
   }
 }