- add new send flag (MCA_PML_OB1_SEND_COMPLETE) to force local completion prior to signalling mpi completion
This commit was SVN r8907.
Этот коммит содержится в:
родитель
c0d18c9579
Коммит
e920ec67b9
@ -104,11 +104,6 @@ OBJ_CLASS_DECLARATION(mca_pml_ob1_send_request_t);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Diagnostic output to trace rdma protocol timing
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Start a send request.
|
||||
*/
|
||||
@ -120,6 +115,7 @@ do {
|
||||
sendreq->req_send.req_base.req_proc->proc_pml; \
|
||||
mca_bml_base_btl_t* bml_btl; \
|
||||
size_t size = sendreq->req_send.req_bytes_packed; \
|
||||
size_t eager_limit; \
|
||||
\
|
||||
if(endpoint == NULL) { \
|
||||
rc = OMPI_ERR_UNREACH; \
|
||||
@ -142,9 +138,22 @@ do {
|
||||
\
|
||||
/* select a btl */ \
|
||||
bml_btl = mca_bml_base_btl_array_get_next(&endpoint->btl_eager); \
|
||||
eager_limit = bml_btl->btl_eager_limit - sizeof(mca_pml_ob1_hdr_t); \
|
||||
\
|
||||
/* shortcut for zero byte */ \
|
||||
if(size == 0 && sendreq->req_send.req_send_mode != MCA_PML_BASE_SEND_SYNCHRONOUS) { \
|
||||
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, 0); \
|
||||
break; \
|
||||
case MCA_PML_BASE_SEND_BUFFERED: \
|
||||
rc = mca_pml_ob1_send_request_start_copy(sendreq, bml_btl, size); \
|
||||
break; \
|
||||
case MCA_PML_BASE_SEND_COMPLETE: \
|
||||
rc = mca_pml_ob1_send_request_start_prepare(sendreq, bml_btl, size); \
|
||||
break; \
|
||||
default: \
|
||||
if (size == 0) { \
|
||||
mca_btl_base_descriptor_t* descriptor; \
|
||||
mca_btl_base_segment_t* segment; \
|
||||
mca_pml_ob1_hdr_t* hdr; \
|
||||
@ -180,19 +189,7 @@ do {
|
||||
if(OMPI_SUCCESS != rc) { \
|
||||
mca_bml_base_free(bml_btl, descriptor ); \
|
||||
} \
|
||||
\
|
||||
} else { \
|
||||
size_t eager_limit = bml_btl->btl_eager_limit - sizeof(mca_pml_ob1_hdr_t); \
|
||||
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, 0); \
|
||||
break; \
|
||||
case MCA_PML_BASE_SEND_BUFFERED: \
|
||||
rc = mca_pml_ob1_send_request_start_copy(sendreq, bml_btl, size); \
|
||||
break; \
|
||||
default: \
|
||||
if (bml_btl->btl_flags & MCA_BTL_FLAGS_SEND_INPLACE) { \
|
||||
} else if (bml_btl->btl_flags & MCA_BTL_FLAGS_SEND_INPLACE) { \
|
||||
rc = mca_pml_ob1_send_request_start_prepare(sendreq, bml_btl, size); \
|
||||
} else { \
|
||||
rc = mca_pml_ob1_send_request_start_copy(sendreq, bml_btl, size); \
|
||||
@ -212,13 +209,13 @@ do {
|
||||
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); \
|
||||
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, 0); \
|
||||
} \
|
||||
} \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
|
||||
|
@ -88,7 +88,8 @@ typedef enum {
|
||||
MCA_PML_BASE_SEND_STANDARD,
|
||||
MCA_PML_BASE_SEND_BUFFERED,
|
||||
MCA_PML_BASE_SEND_SYNCHRONOUS,
|
||||
MCA_PML_BASE_SEND_READY
|
||||
MCA_PML_BASE_SEND_READY,
|
||||
MCA_PML_BASE_SEND_COMPLETE
|
||||
} mca_pml_base_send_mode_t;
|
||||
|
||||
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user