1
1

- add new send flag (MCA_PML_OB1_SEND_COMPLETE) to force local completion prior to signalling mpi completion

This commit was SVN r8907.
Этот коммит содержится в:
Tim Woodall 2006-02-06 19:51:49 +00:00
родитель c0d18c9579
Коммит e920ec67b9
2 изменённых файлов: 108 добавлений и 110 удалений

Просмотреть файл

@ -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;