1
1

Improve the performance of the csum pml module by not performing checksums on data when sending between procs on the same node.

Thanks to Nysal for this improvement!

This commit was SVN r21848.
Этот коммит содержится в:
Ralph Castain 2009-08-20 04:33:03 +00:00
родитель c3c642aa0d
Коммит 270f0ffe18
2 изменённых файлов: 28 добавлений и 2 удалений

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

@ -195,15 +195,29 @@ recv_request_pml_complete_check(mca_pml_csum_recv_request_t *recvreq)
extern void mca_pml_csum_recv_req_start(mca_pml_csum_recv_request_t *req);
#define MCA_PML_CSUM_RECV_REQUEST_START(r) mca_pml_csum_recv_req_start(r)
#define MCA_PML_CSUM_CHECK_LOCAL_RECV(req) \
if(OPAL_PROC_ON_LOCAL_NODE( \
(req)->req_recv.req_base.req_proc->proc_flags)) { \
(req)->req_recv.req_base.req_proc->proc_convertor->flags = \
(req)->req_recv.req_base.req_proc->proc_convertor->flags & \
~CONVERTOR_WITH_CHECKSUM; \
} else { \
(req)->req_recv.req_base.req_proc->proc_convertor->flags = \
(req)->req_recv.req_base.req_proc->proc_convertor->flags | \
CONVERTOR_WITH_CHECKSUM; \
}
static inline void prepare_recv_req_converter(mca_pml_csum_recv_request_t *req)
{
if( req->req_recv.req_base.req_datatype->super.size | req->req_recv.req_base.req_count ) {
MCA_PML_CSUM_CHECK_LOCAL_RECV(req);
opal_convertor_copy_and_prepare_for_recv(
req->req_recv.req_base.req_proc->proc_convertor,
&(req->req_recv.req_base.req_datatype->super),
req->req_recv.req_base.req_count,
req->req_recv.req_base.req_addr,
CONVERTOR_WITH_CHECKSUM,
0,
&req->req_recv.req_base.req_convertor);
opal_convertor_get_unpacked_size(&req->req_recv.req_base.req_convertor,
&req->req_bytes_delivered);

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

@ -132,6 +132,17 @@ get_request_from_send_pending(mca_pml_csum_send_pending_t *type)
} \
}
#define MCA_PML_CSUM_CHECK_LOCAL_SEND(sendreq) \
if(OPAL_PROC_ON_LOCAL_NODE( \
(sendreq)->req_send.req_base.req_proc->proc_flags)) { \
(sendreq)->req_send.req_base.req_proc->proc_convertor->flags = \
(sendreq)->req_send.req_base.req_proc->proc_convertor->flags & \
~CONVERTOR_WITH_CHECKSUM; \
} else { \
(sendreq)->req_send.req_base.req_proc->proc_convertor->flags = \
(sendreq)->req_send.req_base.req_proc->proc_convertor->flags | \
CONVERTOR_WITH_CHECKSUM; \
}
#define MCA_PML_CSUM_SEND_REQUEST_INIT(sendreq, \
buf, \
@ -143,6 +154,7 @@ get_request_from_send_pending(mca_pml_csum_send_pending_t *type)
sendmode, \
persistent) \
{ \
MCA_PML_CSUM_CHECK_LOCAL_SEND(sendreq); \
MCA_PML_BASE_SEND_REQUEST_INIT(&sendreq->req_send, \
buf, \
count, \
@ -152,7 +164,7 @@ get_request_from_send_pending(mca_pml_csum_send_pending_t *type)
comm, \
sendmode, \
persistent, \
CONVERTOR_WITH_CHECKSUM); \
0); \
(sendreq)->req_recv.pval = NULL; \
}