dont attempt to pin the receive buffer if data has
already been received This commit was SVN r7475.
Этот коммит содержится в:
родитель
1b7b220089
Коммит
9791c066e8
@ -176,7 +176,8 @@ static void mca_pml_ob1_put_completion(
|
|||||||
|
|
||||||
static void mca_pml_ob1_recv_request_ack(
|
static void mca_pml_ob1_recv_request_ack(
|
||||||
mca_pml_ob1_recv_request_t* recvreq,
|
mca_pml_ob1_recv_request_t* recvreq,
|
||||||
mca_pml_ob1_rendezvous_hdr_t* hdr)
|
mca_pml_ob1_rendezvous_hdr_t* hdr,
|
||||||
|
size_t bytes_received)
|
||||||
{
|
{
|
||||||
ompi_proc_t* proc = (ompi_proc_t*) recvreq->req_proc;
|
ompi_proc_t* proc = (ompi_proc_t*) recvreq->req_proc;
|
||||||
mca_bml_base_endpoint_t* bml_endpoint = NULL;
|
mca_bml_base_endpoint_t* bml_endpoint = NULL;
|
||||||
@ -195,7 +196,7 @@ static void mca_pml_ob1_recv_request_ack(
|
|||||||
bml_endpoint = (mca_bml_base_endpoint_t*) proc->proc_pml;
|
bml_endpoint = (mca_bml_base_endpoint_t*) proc->proc_pml;
|
||||||
bml_btl = mca_bml_base_btl_array_get_next(&bml_endpoint->btl_eager);
|
bml_btl = mca_bml_base_btl_array_get_next(&bml_endpoint->btl_eager);
|
||||||
|
|
||||||
if(hdr->hdr_msg_length > 0) {
|
if(hdr->hdr_msg_length > bytes_received) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* lookup request buffer to determine if memory is already
|
* lookup request buffer to determine if memory is already
|
||||||
@ -240,9 +241,9 @@ static void mca_pml_ob1_recv_request_ack(
|
|||||||
recvreq->req_rdma_offset = hdr->hdr_msg_length;
|
recvreq->req_rdma_offset = hdr->hdr_msg_length;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* zero byte message */
|
/* copy */
|
||||||
} else {
|
} else {
|
||||||
recvreq->req_rdma_offset = 0;
|
recvreq->req_rdma_offset = hdr->hdr_msg_length;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* allocate descriptor */
|
/* allocate descriptor */
|
||||||
@ -474,7 +475,7 @@ void mca_pml_ob1_recv_request_progress(
|
|||||||
recvreq->req_recv.req_bytes_packed = hdr->hdr_rndv.hdr_msg_length;
|
recvreq->req_recv.req_bytes_packed = hdr->hdr_rndv.hdr_msg_length;
|
||||||
recvreq->req_send = hdr->hdr_rndv.hdr_src_req;
|
recvreq->req_send = hdr->hdr_rndv.hdr_src_req;
|
||||||
MCA_PML_OB1_RECV_REQUEST_MATCHED(recvreq,&hdr->hdr_match);
|
MCA_PML_OB1_RECV_REQUEST_MATCHED(recvreq,&hdr->hdr_match);
|
||||||
mca_pml_ob1_recv_request_ack(recvreq, &hdr->hdr_rndv);
|
mca_pml_ob1_recv_request_ack(recvreq, &hdr->hdr_rndv, bytes_received);
|
||||||
MCA_PML_OB1_RECV_REQUEST_UNPACK(
|
MCA_PML_OB1_RECV_REQUEST_UNPACK(
|
||||||
recvreq,
|
recvreq,
|
||||||
segments,
|
segments,
|
||||||
@ -721,7 +722,7 @@ void mca_pml_ob1_recv_request_schedule(mca_pml_ob1_recv_request_t* recvreq)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* run progress as the prepare (pinning) can take some time */
|
/* run progress as the prepare (pinning) can take some time */
|
||||||
mca_pml_ob1_progress();
|
/* mca_pml_ob1_progress(); */
|
||||||
}
|
}
|
||||||
} while(OPAL_THREAD_ADD32(&recvreq->req_lock,-1) > 0);
|
} while(OPAL_THREAD_ADD32(&recvreq->req_lock,-1) > 0);
|
||||||
}
|
}
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user