Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add support of MPI_Testall
[simgrid.git] / src / smpi / smpi_pmpi.c
index 54464cb..5f7bd69 100644 (file)
@@ -110,6 +110,11 @@ double PMPI_Wtime(void)
   smpi_bench_begin();
   return time;
 }
+extern double sg_maxmin_precision;
+double PMPI_Wtick(void)
+{
+  return sg_maxmin_precision;
+}
 
 int PMPI_Address(void *location, MPI_Aint * address)
 {
@@ -967,6 +972,8 @@ int PMPI_Recv(void *buf, int count, MPI_Datatype datatype, int src, int tag,
     retval = MPI_SUCCESS;
   }
 #ifdef HAVE_TRACING
+  //the src may not have been known at the beginning of the recv (MPI_ANY_SOURCE)
+  if(status!=MPI_STATUS_IGNORE)src_traced = smpi_group_rank(smpi_comm_group(comm), status->MPI_SOURCE);
   TRACE_smpi_ptp_out(rank, src_traced, rank, __FUNCTION__);
   TRACE_smpi_recv(rank, src_traced, rank);
   TRACE_smpi_computing_in(rank);
@@ -1091,6 +1098,56 @@ int PMPI_Testany(int count, MPI_Request requests[], int *index, int *flag,
   return retval;
 }
 
+int PMPI_Testall(int count, MPI_Request* requests, int* flag, MPI_Status* statuses)
+{
+  int retval;
+
+  smpi_bench_end();
+  if (flag == NULL) {
+    retval = MPI_ERR_ARG;
+  } else {
+    *flag = smpi_mpi_testall(count, requests, statuses);
+    retval = MPI_SUCCESS;
+  }
+  smpi_bench_begin();
+  return retval;
+}
+
+int PMPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status* status) {
+  int retval;
+  smpi_bench_end();
+
+  if (status == NULL) {
+     retval = MPI_ERR_ARG;
+  }else if (comm == MPI_COMM_NULL) {
+       retval = MPI_ERR_COMM;
+  } else {
+       smpi_mpi_probe(source, tag, comm, status);
+       retval = MPI_SUCCESS;
+  }
+  smpi_bench_begin();
+  return retval;
+}
+
+
+int PMPI_Iprobe(int source, int tag, MPI_Comm comm, int* flag, MPI_Status* status) {
+  int retval;
+  smpi_bench_end();
+
+  if (flag == NULL) {
+       retval = MPI_ERR_ARG;
+    }else if (status == NULL) {
+     retval = MPI_ERR_ARG;
+  }else if (comm == MPI_COMM_NULL) {
+       retval = MPI_ERR_COMM;
+  } else {
+       smpi_mpi_iprobe(source, tag, comm, flag, status);
+       retval = MPI_SUCCESS;
+  }
+  smpi_bench_begin();
+  return retval;
+}
+
 int PMPI_Wait(MPI_Request * request, MPI_Status * status)
 {
   int retval;
@@ -1937,9 +1994,7 @@ int PMPI_Issend(void* buf, int count, MPI_Datatype datatype, int dest, int tag,
    return not_yet_implemented();
 }
 
-int PMPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status* status) {
-   return not_yet_implemented();
-}
+
 
 int PMPI_Attr_delete(MPI_Comm comm, int keyval) {
    return not_yet_implemented();
@@ -1981,10 +2036,6 @@ int PMPI_Pack(void* inbuf, int incount, MPI_Datatype type, void* outbuf, int out
    return not_yet_implemented();
 }
 
-int PMPI_Testall(int count, MPI_Request* requests, int* flag, MPI_Status* statuses) {
-   return not_yet_implemented();
-}
-
 int PMPI_Get_elements(MPI_Status* status, MPI_Datatype datatype, int* elements) {
    return not_yet_implemented();
 }
@@ -1993,10 +2044,6 @@ int PMPI_Dims_create(int nnodes, int ndims, int* dims) {
    return not_yet_implemented();
 }
 
-int PMPI_Iprobe(int source, int tag, MPI_Comm comm, int* flag, MPI_Status* status) {
-   return not_yet_implemented();
-}
-
 int PMPI_Initialized(int* flag) {
    return not_yet_implemented();
 }