diff --git a/src/STUBS/mpi.c b/src/STUBS/mpi.c index ca0e921e13..281a12a4e7 100644 --- a/src/STUBS/mpi.c +++ b/src/STUBS/mpi.c @@ -190,6 +190,13 @@ int MPI_Type_size(MPI_Datatype datatype, int *size) /* ---------------------------------------------------------------------- */ +int MPI_Request_free(MPI_Request *request) +{ + return 0; +} + +/* ---------------------------------------------------------------------- */ + int MPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) { diff --git a/src/STUBS/mpi.h b/src/STUBS/mpi.h index 82cbe302ba..1eca1ec527 100644 --- a/src/STUBS/mpi.h +++ b/src/STUBS/mpi.h @@ -89,6 +89,7 @@ int MPI_Finalize(); double MPI_Wtime(); int MPI_Type_size(int, int *); +int MPI_Request_free(MPI_Request *request); int MPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm); diff --git a/src/irregular.cpp b/src/irregular.cpp index 3947001541..d0210244fb 100644 --- a/src/irregular.cpp +++ b/src/irregular.cpp @@ -395,7 +395,9 @@ int Irregular::create_atom(int n, int *sizes, int *proclist, int sortflag) sendmax_proc = 0; for (i = 0; i < nsend_proc; i++) { - MPI_Send(&length_send[i],1,MPI_INT,proc_send[i],0,world); + MPI_Request tmpReq; // Use non-blocking send to avoid possible deadlock + MPI_Isend(&length_send[i],1,MPI_INT,proc_send[i],0,world,&tmpReq); + MPI_Request_free(&tmpReq); // the MPI_Barrier below marks completion sendmax_proc = MAX(sendmax_proc,length_send[i]); } @@ -641,7 +643,9 @@ int Irregular::create_data(int n, int *proclist, int sortflag) sendmax_proc = 0; for (i = 0; i < nsend_proc; i++) { - MPI_Send(&num_send[i],1,MPI_INT,proc_send[i],0,world); + MPI_Request tmpReq; // Use non-blocking send to avoid possible deadlock + MPI_Isend(&num_send[i],1,MPI_INT,proc_send[i],0,world,&tmpReq); + MPI_Request_free(&tmpReq); // the MPI_Barrier below marks completion sendmax_proc = MAX(sendmax_proc,num_send[i]); }