Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
remove a few more leaks to please valgrind, but nothing important
authorAugustin Degomme <degomme@idpann.imag.fr>
Tue, 9 Apr 2013 15:02:32 +0000 (17:02 +0200)
committerAugustin Degomme <degomme@idpann.imag.fr>
Tue, 9 Apr 2013 15:32:13 +0000 (17:32 +0200)
src/smpi/smpi_base.c
src/smpi/smpi_f77.c

index f5a2192..e0cfc66 100644 (file)
@@ -369,6 +369,7 @@ void smpi_mpi_start(MPI_Request request)
       }
       XBT_DEBUG("Send request %p is detached; buf %p copied into %p",request,oldbuf,request->buf);
     }
+
     // we make a copy here, as the size is modified by simix, and we may reuse the request in another receive later
     request->real_size=request->size;
     smpi_datatype_use(request->old_type);
@@ -508,8 +509,11 @@ void smpi_mpi_send(void *buf, int count, MPI_Datatype datatype, int dst,
 void smpi_mpi_ssend(void *buf, int count, MPI_Datatype datatype,
                            int dst, int tag, MPI_Comm comm)
 {
-  MPI_Request request = smpi_mpi_issend(buf, count, datatype, dst, tag, comm);
-  smpi_mpi_wait(&request, MPI_STATUS_IGNORE);
+  MPI_Request request =
+      build_request(buf, count, datatype, smpi_comm_rank(comm), dst, tag,
+                    comm, NON_PERSISTENT | SSEND | SEND);
+
+  smpi_mpi_start(request);  smpi_mpi_wait(&request, MPI_STATUS_IGNORE);
 }
 
 void smpi_mpi_sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype,
index d782052..f7a1583 100644 (file)
@@ -99,50 +99,51 @@ static MPI_Op get_op(int op) {
 }
 
 void mpi_init_(int* ierr) {
-   comm_lookup = xbt_dynar_new(sizeof(MPI_Comm), NULL);
-   new_comm(MPI_COMM_WORLD);
-   group_lookup = xbt_dynar_new(sizeof(MPI_Group), NULL);
-
-   request_lookup = xbt_dict_new_homogeneous(NULL);
-
-   datatype_lookup = xbt_dynar_new(sizeof(MPI_Datatype), NULL);
-   new_datatype(MPI_BYTE);
-   new_datatype(MPI_CHAR);
-   new_datatype(MPI_INT);
-   new_datatype(MPI_INT);
-   new_datatype(MPI_INT8_T);
-   new_datatype(MPI_INT16_T);
-   new_datatype(MPI_INT32_T);
-   new_datatype(MPI_INT64_T);
-   new_datatype(MPI_FLOAT);
-   new_datatype(MPI_FLOAT);
-   new_datatype(MPI_DOUBLE);
-   new_datatype(MPI_DOUBLE);
-   new_datatype(MPI_C_FLOAT_COMPLEX);
-   new_datatype(MPI_C_DOUBLE_COMPLEX);
-   new_datatype(MPI_2INT);
-   new_datatype(MPI_UINT8_T);
-   new_datatype(MPI_UINT16_T);
-   new_datatype(MPI_UINT32_T);
-   new_datatype(MPI_UINT64_T);
-   new_datatype(MPI_2FLOAT);
-   new_datatype(MPI_2DOUBLE);
-
-
-   op_lookup = xbt_dynar_new(sizeof(MPI_Op), NULL);
-   new_op(MPI_MAX);
-   new_op(MPI_MIN);
-   new_op(MPI_MAXLOC);
-   new_op(MPI_MINLOC);
-   new_op(MPI_SUM);
-   new_op(MPI_PROD);
-   new_op(MPI_LAND);
-   new_op(MPI_LOR);
-   new_op(MPI_LXOR);
-   new_op(MPI_BAND);
-   new_op(MPI_BOR);
-   new_op(MPI_BXOR);
-
+   if(!comm_lookup){
+     comm_lookup = xbt_dynar_new(sizeof(MPI_Comm), NULL);
+     new_comm(MPI_COMM_WORLD);
+     group_lookup = xbt_dynar_new(sizeof(MPI_Group), NULL);
+
+     request_lookup = xbt_dict_new_homogeneous(NULL);
+
+     datatype_lookup = xbt_dynar_new(sizeof(MPI_Datatype), NULL);
+     new_datatype(MPI_BYTE);
+     new_datatype(MPI_CHAR);
+     new_datatype(MPI_INT);
+     new_datatype(MPI_INT);
+     new_datatype(MPI_INT8_T);
+     new_datatype(MPI_INT16_T);
+     new_datatype(MPI_INT32_T);
+     new_datatype(MPI_INT64_T);
+     new_datatype(MPI_FLOAT);
+     new_datatype(MPI_FLOAT);
+     new_datatype(MPI_DOUBLE);
+     new_datatype(MPI_DOUBLE);
+     new_datatype(MPI_C_FLOAT_COMPLEX);
+     new_datatype(MPI_C_DOUBLE_COMPLEX);
+     new_datatype(MPI_2INT);
+     new_datatype(MPI_UINT8_T);
+     new_datatype(MPI_UINT16_T);
+     new_datatype(MPI_UINT32_T);
+     new_datatype(MPI_UINT64_T);
+     new_datatype(MPI_2FLOAT);
+     new_datatype(MPI_2DOUBLE);
+
+
+     op_lookup = xbt_dynar_new(sizeof(MPI_Op), NULL);
+     new_op(MPI_MAX);
+     new_op(MPI_MIN);
+     new_op(MPI_MAXLOC);
+     new_op(MPI_MINLOC);
+     new_op(MPI_SUM);
+     new_op(MPI_PROD);
+     new_op(MPI_LAND);
+     new_op(MPI_LOR);
+     new_op(MPI_LXOR);
+     new_op(MPI_BAND);
+     new_op(MPI_BOR);
+     new_op(MPI_BXOR);
+   }
    /* smpif2c is responsible for generating a call with the final arguments */
    *ierr = MPI_Init(NULL, NULL);
 }