Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
merge identical functions
[simgrid.git] / src / smpi / bindings / smpi_pmpi_request.cpp
index a896991..0e85db4 100644 (file)
@@ -3,11 +3,11 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include "private.h"
+#include "private.hpp"
 #include "smpi_comm.hpp"
 #include "smpi_datatype.hpp"
-#include "smpi_request.hpp"
 #include "smpi_process.hpp"
+#include "smpi_request.hpp"
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(smpi_pmpi);
 
@@ -158,24 +158,19 @@ int PMPI_Irecv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MP
   } else {
 
     int rank       = smpi_process()->index();
-    int src_traced = comm->group()->index(src);
 
     instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
-    extra->type = TRACING_IRECV;
-    extra->src = src_traced;
-    extra->dst = rank;
-    int known=0;
-    extra->datatype1 = encode_datatype(datatype, &known);
-    int dt_size_send = 1;
-    if(known==0)
-      dt_size_send = datatype->size();
-    extra->send_size = count*dt_size_send;
-    TRACE_smpi_ptp_in(rank, __FUNCTION__, extra);
+    extra->type            = TRACING_IRECV;
+    extra->src             = comm->group()->index(src);
+    extra->dst             = rank;
+    extra->datatype1       = encode_datatype(datatype);
+    extra->send_size       = datatype->is_basic() ? count : count * datatype->size();
+    TRACE_smpi_comm_in(rank, __FUNCTION__, extra);
 
     *request = simgrid::smpi::Request::irecv(buf, count, datatype, src, tag, comm);
     retval = MPI_SUCCESS;
 
-    TRACE_smpi_ptp_out(rank, rank, __FUNCTION__);
+    TRACE_smpi_comm_out(rank);
   }
 
   smpi_bench_begin();
@@ -212,19 +207,15 @@ int PMPI_Isend(void *buf, int count, MPI_Datatype datatype, int dst, int tag, MP
     extra->type = TRACING_ISEND;
     extra->src = rank;
     extra->dst = dst_traced;
-    int known=0;
-    extra->datatype1 = encode_datatype(datatype, &known);
-    int dt_size_send = 1;
-    if(known==0)
-      dt_size_send = datatype->size();
-    extra->send_size = count*dt_size_send;
-    TRACE_smpi_ptp_in(rank, __FUNCTION__, extra);
+    extra->datatype1       = encode_datatype(datatype);
+    extra->send_size       = datatype->is_basic() ? count : count * datatype->size();
+    TRACE_smpi_comm_in(rank, __FUNCTION__, extra);
     TRACE_smpi_send(rank, rank, dst_traced, tag, count*datatype->size());
 
     *request = simgrid::smpi::Request::isend(buf, count, datatype, dst, tag, comm);
     retval = MPI_SUCCESS;
 
-    TRACE_smpi_ptp_out(rank, dst_traced, __FUNCTION__);
+    TRACE_smpi_comm_out(rank);
   }
 
   smpi_bench_begin();
@@ -260,19 +251,15 @@ int PMPI_Issend(void* buf, int count, MPI_Datatype datatype, int dst, int tag, M
     extra->type = TRACING_ISSEND;
     extra->src = rank;
     extra->dst = dst_traced;
-    int known=0;
-    extra->datatype1 = encode_datatype(datatype, &known);
-    int dt_size_send = 1;
-    if(known==0)
-      dt_size_send = datatype->size();
-    extra->send_size = count*dt_size_send;
-    TRACE_smpi_ptp_in(rank, __FUNCTION__, extra);
+    extra->datatype1       = encode_datatype(datatype);
+    extra->send_size       = datatype->is_basic() ? count : count * datatype->size();
+    TRACE_smpi_comm_in(rank, __FUNCTION__, extra);
     TRACE_smpi_send(rank, rank, dst_traced, tag, count*datatype->size());
 
     *request = simgrid::smpi::Request::issend(buf, count, datatype, dst, tag, comm);
     retval = MPI_SUCCESS;
 
-    TRACE_smpi_ptp_out(rank, dst_traced, __FUNCTION__);
+    TRACE_smpi_comm_out(rank);
   }
 
   smpi_bench_begin();
@@ -307,13 +294,9 @@ int PMPI_Recv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI
     extra->type            = TRACING_RECV;
     extra->src             = src_traced;
     extra->dst             = rank;
-    int known              = 0;
-    extra->datatype1       = encode_datatype(datatype, &known);
-    int dt_size_send       = 1;
-    if (known == 0)
-      dt_size_send   = datatype->size();
-    extra->send_size = count * dt_size_send;
-    TRACE_smpi_ptp_in(rank, __FUNCTION__, extra);
+    extra->datatype1       = encode_datatype(datatype);
+    extra->send_size       = datatype->is_basic() ? count : count * datatype->size();
+    TRACE_smpi_comm_in(rank, __FUNCTION__, extra);
 
     simgrid::smpi::Request::recv(buf, count, datatype, src, tag, comm, status);
     retval = MPI_SUCCESS;
@@ -325,7 +308,7 @@ int PMPI_Recv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI
         TRACE_smpi_recv(src_traced, rank, tag);
       }
     }
-    TRACE_smpi_ptp_out(rank, rank, __FUNCTION__);
+    TRACE_smpi_comm_out(rank);
   }
 
   smpi_bench_begin();
@@ -357,14 +340,9 @@ int PMPI_Send(void *buf, int count, MPI_Datatype datatype, int dst, int tag, MPI
     extra->type            = TRACING_SEND;
     extra->src             = rank;
     extra->dst             = dst_traced;
-    int known              = 0;
-    extra->datatype1       = encode_datatype(datatype, &known);
-    int dt_size_send       = 1;
-    if (known == 0) {
-      dt_size_send = datatype->size();
-    }
-    extra->send_size = count*dt_size_send;
-    TRACE_smpi_ptp_in(rank, __FUNCTION__, extra);
+    extra->datatype1       = encode_datatype(datatype);
+    extra->send_size       = datatype->is_basic() ? count : count * datatype->size();
+    TRACE_smpi_comm_in(rank, __FUNCTION__, extra);
     if (not TRACE_smpi_view_internals()) {
       TRACE_smpi_send(rank, rank, dst_traced, tag,count*datatype->size());
     }
@@ -372,7 +350,7 @@ int PMPI_Send(void *buf, int count, MPI_Datatype datatype, int dst, int tag, MPI
     simgrid::smpi::Request::send(buf, count, datatype, dst, tag, comm);
     retval = MPI_SUCCESS;
 
-    TRACE_smpi_ptp_out(rank, dst_traced, __FUNCTION__);
+    TRACE_smpi_comm_out(rank);
   }
 
   smpi_bench_begin();
@@ -403,20 +381,16 @@ int PMPI_Ssend(void* buf, int count, MPI_Datatype datatype, int dst, int tag, MP
     extra->type            = TRACING_SSEND;
     extra->src             = rank;
     extra->dst             = dst_traced;
-    int known              = 0;
-    extra->datatype1       = encode_datatype(datatype, &known);
-    int dt_size_send       = 1;
-    if(known == 0) {
-      dt_size_send = datatype->size();
-    }
-    extra->send_size = count*dt_size_send;
-    TRACE_smpi_ptp_in(rank, __FUNCTION__, extra);
-    TRACE_smpi_send(rank, rank, dst_traced, tag,count*datatype->size());
+    extra->datatype1       = encode_datatype(datatype);
+    extra->send_size       = datatype->is_basic() ? count : count * datatype->size();
+
+    TRACE_smpi_comm_in(rank, __FUNCTION__, extra);
+    TRACE_smpi_send(rank, rank, dst_traced, tag, count * datatype->size());
 
     simgrid::smpi::Request::ssend(buf, count, datatype, dst, tag, comm);
     retval = MPI_SUCCESS;
 
-    TRACE_smpi_ptp_out(rank, dst_traced, __FUNCTION__);
+    TRACE_smpi_comm_out(rank);
   }
 
   smpi_bench_begin();
@@ -447,7 +421,6 @@ int PMPI_Sendrecv(void* sendbuf, int sendcount, MPI_Datatype sendtype, int dst,
   } else if((sendtag<0 && sendtag !=  MPI_ANY_TAG)||(recvtag<0 && recvtag != MPI_ANY_TAG)){
     retval = MPI_ERR_TAG;
   } else {
-
     int rank               = smpi_process()->index();
     int dst_traced         = comm->group()->index(dst);
     int src_traced         = comm->group()->index(src);
@@ -455,26 +428,19 @@ int PMPI_Sendrecv(void* sendbuf, int sendcount, MPI_Datatype sendtype, int dst,
     extra->type            = TRACING_SENDRECV;
     extra->src             = src_traced;
     extra->dst             = dst_traced;
-    int known              = 0;
-    extra->datatype1       = encode_datatype(sendtype, &known);
-    int dt_size_send       = 1;
-    if (known == 0)
-      dt_size_send   = sendtype->size();
-    extra->send_size = sendcount * dt_size_send;
-    extra->datatype2 = encode_datatype(recvtype, &known);
-    int dt_size_recv = 1;
-    if (known == 0)
-      dt_size_recv   = recvtype->size();
-    extra->recv_size = recvcount * dt_size_recv;
-
-    TRACE_smpi_ptp_in(rank, __FUNCTION__, extra);
+    extra->datatype1       = encode_datatype(sendtype);
+    extra->send_size       = sendtype->is_basic() ? sendcount : sendcount * sendtype->size();
+    extra->datatype2       = encode_datatype(recvtype);
+    extra->recv_size       = recvtype->is_basic() ? recvcount : recvcount * recvtype->size();
+
+    TRACE_smpi_comm_in(rank, __FUNCTION__, extra);
     TRACE_smpi_send(rank, rank, dst_traced, sendtag, sendcount * sendtype->size());
 
     simgrid::smpi::Request::sendrecv(sendbuf, sendcount, sendtype, dst, sendtag, recvbuf, recvcount, recvtype, src,
                                      recvtag, comm, status);
     retval = MPI_SUCCESS;
 
-    TRACE_smpi_ptp_out(rank, dst_traced, __FUNCTION__);
+    TRACE_smpi_comm_out(rank);
     TRACE_smpi_recv(src_traced, rank, recvtag);
   }
 
@@ -622,13 +588,13 @@ int PMPI_Wait(MPI_Request * request, MPI_Status * status)
     int is_wait_for_receive = ((*request)->flags() & RECV);
     instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
     extra->type = TRACING_WAIT;
-    TRACE_smpi_ptp_in(rank, __FUNCTION__, extra);
+    TRACE_smpi_comm_in(rank, __FUNCTION__, extra);
 
     simgrid::smpi::Request::wait(request, status);
     retval = MPI_SUCCESS;
 
     //the src may not have been known at the beginning of the recv (MPI_ANY_SOURCE)
-    TRACE_smpi_ptp_out(rank, dst_traced, __FUNCTION__);
+    TRACE_smpi_comm_out(rank);
     if (is_wait_for_receive) {
       if(src_traced==MPI_ANY_SOURCE)
         src_traced = (status != MPI_STATUS_IGNORE) ? comm->group()->rank(status->MPI_SOURCE) : src_traced;
@@ -650,13 +616,13 @@ int PMPI_Waitany(int count, MPI_Request requests[], int *index, MPI_Status * sta
 
   smpi_bench_end();
   //save requests information for tracing
-  typedef struct {
+  struct savedvalstype {
     int src;
     int dst;
     int recv;
     int tag;
     MPI_Comm comm;
-  } savedvalstype;
+  };
   savedvalstype* savedvals = xbt_new0(savedvalstype, count);
 
   for (int i = 0; i < count; i++) {
@@ -669,7 +635,7 @@ int PMPI_Waitany(int count, MPI_Request requests[], int *index, MPI_Status * sta
   instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
   extra->type = TRACING_WAITANY;
   extra->send_size=count;
-  TRACE_smpi_ptp_in(rank_traced, __FUNCTION__,extra);
+  TRACE_smpi_comm_in(rank_traced, __FUNCTION__, extra);
 
   *index = simgrid::smpi::Request::waitany(count, requests, status);
 
@@ -684,7 +650,7 @@ int PMPI_Waitany(int count, MPI_Request requests[], int *index, MPI_Status * sta
                                                      : savedvals[*index].src;
       TRACE_smpi_recv(src_traced, dst_traced, savedvals[*index].tag);
     }
-    TRACE_smpi_ptp_out(rank_traced, dst_traced, __FUNCTION__);
+    TRACE_smpi_comm_out(rank_traced);
   }
   xbt_free(savedvals);
 
@@ -696,14 +662,14 @@ int PMPI_Waitall(int count, MPI_Request requests[], MPI_Status status[])
 {
   smpi_bench_end();
   //save information from requests
-  typedef struct {
+  struct savedvalstype {
     int src;
     int dst;
     int recv;
     int tag;
     int valid;
     MPI_Comm comm;
-  } savedvalstype;
+  };
   savedvalstype* savedvals=xbt_new0(savedvalstype, count);
 
   for (int i = 0; i < count; i++) {
@@ -718,7 +684,7 @@ int PMPI_Waitall(int count, MPI_Request requests[], MPI_Status status[])
   instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
   extra->type = TRACING_WAITALL;
   extra->send_size=count;
-  TRACE_smpi_ptp_in(rank_traced, __FUNCTION__,extra);
+  TRACE_smpi_comm_in(rank_traced, __FUNCTION__, extra);
 
   int retval = simgrid::smpi::Request::waitall(count, requests, status);
 
@@ -736,7 +702,7 @@ int PMPI_Waitall(int count, MPI_Request requests[], MPI_Status status[])
       }
     }
   }
-  TRACE_smpi_ptp_out(rank_traced, -1, __FUNCTION__);
+  TRACE_smpi_comm_out(rank_traced);
   xbt_free(savedvals);
 
   smpi_bench_begin();