X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/46b43877f8d6dc3ee4c1f417eb1a2d20598dde7e..fd48ba1bffbea870e893a356438ad6a8df237c57:/src/smpi/mpi/smpi_request.cpp diff --git a/src/smpi/mpi/smpi_request.cpp b/src/smpi/mpi/smpi_request.cpp index e10dea9918..e175c70291 100644 --- a/src/smpi/mpi/smpi_request.cpp +++ b/src/smpi/mpi/smpi_request.cpp @@ -61,10 +61,10 @@ Request::Request(void* buf, int count, MPI_Datatype datatype, int src, int dst, if(op != MPI_REPLACE && op != MPI_OP_NULL) op_->ref(); action_ = nullptr; - detached_ = 0; + detached_ = false; detached_sender_ = nullptr; real_src_ = 0; - truncated_ = 0; + truncated_ = false; real_size_ = 0; real_tag_ = 0; if (flags & MPI_REQ_PERSISTENT) @@ -126,8 +126,8 @@ int Request::match_recv(void* a, void* b, simgrid::kernel::activity::CommImpl*) if(ref->tag_ == MPI_ANY_TAG) ref->real_tag_ = req->tag_; if(ref->real_size_ < req->real_size_) - ref->truncated_ = 1; - if(req->detached_==1) + ref->truncated_ = true; + if (req->detached_) ref->detached_sender_=req; //tie the sender to the receiver, as it is detached and has to be freed in the receiver if(req->cancelled_==0) req->cancelled_=-1;//mark as uncancellable @@ -151,8 +151,8 @@ int Request::match_send(void* a, void* b, simgrid::kernel::activity::CommImpl*) if(req->tag_ == MPI_ANY_TAG) req->real_tag_ = ref->tag_; if(req->real_size_ < ref->real_size_) - req->truncated_ = 1; - if(ref->detached_==1) + req->truncated_ = true; + if (ref->detached_) req->detached_sender_=ref; //tie the sender to the receiver, as it is detached and has to be freed in the receiver if(req->cancelled_==0) req->cancelled_=-1;//mark as uncancellable @@ -409,7 +409,7 @@ void Request::start() ((flags_ & MPI_REQ_RMA) != 0 || static_cast(size_) < simgrid::config::get_value("smpi/send-is-detached-thresh"))) { void *oldbuf = nullptr; - detached_ = 1; + detached_ = true; XBT_DEBUG("Send request %p is detached", this); this->ref(); if (not(old_type_->flags() & DT_FLAG_DERIVED)) { @@ -430,7 +430,7 @@ void Request::start() //if we are giving back the control to the user without waiting for completion, we have to inject timings double sleeptime = 0.0; - if (detached_ != 0 || ((flags_ & (MPI_REQ_ISEND | MPI_REQ_SSEND)) != 0)) { // issend should be treated as isend + if (detached_ || ((flags_ & (MPI_REQ_ISEND | MPI_REQ_SSEND)) != 0)) { // issend should be treated as isend // isend and send timings may be different sleeptime = ((flags_ & MPI_REQ_ISEND) != 0) ? simgrid::s4u::Actor::self()->get_host()->extension()->oisend(size_) @@ -541,7 +541,6 @@ int Request::test(MPI_Request * request, MPI_Status * status, int* flag) { if(smpi_test_sleep > 0) simcall_process_sleep(nsleeps*smpi_test_sleep); - MPI_Status* mystatus; Status::empty(status); *flag = 1; if (((*request)->flags_ & MPI_REQ_PREPARED) == 0) { @@ -560,6 +559,7 @@ int Request::test(MPI_Request * request, MPI_Status * status, int* flag) { if (*flag) { finish_wait(request,status); if (*request != MPI_REQUEST_NULL && ((*request)->flags_ & MPI_REQ_GENERALIZED)){ + MPI_Status* mystatus; if(status==MPI_STATUS_IGNORE){ mystatus=new MPI_Status(); Status::empty(mystatus); @@ -622,7 +622,6 @@ int Request::testany(int count, MPI_Request requests[], int *index, int* flag, M int i; *flag = 0; int ret = MPI_SUCCESS; - MPI_Status* mystatus; *index = MPI_UNDEFINED; std::vector map; /** Maps all matching comms back to their location in requests **/ @@ -652,6 +651,7 @@ int Request::testany(int count, MPI_Request requests[], int *index, int* flag, M } else { finish_wait(&requests[*index],status); if (requests[*index] != MPI_REQUEST_NULL && (requests[*index]->flags_ & MPI_REQ_GENERALIZED)){ + MPI_Status* mystatus; if(status==MPI_STATUS_IGNORE){ mystatus=new MPI_Status(); Status::empty(mystatus); @@ -684,7 +684,8 @@ int Request::testall(int count, MPI_Request requests[], int* outflag, MPI_Status { MPI_Status stat; MPI_Status *pstat = status == MPI_STATUSES_IGNORE ? MPI_STATUS_IGNORE : &stat; - int flag, error=0; + int flag; + int error = 0; int ret=MPI_SUCCESS; *outflag = 1; for(int i=0; idetached_ != 0) && ((req->flags_ & MPI_REQ_SEND) != 0)) - && ((req->flags_ & MPI_REQ_PREPARED) == 0) - && ((req->flags_ & MPI_REQ_GENERALIZED) == 0)) { + if (not(req->detached_ && ((req->flags_ & MPI_REQ_SEND) != 0)) && ((req->flags_ & MPI_REQ_PREPARED) == 0) && + ((req->flags_ & MPI_REQ_GENERALIZED) == 0)) { if(status != MPI_STATUS_IGNORE) { int src = req->src_ == MPI_ANY_SOURCE ? req->real_src_ : req->src_; status->MPI_SOURCE = req->comm_->group()->rank(src); status->MPI_TAG = req->tag_ == MPI_ANY_TAG ? req->real_tag_ : req->tag_; - status->MPI_ERROR = req->truncated_ != 0 ? MPI_ERR_TRUNCATE : MPI_SUCCESS; + status->MPI_ERROR = req->truncated_ ? MPI_ERR_TRUNCATE : MPI_SUCCESS; // this handles the case were size in receive differs from size in send status->count = req->real_size_; } @@ -1060,7 +1061,7 @@ int Request::waitsome(int incount, MPI_Request requests[], int *indices, MPI_Sta indices[count] = index; count++; for (int i = 0; i < incount; i++) { - if((requests[i] != MPI_REQUEST_NULL)) { + if (requests[i] != MPI_REQUEST_NULL) { test(&requests[i], pstat,&flag); if (flag==1){ indices[count] = i;