X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/812a76c3c922011548eef3d68375a6ef91635e9b..26a65fe3f06c8a304a1fd022eb685072d6531566:/src/smpi/smpi_base.c diff --git a/src/smpi/smpi_base.c b/src/smpi/smpi_base.c index 16eaeb94ac..d1945536a1 100644 --- a/src/smpi/smpi_base.c +++ b/src/smpi/smpi_base.c @@ -6,6 +6,7 @@ #include "private.h" #include "xbt/time.h" +#include "mc/mc.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_base, smpi, "Logging specific to SMPI (base)"); @@ -23,8 +24,8 @@ static int match_recv(void* a, void* b) { MPI_Request ref = (MPI_Request)a; MPI_Request req = (MPI_Request)b; - xbt_assert0(ref, "Cannot match recv against null reference"); - xbt_assert0(req, "Cannot match recv against null request"); + xbt_assert(ref, "Cannot match recv against null reference"); + xbt_assert(req, "Cannot match recv against null request"); return req->comm == ref->comm && (ref->src == MPI_ANY_SOURCE || req->src == ref->src) && (ref->tag == MPI_ANY_TAG || req->tag == ref->tag); @@ -34,8 +35,8 @@ static int match_send(void* a, void* b) { MPI_Request ref = (MPI_Request)a; MPI_Request req = (MPI_Request)b; - xbt_assert0(ref, "Cannot match send against null reference"); - xbt_assert0(req, "Cannot match send against null request"); + xbt_assert(ref, "Cannot match send against null reference"); + xbt_assert(req, "Cannot match send against null request"); return req->comm == ref->comm && (req->src == MPI_ANY_SOURCE || req->src == ref->src) && (req->tag == MPI_ANY_TAG || req->tag == ref->tag); @@ -88,7 +89,7 @@ void smpi_mpi_start(MPI_Request request) { smx_rdv_t mailbox; - xbt_assert0(!request->action, + xbt_assert(!request->action, "Cannot (re)start a non-finished communication"); if(request->flags & RECV) { print_request("New recv", request); @@ -98,7 +99,7 @@ void smpi_mpi_start(MPI_Request request) print_request("New send", request); mailbox = smpi_process_remote_mailbox(request->dst); request->action = SIMIX_req_comm_isend(mailbox, request->size, -1.0, - request->buf, request->size, &match_send, request); + request->buf, request->size, &match_send, request, 0); #ifdef HAVE_TRACING SIMIX_req_set_category (request->action, TRACE_internal_smpi_get_category()); #endif @@ -211,9 +212,8 @@ static void finish_wait(MPI_Request * request, MPI_Status * status) status->MPI_SOURCE = req->src; status->MPI_TAG = req->tag; status->MPI_ERROR = MPI_SUCCESS; - status->count = SIMIX_req_comm_get_dst_buff_size(req->action); + status->count = req->size; } - SIMIX_req_comm_destroy(req->action); print_request("Finishing", req); if(req->flags & NON_PERSISTENT) { smpi_mpi_request_free(request); @@ -286,7 +286,7 @@ int smpi_mpi_waitany(int count, MPI_Request requests[], comms = xbt_dynar_new(sizeof(smx_action_t), NULL); map = xbt_new(int, count); size = 0; - DEBUG0("Wait for one of"); + XBT_DEBUG("Wait for one of"); for(i = 0; i < count; i++) { if(requests[i] != MPI_REQUEST_NULL) { print_request(" ", requests[i]); @@ -313,16 +313,19 @@ void smpi_mpi_waitall(int count, MPI_Request requests[], MPI_Status stat; MPI_Status *pstat = status == MPI_STATUS_IGNORE ? MPI_STATUS_IGNORE : &stat; - c = count; - while(c > 0) { - index = smpi_mpi_waitany(count, requests, pstat); - if(index == MPI_UNDEFINED) { - break; + for(c = 0; c < count; c++) { + if(MC_IS_ENABLED) { + smpi_mpi_wait(&requests[c], pstat); + index = c; + } else { + index = smpi_mpi_waitany(count, requests, pstat); + if(index == MPI_UNDEFINED) { + break; + } } if(status != MPI_STATUS_IGNORE) { - memcpy(&status[index], pstat, sizeof *pstat); + memcpy(&status[index], pstat, sizeof(*pstat)); } - c--; } } @@ -473,13 +476,12 @@ void smpi_mpi_allgatherv(void *sendbuf, int sendcount, MPI_Datatype recvtype, MPI_Comm comm) { int system_tag = 666; - int rank, size, other, index, sendsize, recvsize; + int rank, size, other, index, sendsize; MPI_Request *requests; rank = smpi_comm_rank(comm); size = smpi_comm_size(comm); sendsize = smpi_datatype_size(sendtype); - recvsize = smpi_datatype_size(recvtype); // Local copy from self memcpy(&((char *) recvbuf)[displs[rank]], sendbuf, sendcount * sendsize * sizeof(char)); @@ -549,7 +551,7 @@ void smpi_mpi_scatterv(void *sendbuf, int *sendcounts, int *displs, MPI_Datatype recvtype, int root, MPI_Comm comm) { int system_tag = 666; - int rank, size, dst, index, sendsize, recvsize; + int rank, size, dst, index, recvsize; MPI_Request *requests; rank = smpi_comm_rank(comm); @@ -559,7 +561,6 @@ void smpi_mpi_scatterv(void *sendbuf, int *sendcounts, int *displs, smpi_mpi_recv(recvbuf, recvcount, recvtype, root, system_tag, comm, MPI_STATUS_IGNORE); } else { - sendsize = smpi_datatype_size(sendtype); recvsize = smpi_datatype_size(recvtype); // Local copy from root memcpy(recvbuf, &((char *) sendbuf)[displs[root]],