From 5d50b025b8fb03c957742012292446d27aefa2f3 Mon Sep 17 00:00:00 2001 From: George Bosilca Date: Fri, 17 Dec 2004 09:27:10 +0000 Subject: [PATCH] Decrease the latency. Just keep everything minimal. This commit was SVN r3844. --- src/mca/ptl/gm/src/ptl_gm.c | 6 +++--- src/mca/ptl/gm/src/ptl_gm_priv.c | 24 +++++++----------------- 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/src/mca/ptl/gm/src/ptl_gm.c b/src/mca/ptl/gm/src/ptl_gm.c index 7d588dafec..0784b31def 100644 --- a/src/mca/ptl/gm/src/ptl_gm.c +++ b/src/mca/ptl/gm/src/ptl_gm.c @@ -393,17 +393,17 @@ mca_ptl_gm_matched( mca_ptl_base_module_t * ptl, ompi_convertor_copy( peer->peer_proc->proc_ompi->proc_convertor, &frag->frag_base.frag_convertor); - ompi_convertor_init_for_recv( &frag->frag_base.frag_convertor, - 0, + ompi_convertor_init_for_recv( &frag->frag_base.frag_convertor, 0, request->req_base.req_datatype, request->req_base.req_count, request->req_base.req_addr, - 0 /* TO DO which offset ? */, NULL ); + 0, NULL ); out_size = 1; max_data = iov.iov_len; rc = ompi_convertor_unpack( &frag->frag_base.frag_convertor, &(iov), &out_size, &max_data, &freeAfter ); assert( rc >= 0 ); + recv_frag->frag_bytes_processed += max_data; } /* update progress*/ diff --git a/src/mca/ptl/gm/src/ptl_gm_priv.c b/src/mca/ptl/gm/src/ptl_gm_priv.c index b39be3a6fb..1aebafdc5b 100644 --- a/src/mca/ptl/gm/src/ptl_gm_priv.c +++ b/src/mca/ptl/gm/src/ptl_gm_priv.c @@ -217,13 +217,6 @@ int mca_ptl_gm_peer_send( mca_ptl_gm_peer_t *ptl_peer, /* At this point the header is already filled up with informations as a match header */ if( (flags & MCA_PTL_FLAGS_ACK) || (0 == offset) ) { - hdr->hdr_common.hdr_flags = flags; - hdr->hdr_match.hdr_contextid = sendreq->req_base.req_comm->c_contextid; - hdr->hdr_match.hdr_src = sendreq->req_base.req_comm->c_my_rank; - hdr->hdr_match.hdr_dst = sendreq->req_base.req_peer; - hdr->hdr_match.hdr_tag = sendreq->req_base.req_tag; - hdr->hdr_match.hdr_msg_length = sendreq->req_bytes_packed; - hdr->hdr_match.hdr_msg_seq = sendreq->req_base.req_sequence; if( flags & MCA_PTL_FLAGS_ACK ) { header_length = sizeof(mca_ptl_base_rendezvous_header_t); hdr->hdr_common.hdr_type = MCA_PTL_HDR_TYPE_RNDV; @@ -231,13 +224,11 @@ int mca_ptl_gm_peer_send( mca_ptl_gm_peer_t *ptl_peer, hdr->hdr_rndv.hdr_src_ptr.lval = 0; hdr->hdr_rndv.hdr_src_ptr.pval = fragment; } else { - hdr->hdr_common.hdr_type = MCA_PTL_HDR_TYPE_MATCH; header_length = sizeof(mca_ptl_base_match_header_t); } } else { header_length = sizeof(mca_ptl_base_frag_header_t); hdr->hdr_frag.hdr_common.hdr_type = MCA_PTL_HDR_TYPE_FRAG; - hdr->hdr_frag.hdr_common.hdr_flags = flags; hdr->hdr_frag.hdr_frag_length = size_in; hdr->hdr_frag.hdr_frag_offset = offset; hdr->hdr_frag.hdr_src_ptr.lval = 0; /* for VALGRIND/PURIFY - REPLACE WITH MACRO */ @@ -245,8 +236,6 @@ int mca_ptl_gm_peer_send( mca_ptl_gm_peer_t *ptl_peer, hdr->hdr_frag.hdr_dst_ptr = sendreq->req_peer_match; } - iov.iov_len = 0; /* nothing yet */ - if( size_in > 0 ) { /* first fragment (eager send) and first fragment of long protocol * can use the convertor initialized on the request. The remaining @@ -279,9 +268,16 @@ int mca_ptl_gm_peer_send( mca_ptl_gm_peer_t *ptl_peer, fragment->send_frag.frag_base.frag_addr = ((char*)fragment->send_buf) + header_length; fragment->send_frag.frag_base.frag_size = max_data; + + /* must update the offset after actual fragment size is determined + * before attempting to send the fragment + */ + mca_pml_base_send_request_offset( sendreq, + fragment->send_frag.frag_base.frag_size ); } else { fragment->send_frag.frag_base.frag_addr = NULL; fragment->send_frag.frag_base.frag_size = 0; + iov.iov_len = 0; /* no data will be transmitted */ } /* adjust size and request offset to reflect actual number of bytes @@ -289,12 +285,6 @@ int mca_ptl_gm_peer_send( mca_ptl_gm_peer_t *ptl_peer, */ size_out = iov.iov_len + header_length; - /* must update the offset after actual fragment size is determined - * before attempting to send the fragment - */ - mca_pml_base_send_request_offset( sendreq, - fragment->send_frag.frag_base.frag_size ); - /* Send the first fragment */ gm_send_to_peer_with_callback( ptl_peer->peer_ptl->gm_port, fragment->send_buf, GM_SIZE, size_out, GM_LOW_PRIORITY, ptl_peer->local_id,