Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[SMPI] smpi_replay.cpp: Replace smpi_process()->index() calls
[simgrid.git] / src / smpi / internals / smpi_replay.cpp
index 8e02386..0897ed1 100644 (file)
@@ -17,6 +17,8 @@
 
 #define KEY_SIZE (sizeof(int) * 2 + 1)
 
+using simgrid::s4u::Actor;
+
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_replay,smpi,"Trace Replay with SMPI");
 
 int communicator_size = 0;
@@ -41,12 +43,12 @@ static void log_timed_action (const char *const *action, double clock){
 
 static std::vector<MPI_Request>* get_reqq_self()
 {
-  return reqq.at(smpi_process()->index());
+  return reqq.at(Actor::self()->getPid());
 }
 
 static void set_reqq_self(std::vector<MPI_Request> *mpi_request)
 {
-   reqq.insert({smpi_process()->index(), mpi_request});
+   reqq.insert({Actor::self()->getPid(), mpi_request});
 }
 
 //allocate a single buffer for all sends, growing it if needed
@@ -87,6 +89,8 @@ static double parse_double(const char *string)
   return value;
 }
 
+
+//TODO: this logic should be moved inside the datatype class, to support all predefined types and get rid of is_replayable.
 static MPI_Datatype decode_datatype(const char *const action)
 {
   switch(atoi(action)) {
@@ -196,7 +200,7 @@ static void action_compute(const char *const *action)
   CHECK_ACTION_PARAMS(action, 1, 0)
   double clock = smpi_process()->simulated_elapsed();
   double flops= parse_double(action[2]);
-  int rank = smpi_process()->index();
+  int rank = Actor::self()->getPid();
 
   TRACE_smpi_computing_in(rank, flops);
   smpi_execute_flops(flops);
@@ -217,11 +221,11 @@ static void action_send(const char *const *action)
   else
     MPI_CURRENT_TYPE= MPI_DEFAULT_TYPE;
 
-  int rank = smpi_process()->index();
-  int dst_traced = MPI_COMM_WORLD->group()->rank(to);
+  int rank = Actor::self()->getPid();
+  int dst_traced = MPI_COMM_WORLD->group()->actor(to)->getPid();
 
   TRACE_smpi_comm_in(rank, __FUNCTION__,
-                     new simgrid::instr::Pt2PtTIData("send", dst_traced, size, encode_datatype(MPI_CURRENT_TYPE)));
+                     new simgrid::instr::Pt2PtTIData("send", to, size, encode_datatype(MPI_CURRENT_TYPE)));
   if (not TRACE_smpi_view_internals())
     TRACE_smpi_send(rank, rank, dst_traced, 0, size*MPI_CURRENT_TYPE->size());
 
@@ -244,10 +248,10 @@ static void action_Isend(const char *const *action)
   else
     MPI_CURRENT_TYPE= MPI_DEFAULT_TYPE;
 
-  int rank = smpi_process()->index();
-  int dst_traced = MPI_COMM_WORLD->group()->rank(to);
+  int rank = Actor::self()->getPid();
+  int dst_traced = MPI_COMM_WORLD->group()->actor(to)->getPid();
   TRACE_smpi_comm_in(rank, __FUNCTION__,
-                     new simgrid::instr::Pt2PtTIData("Isend", dst_traced, size, encode_datatype(MPI_CURRENT_TYPE)));
+                     new simgrid::instr::Pt2PtTIData("Isend", to, size, encode_datatype(MPI_CURRENT_TYPE)));
   if (not TRACE_smpi_view_internals())
     TRACE_smpi_send(rank, rank, dst_traced, 0, size*MPI_CURRENT_TYPE->size());
 
@@ -272,11 +276,11 @@ static void action_recv(const char *const *action) {
   else
     MPI_CURRENT_TYPE= MPI_DEFAULT_TYPE;
 
-  int rank = smpi_process()->index();
-  int src_traced = MPI_COMM_WORLD->group()->rank(from);
+  int rank = Actor::self()->getPid();
+  int src_traced = MPI_COMM_WORLD->group()->actor(from)->getPid();
 
   TRACE_smpi_comm_in(rank, __FUNCTION__,
-                     new simgrid::instr::Pt2PtTIData("recv", src_traced, size, encode_datatype(MPI_CURRENT_TYPE)));
+                     new simgrid::instr::Pt2PtTIData("recv", from, size, encode_datatype(MPI_CURRENT_TYPE)));
 
   //unknown size from the receiver point of view
   if (size <= 0.0) {
@@ -306,10 +310,9 @@ static void action_Irecv(const char *const *action)
   else
     MPI_CURRENT_TYPE= MPI_DEFAULT_TYPE;
 
-  int rank = smpi_process()->index();
-  int src_traced = MPI_COMM_WORLD->group()->rank(from);
+  int rank = Actor::self()->getPid();
   TRACE_smpi_comm_in(rank, __FUNCTION__,
-                     new simgrid::instr::Pt2PtTIData("Irecv", src_traced, size, encode_datatype(MPI_CURRENT_TYPE)));
+                     new simgrid::instr::Pt2PtTIData("Irecv", from, size, encode_datatype(MPI_CURRENT_TYPE)));
   MPI_Status status;
   //unknow size from the receiver pov
   if (size <= 0.0) {
@@ -337,7 +340,7 @@ static void action_test(const char* const* action)
   //Different times in traced application and replayed version may lead to this
   //In this case, ignore the extra calls.
   if(request!=nullptr){
-    int rank = smpi_process()->index();
+    int rank = Actor::self()->getPid();
     TRACE_smpi_testing_in(rank);
 
     int flag = Request::test(&request, &status);
@@ -390,7 +393,7 @@ static void action_waitall(const char *const *action){
   if (count_requests>0) {
     MPI_Status status[count_requests];
 
-   int rank_traced = smpi_process()->index();
+   int rank_traced = Actor::self()->getPid();
    TRACE_smpi_comm_in(rank_traced, __FUNCTION__, new simgrid::instr::Pt2PtTIData("waitAll", -1, count_requests, ""));
    int recvs_snd[count_requests];
    int recvs_rcv[count_requests];
@@ -415,7 +418,7 @@ static void action_waitall(const char *const *action){
 
 static void action_barrier(const char *const *action){
   double clock = smpi_process()->simulated_elapsed();
-  int rank = smpi_process()->index();
+  int rank = Actor::self()->getPid();
   TRACE_smpi_comm_in(rank, __FUNCTION__, new simgrid::instr::NoOpTIData("barrier"));
 
   Colls::barrier(MPI_COMM_WORLD);
@@ -439,9 +442,9 @@ static void action_bcast(const char *const *action)
       MPI_CURRENT_TYPE=decode_datatype(action[4]);
   }
 
-  int rank = smpi_process()->index();
+  int rank = Actor::self()->getPid();
   TRACE_smpi_comm_in(rank, __FUNCTION__,
-                     new simgrid::instr::CollTIData("bcast", MPI_COMM_WORLD->group()->index(root), -1.0, size, -1,
+                     new simgrid::instr::CollTIData("bcast", MPI_COMM_WORLD->group()->actor(root)->getPid(), -1.0, size, -1,
                                                     encode_datatype(MPI_CURRENT_TYPE), ""));
 
   void *sendbuf = smpi_get_tmp_sendbuffer(size* MPI_CURRENT_TYPE->size());
@@ -467,9 +470,9 @@ static void action_reduce(const char *const *action)
       MPI_CURRENT_TYPE=decode_datatype(action[5]);
   }
 
-  int rank = smpi_process()->index();
+  int rank = Actor::self()->getPid();
   TRACE_smpi_comm_in(rank, __FUNCTION__,
-                     new simgrid::instr::CollTIData("reduce", MPI_COMM_WORLD->group()->index(root), comp_size,
+                     new simgrid::instr::CollTIData("reduce", MPI_COMM_WORLD->group()->actor(root)->getPid(), comp_size,
                                                     comm_size, -1, encode_datatype(MPI_CURRENT_TYPE), ""));
 
   void *recvbuf = smpi_get_tmp_sendbuffer(comm_size* MPI_CURRENT_TYPE->size());
@@ -492,7 +495,7 @@ static void action_allReduce(const char *const *action) {
     MPI_CURRENT_TYPE= MPI_DEFAULT_TYPE;
 
   double clock = smpi_process()->simulated_elapsed();
-  int rank = smpi_process()->index();
+  int rank = Actor::self()->getPid();
   TRACE_smpi_comm_in(rank, __FUNCTION__, new simgrid::instr::CollTIData("allReduce", -1, comp_size, comm_size, -1,
                                                                         encode_datatype(MPI_CURRENT_TYPE), ""));
 
@@ -523,7 +526,7 @@ static void action_allToAll(const char *const *action) {
   void *send = smpi_get_tmp_sendbuffer(send_size*comm_size* MPI_CURRENT_TYPE->size());
   void *recv = smpi_get_tmp_recvbuffer(recv_size*comm_size* MPI_CURRENT_TYPE2->size());
 
-  int rank = smpi_process()->index();
+  int rank = Actor::self()->getPid();
   TRACE_smpi_comm_in(rank, __FUNCTION__, new simgrid::instr::CollTIData("allToAll", -1, -1.0, send_size, recv_size,
                                                                         encode_datatype(MPI_CURRENT_TYPE),
                                                                         encode_datatype(MPI_CURRENT_TYPE2)));
@@ -572,7 +575,7 @@ static void action_gather(const char *const *action) {
 
   Colls::gather(send, send_size, MPI_CURRENT_TYPE, recv, recv_size, MPI_CURRENT_TYPE2, root, MPI_COMM_WORLD);
 
-  TRACE_smpi_comm_out(smpi_process()->index());
+  TRACE_smpi_comm_out(Actor::self()->getPid());
   log_timed_action (action, clock);
 }
 
@@ -615,7 +618,7 @@ static void action_scatter(const char* const* action)
 
   Colls::scatter(send, send_size, MPI_CURRENT_TYPE, recv, recv_size, MPI_CURRENT_TYPE2, root, MPI_COMM_WORLD);
 
-  TRACE_smpi_comm_out(smpi_process()->index());
+  TRACE_smpi_comm_out(Actor::self()->getPid());
   log_timed_action(action, clock);
 }
 
@@ -668,7 +671,7 @@ static void action_gatherv(const char *const *action) {
 
   Colls::gatherv(send, send_size, MPI_CURRENT_TYPE, recv, recvcounts, disps, MPI_CURRENT_TYPE2, root, MPI_COMM_WORLD);
 
-  TRACE_smpi_comm_out(smpi_process()->index());
+  TRACE_smpi_comm_out(Actor::self()->getPid());
   log_timed_action (action, clock);
 }
 
@@ -722,7 +725,7 @@ static void action_scatterv(const char* const* action)
 
   Colls::scatterv(send, sendcounts, disps, MPI_CURRENT_TYPE, recv, recv_size, MPI_CURRENT_TYPE2, root, MPI_COMM_WORLD);
 
-  TRACE_smpi_comm_out(smpi_process()->index());
+  TRACE_smpi_comm_out(Actor::self()->getPid());
   log_timed_action(action, clock);
 }
 
@@ -739,7 +742,7 @@ static void action_reducescatter(const char *const *action) {
   CHECK_ACTION_PARAMS(action, comm_size+1, 1)
   int comp_size = parse_double(action[2+comm_size]);
   int recvcounts[comm_size];
-  int rank = smpi_process()->index();
+  int rank = Actor::self()->getPid();
   int size = 0;
   std::vector<int>* trace_recvcounts = new std::vector<int>;
   if(action[3+comm_size])
@@ -793,7 +796,7 @@ static void action_allgather(const char *const *action) {
   void *sendbuf = smpi_get_tmp_sendbuffer(sendcount* MPI_CURRENT_TYPE->size());
   void *recvbuf = smpi_get_tmp_recvbuffer(recvcount* MPI_CURRENT_TYPE2->size());
 
-  int rank = smpi_process()->index();
+  int rank = Actor::self()->getPid();
 
   TRACE_smpi_comm_in(rank, __FUNCTION__, new simgrid::instr::CollTIData("allGather", -1, -1.0, sendcount, recvcount,
                                                                         encode_datatype(MPI_CURRENT_TYPE),
@@ -838,7 +841,7 @@ static void action_allgatherv(const char *const *action) {
   }
   void *recvbuf = smpi_get_tmp_recvbuffer(recv_sum* MPI_CURRENT_TYPE2->size());
 
-  int rank = smpi_process()->index();
+  int rank = Actor::self()->getPid();
 
   std::vector<int>* trace_recvcounts = new std::vector<int>;
   for (int i = 0; i < comm_size; i++) // copy data to avoid bad free
@@ -888,7 +891,7 @@ static void action_allToAllv(const char *const *action) {
   else
     MPI_CURRENT_TYPE=MPI_DEFAULT_TYPE;
 
-  int rank       = smpi_process()->index();
+  int rank       = Actor::self()->getPid();
   void *sendbuf = smpi_get_tmp_sendbuffer(send_buf_size* MPI_CURRENT_TYPE->size());
   void *recvbuf  = smpi_get_tmp_recvbuffer(recv_buf_size* MPI_CURRENT_TYPE2->size());
 
@@ -923,7 +926,7 @@ void smpi_replay_init(int* argc, char*** argv)
   smpi_process()->mark_as_initialized();
   smpi_process()->set_replaying(true);
 
-  int rank = smpi_process()->index();
+  int rank = Actor::self()->getPid();
   TRACE_smpi_init(rank);
   TRACE_smpi_computing_init(rank);
   TRACE_smpi_comm_in(rank, "smpi_replay_run_init", new simgrid::instr::NoOpTIData("init"));
@@ -997,12 +1000,12 @@ void smpi_replay_main(int* argc, char*** argv)
     xbt_free(recvbuffer);
   }
 
-  TRACE_smpi_comm_in(smpi_process()->index(), "smpi_replay_run_finalize", new simgrid::instr::NoOpTIData("finalize"));
+  TRACE_smpi_comm_in(Actor::self()->getPid(), "smpi_replay_run_finalize", new simgrid::instr::NoOpTIData("finalize"));
 
   smpi_process()->finalize();
 
-  TRACE_smpi_comm_out(smpi_process()->index());
-  TRACE_smpi_finalize(smpi_process()->index());
+  TRACE_smpi_comm_out(Actor::self()->getPid());
+  TRACE_smpi_finalize(Actor::self()->getPid());
 }
 
 /** @brief chain a replay initialization and a replay start */