}
}
-
//Implementations of the single algorith collectives
int Colls::gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int *recvcounts, int *displs,
{
MPI_Request request;
Colls::igatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, root, comm, &request);
- MPI_Request* requests = request->get_nbc_requests();
- int count = request->get_nbc_requests_size();
- Request::waitall(count, requests, MPI_STATUS_IGNORE);
- for (int i = 0; i < count; i++) {
- if(requests[i]!=MPI_REQUEST_NULL)
- Request::unref(&requests[i]);
- }
- delete[] requests;
- Request::unref(&request);
- return MPI_SUCCESS;
+ return Request::wait(&request, MPI_STATUS_IGNORE);
}
{
MPI_Request request;
Colls::iscatterv(sendbuf, sendcounts, displs, sendtype, recvbuf, recvcount, recvtype, root, comm, &request);
- MPI_Request* requests = request->get_nbc_requests();
- int count = request->get_nbc_requests_size();
- Request::waitall(count, requests, MPI_STATUS_IGNORE);
- for (int dst = 0; dst < count; dst++) {
- if(requests[dst]!=MPI_REQUEST_NULL)
- Request::unref(&requests[dst]);
- }
- delete[] requests;
- Request::unref(&request);
- return MPI_SUCCESS;
+ return Request::wait(&request, MPI_STATUS_IGNORE);
}
return MPI_SUCCESS;
}
+int Colls::alltoallw(void *sendbuf, int *sendcounts, int *senddisps, MPI_Datatype* sendtypes,
+ void *recvbuf, int *recvcounts, int *recvdisps, MPI_Datatype* recvtypes, MPI_Comm comm)
+{
+ MPI_Request request;
+ Colls::ialltoallw(sendbuf, sendcounts, senddisps, sendtypes, recvbuf, recvcounts, recvdisps, recvtypes, comm, &request);
+ return Request::wait(&request, MPI_STATUS_IGNORE);
+}
+
}
}