if(ref->tag_ == MPI_ANY_TAG)
ref->real_tag_ = req->tag_;
if(ref->real_size_ < req->real_size_)
if(ref->tag_ == MPI_ANY_TAG)
ref->real_tag_ = req->tag_;
if(ref->real_size_ < req->real_size_)
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
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
if(req->tag_ == MPI_ANY_TAG)
req->real_tag_ = ref->tag_;
if(req->real_size_ < ref->real_size_)
if(req->tag_ == MPI_ANY_TAG)
req->real_tag_ = ref->tag_;
if(req->real_size_ < ref->real_size_)
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
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
((flags_ & MPI_REQ_RMA) != 0 ||
static_cast<int>(size_) < simgrid::config::get_value<int>("smpi/send-is-detached-thresh"))) {
void *oldbuf = nullptr;
((flags_ & MPI_REQ_RMA) != 0 ||
static_cast<int>(size_) < simgrid::config::get_value<int>("smpi/send-is-detached-thresh"))) {
void *oldbuf = nullptr;
XBT_DEBUG("Send request %p is detached", this);
this->ref();
if (not(old_type_->flags() & DT_FLAG_DERIVED)) {
XBT_DEBUG("Send request %p is detached", this);
this->ref();
if (not(old_type_->flags() & DT_FLAG_DERIVED)) {
// isend and send timings may be different
sleeptime = ((flags_ & MPI_REQ_ISEND) != 0)
? simgrid::s4u::Actor::self()->get_host()->extension<simgrid::smpi::Host>()->oisend(size_)
// isend and send timings may be different
sleeptime = ((flags_ & MPI_REQ_ISEND) != 0)
? simgrid::s4u::Actor::self()->get_host()->extension<simgrid::smpi::Host>()->oisend(size_)
- if (not((req->detached_ != 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_;
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_;
// this handles the case were size in receive differs from size in send
status->count = req->real_size_;
}
// this handles the case were size in receive differs from size in send
status->count = req->real_size_;
}