From 270f0ffe184b5d7198fbfc1bb9afb7b3fb0f8a41 Mon Sep 17 00:00:00 2001 From: Ralph Castain Date: Thu, 20 Aug 2009 04:33:03 +0000 Subject: [PATCH] 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. --- ompi/mca/pml/csum/pml_csum_recvreq.h | 16 +++++++++++++++- ompi/mca/pml/csum/pml_csum_sendreq.h | 14 +++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/ompi/mca/pml/csum/pml_csum_recvreq.h b/ompi/mca/pml/csum/pml_csum_recvreq.h index 85f91d78a8..94c8a3599a 100644 --- a/ompi/mca/pml/csum/pml_csum_recvreq.h +++ b/ompi/mca/pml/csum/pml_csum_recvreq.h @@ -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); diff --git a/ompi/mca/pml/csum/pml_csum_sendreq.h b/ompi/mca/pml/csum/pml_csum_sendreq.h index c37686f7a4..461b1fd383 100644 --- a/ompi/mca/pml/csum/pml_csum_sendreq.h +++ b/ompi/mca/pml/csum/pml_csum_sendreq.h @@ -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; \ }