- pass a flag to the peer indicating wether data is contiguous at the soure
- only attempt to schedule rdma if contiguous at both src/dst - need to review this for next release This commit was SVN r8119.
Этот коммит содержится в:
родитель
5d4091d485
Коммит
607f62accd
@ -43,6 +43,7 @@
|
||||
#define MCA_PML_OB1_HDR_FLAGS_ACK 1 /* is an ack required */
|
||||
#define MCA_PML_OB1_HDR_FLAGS_NBO 2 /* is the hdr in network byte order */
|
||||
#define MCA_PML_OB1_HDR_FLAGS_PIN 4 /* is user buffer pinned */
|
||||
#define MCA_PML_OB1_HDR_FLAGS_CONTIG 8 /* is user buffer contiguous */
|
||||
|
||||
|
||||
/*
|
||||
|
@ -207,7 +207,8 @@ static void mca_pml_ob1_recv_request_ack(
|
||||
* registered.
|
||||
*/
|
||||
|
||||
if(ompi_convertor_need_buffers(&recvreq->req_recv.req_convertor) == 0) {
|
||||
if(ompi_convertor_need_buffers(&recvreq->req_recv.req_convertor) == 0 &&
|
||||
hdr->hdr_match.hdr_common.hdr_flags & MCA_PML_OB1_HDR_FLAGS_CONTIG) {
|
||||
recvreq->req_rdma_cnt = mca_pml_ob1_rdma_btls(
|
||||
bml_endpoint,
|
||||
recvreq->req_recv.req_base.req_addr,
|
||||
|
@ -556,7 +556,7 @@ int mca_pml_ob1_send_request_start_rdma(
|
||||
|
||||
/* build match header */
|
||||
hdr = (mca_pml_ob1_hdr_t*)segment->seg_addr.pval;
|
||||
hdr->hdr_common.hdr_flags = MCA_PML_OB1_HDR_FLAGS_PIN;
|
||||
hdr->hdr_common.hdr_flags = MCA_PML_OB1_HDR_FLAGS_CONTIG|MCA_PML_OB1_HDR_FLAGS_PIN;
|
||||
hdr->hdr_common.hdr_type = MCA_PML_OB1_HDR_TYPE_RGET;
|
||||
hdr->hdr_match.hdr_ctx = sendreq->req_send.req_base.req_comm->c_contextid;
|
||||
hdr->hdr_match.hdr_src = sendreq->req_send.req_base.req_comm->c_my_rank;
|
||||
@ -584,7 +584,7 @@ int mca_pml_ob1_send_request_start_rdma(
|
||||
|
||||
/* build hdr */
|
||||
hdr = (mca_pml_ob1_hdr_t*)segment->seg_addr.pval;
|
||||
hdr->hdr_common.hdr_flags = MCA_PML_OB1_HDR_FLAGS_PIN;
|
||||
hdr->hdr_common.hdr_flags = MCA_PML_OB1_HDR_FLAGS_CONTIG|MCA_PML_OB1_HDR_FLAGS_PIN;
|
||||
hdr->hdr_common.hdr_type = MCA_PML_OB1_HDR_TYPE_RNDV;
|
||||
hdr->hdr_match.hdr_ctx = sendreq->req_send.req_base.req_comm->c_contextid;
|
||||
hdr->hdr_match.hdr_src = sendreq->req_send.req_base.req_comm->c_my_rank;
|
||||
@ -621,7 +621,8 @@ int mca_pml_ob1_send_request_start_rdma(
|
||||
int mca_pml_ob1_send_request_start_rndv(
|
||||
mca_pml_ob1_send_request_t* sendreq,
|
||||
mca_bml_base_btl_t* bml_btl,
|
||||
size_t size)
|
||||
size_t size,
|
||||
int flags)
|
||||
{
|
||||
mca_btl_base_descriptor_t* des;
|
||||
mca_btl_base_segment_t* segment;
|
||||
@ -652,7 +653,7 @@ int mca_pml_ob1_send_request_start_rndv(
|
||||
|
||||
/* build hdr */
|
||||
hdr = (mca_pml_ob1_hdr_t*)segment->seg_addr.pval;
|
||||
hdr->hdr_common.hdr_flags = 0;
|
||||
hdr->hdr_common.hdr_flags = flags;
|
||||
hdr->hdr_common.hdr_type = MCA_PML_OB1_HDR_TYPE_RNDV;
|
||||
hdr->hdr_match.hdr_ctx = sendreq->req_send.req_base.req_comm->c_contextid;
|
||||
hdr->hdr_match.hdr_src = sendreq->req_send.req_base.req_comm->c_my_rank;
|
||||
|
@ -186,7 +186,7 @@ do {
|
||||
if(size <= eager_limit) { \
|
||||
switch(sendreq->req_send.req_send_mode) { \
|
||||
case MCA_PML_BASE_SEND_SYNCHRONOUS: \
|
||||
rc = mca_pml_ob1_send_request_start_rndv(sendreq, bml_btl, size); \
|
||||
rc = mca_pml_ob1_send_request_start_rndv(sendreq, bml_btl, size, 0); \
|
||||
break; \
|
||||
case MCA_PML_BASE_SEND_BUFFERED: \
|
||||
rc = mca_pml_ob1_send_request_start_copy(sendreq, bml_btl, size); \
|
||||
@ -204,15 +204,18 @@ do {
|
||||
if(sendreq->req_send.req_send_mode == MCA_PML_BASE_SEND_BUFFERED) { \
|
||||
rc = mca_pml_ob1_send_request_start_buffered(sendreq, bml_btl, size); \
|
||||
} else if \
|
||||
(ompi_convertor_need_buffers(&sendreq->req_send.req_convertor) == false && \
|
||||
0 != (sendreq->req_rdma_cnt = mca_pml_ob1_rdma_btls( \
|
||||
sendreq->req_endpoint, \
|
||||
sendreq->req_send.req_addr, \
|
||||
sendreq->req_send.req_bytes_packed, \
|
||||
sendreq->req_rdma))) { \
|
||||
rc = mca_pml_ob1_send_request_start_rdma(sendreq, bml_btl, size); \
|
||||
(ompi_convertor_need_buffers(&sendreq->req_send.req_convertor) == false) { \
|
||||
if( 0 != (sendreq->req_rdma_cnt = mca_pml_ob1_rdma_btls( \
|
||||
sendreq->req_endpoint, \
|
||||
sendreq->req_send.req_addr, \
|
||||
sendreq->req_send.req_bytes_packed, \
|
||||
sendreq->req_rdma))) { \
|
||||
rc = mca_pml_ob1_send_request_start_rdma(sendreq, bml_btl, size); \
|
||||
} else { \
|
||||
rc = mca_pml_ob1_send_request_start_rndv(sendreq, bml_btl, size, MCA_PML_OB1_HDR_FLAGS_CONTIG); \
|
||||
} \
|
||||
} else { \
|
||||
rc = mca_pml_ob1_send_request_start_rndv(sendreq, bml_btl, size); \
|
||||
rc = mca_pml_ob1_send_request_start_rndv(sendreq, bml_btl, size, 0); \
|
||||
} \
|
||||
} \
|
||||
} \
|
||||
@ -381,7 +384,8 @@ int mca_pml_ob1_send_request_start_rdma(
|
||||
int mca_pml_ob1_send_request_start_rndv(
|
||||
mca_pml_ob1_send_request_t* sendreq,
|
||||
mca_bml_base_btl_t* bml_btl,
|
||||
size_t size);
|
||||
size_t size,
|
||||
int flags);
|
||||
|
||||
/**
|
||||
* Schedule additional fragments
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user