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.
Этот коммит содержится в:
родитель
c3c642aa0d
Коммит
270f0ffe18
@ -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; \
|
||||
}
|
||||
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user