From b2b0fc63e20a9cd7ba0bb6b473a6aa8600a7ff52 Mon Sep 17 00:00:00 2001 From: Francois WELLENREITER Date: Mon, 23 May 2016 15:45:38 +0200 Subject: [PATCH] MTL portals4 : remove the triggered rendez-vous protocol --- ompi/mca/mtl/portals4/mtl_portals4.c | 1 - ompi/mca/mtl/portals4/mtl_portals4.h | 21 +- ompi/mca/mtl/portals4/mtl_portals4_probe.c | 2 +- ompi/mca/mtl/portals4/mtl_portals4_recv.c | 232 ++++++------------- ompi/mca/mtl/portals4/mtl_portals4_request.h | 2 - ompi/mca/mtl/portals4/mtl_portals4_send.c | 15 +- 6 files changed, 88 insertions(+), 185 deletions(-) diff --git a/ompi/mca/mtl/portals4/mtl_portals4.c b/ompi/mca/mtl/portals4/mtl_portals4.c index 9985d91269..d0cb7f5269 100644 --- a/ompi/mca/mtl/portals4/mtl_portals4.c +++ b/ompi/mca/mtl/portals4/mtl_portals4.c @@ -178,7 +178,6 @@ portals4_init_interface(void) me.ignore_bits = MTL_PORTALS4_CONTEXT_MASK | MTL_PORTALS4_SOURCE_MASK | MTL_PORTALS4_TAG_MASK; - ret = PtlMEAppend(ompi_mtl_portals4.ni_h, ompi_mtl_portals4.recv_idx, &me, diff --git a/ompi/mca/mtl/portals4/mtl_portals4.h b/ompi/mca/mtl/portals4/mtl_portals4.h index 7c8bd0eaa8..2cde423a31 100644 --- a/ompi/mca/mtl/portals4/mtl_portals4.h +++ b/ompi/mca/mtl/portals4/mtl_portals4.h @@ -158,8 +158,7 @@ extern mca_mtl_portals4_module_t ompi_mtl_portals4; /* send posting */ #define MTL_PORTALS4_SET_SEND_BITS(match_bits, contextid, source, tag, type) \ { \ - match_bits = 0; \ - match_bits |= contextid; \ + match_bits = contextid; \ match_bits = (match_bits << 24); \ match_bits |= source; \ match_bits = (match_bits << 24); \ @@ -172,7 +171,7 @@ extern mca_mtl_portals4_module_t ompi_mtl_portals4; match_bits = 0; \ ignore_bits = MTL_PORTALS4_PROTOCOL_IGNR; \ \ - match_bits |= contextid; \ + match_bits = contextid; \ match_bits = (match_bits << 24); \ \ if (MPI_ANY_SOURCE == source) { \ @@ -194,38 +193,30 @@ extern mca_mtl_portals4_module_t ompi_mtl_portals4; (0 != (MTL_PORTALS4_SHORT_MSG & match_bits)) #define MTL_PORTALS4_IS_LONG_MSG(match_bits) \ (0 != (MTL_PORTALS4_LONG_MSG & match_bits)) +#define MTL_PORTALS4_IS_READY_MSG(match_bits) \ + (0 != (MTL_PORTALS4_READY_MSG & match_bits)) #define MTL_PORTALS4_GET_TAG(match_bits) \ ((int)(match_bits & MTL_PORTALS4_TAG_MASK)) #define MTL_PORTALS4_GET_SOURCE(match_bits) \ ((int)((match_bits & MTL_PORTALS4_SOURCE_MASK) >> 24)) -#define MTL_PORTALS4_GET_CONTEXT(match_bits) \ - ((int)((match_bits & MTL_PORTALS4_CONTEXT_MASK) >> 48)) #define MTL_PORTALS4_SYNC_MSG 0x8000000000000000ULL #define MTL_PORTALS4_SET_HDR_DATA(hdr_data, opcount, length, sync) \ { \ - hdr_data = 0; \ + hdr_data = (sync) ? 1 : 0; \ + hdr_data = (hdr_data << 15); \ hdr_data |= opcount & 0x7FFFULL; \ hdr_data = (hdr_data << 48); \ hdr_data |= (length & 0xFFFFFFFFFFFFULL); \ - hdr_data |= (sync ? MTL_PORTALS4_SYNC_MSG : 0); \ } #define MTL_PORTALS4_GET_LENGTH(hdr_data) ((size_t)(hdr_data & 0xFFFFFFFFFFFFULL)) #define MTL_PORTALS4_IS_SYNC_MSG(hdr_data) \ (0 != (MTL_PORTALS4_SYNC_MSG & hdr_data)) -#define MTL_PORTALS4_SET_READ_BITS(match_bits, contextid, tag) \ - { \ - match_bits = 0; \ - match_bits |= (contextid & 0x0000000000FFFFFFULL); \ - match_bits = (match_bits << 24); \ - match_bits |= (tag & 0x0000000000FFFFFFULL); \ - } - /* mtl-portals4 helpers */ OMPI_DECLSPEC ompi_proc_t * ompi_mtl_portals4_get_proc_group(struct ompi_group_t *group, int rank); diff --git a/ompi/mca/mtl/portals4/mtl_portals4_probe.c b/ompi/mca/mtl/portals4/mtl_portals4_probe.c index 8774a8faf3..fbeda2124e 100644 --- a/ompi/mca/mtl/portals4/mtl_portals4_probe.c +++ b/ompi/mca/mtl/portals4/mtl_portals4_probe.c @@ -41,7 +41,7 @@ completion_fn(ptl_event_t *ev, ompi_mtl_portals4_base_request_t *ptl_base_reques ptl_request->status.MPI_SOURCE = MTL_PORTALS4_GET_SOURCE(ev->match_bits); ptl_request->status.MPI_TAG = MTL_PORTALS4_GET_TAG(ev->match_bits); ptl_request->status.MPI_ERROR = MPI_SUCCESS; - ptl_request->status._ucount =MTL_PORTALS4_GET_LENGTH(ev->hdr_data); + ptl_request->status._ucount = MTL_PORTALS4_GET_LENGTH(ev->hdr_data); if (ev->type != PTL_EVENT_SEARCH) { ptl_request->message = ompi_mtl_portals4_message_alloc(ev); } diff --git a/ompi/mca/mtl/portals4/mtl_portals4_recv.c b/ompi/mca/mtl/portals4/mtl_portals4_recv.c index fba94eb7c0..448372917d 100644 --- a/ompi/mca/mtl/portals4/mtl_portals4_recv.c +++ b/ompi/mca/mtl/portals4/mtl_portals4_recv.c @@ -34,41 +34,6 @@ #include "mtl_portals4_recv_short.h" #include "mtl_portals4_message.h" -static int -triggered_read_msg(void *start, ptl_size_t length, ptl_process_t target, - ptl_match_bits_t match_bits, ptl_size_t remote_offset, - ompi_mtl_portals4_recv_request_t *request) -{ - int ret; - - ret = PtlCTAlloc(ompi_mtl_portals4.ni_h, &request->ct_h); - if (OPAL_UNLIKELY(PTL_OK != ret)) { - opal_output_verbose(1, ompi_mtl_base_framework.framework_output, - "%s:%d: PtlCTAlloc failed: %d", - __FILE__, __LINE__, ret); - return OMPI_ERR_OUT_OF_RESOURCE; - } - - ret = PtlTriggeredGet(ompi_mtl_portals4.send_md_h, - (ptl_size_t) start, - length, - target, - ompi_mtl_portals4.read_idx, - match_bits, - remote_offset, - request, - request->ct_h, 1); - if (OPAL_UNLIKELY(PTL_OK != ret)) { - PtlCTFree(request->ct_h); - request->ct_h = PTL_INVALID_HANDLE; - opal_output_verbose(1, ompi_mtl_base_framework.framework_output, - "%s:%d: PtlTriggeredGet failed: %d", - __FILE__, __LINE__, ret); - return OMPI_ERR_OUT_OF_RESOURCE; - } - return OMPI_SUCCESS; -} - static int read_msg(void *start, ptl_size_t length, ptl_process_t target, ptl_match_bits_t match_bits, ptl_size_t remote_offset, @@ -111,7 +76,6 @@ ompi_mtl_portals4_recv_progress(ptl_event_t *ev, ompi_mtl_portals4_recv_request_t* ptl_request = (ompi_mtl_portals4_recv_request_t*) ptl_base_request; size_t msg_length = 0; - ptl_match_bits_t read_match_bits; /* as soon as we've seen any event associated with a request, it's started */ @@ -134,13 +98,13 @@ ompi_mtl_portals4_recv_progress(ptl_event_t *ev, msg_length = MTL_PORTALS4_GET_LENGTH(ev->hdr_data); ptl_request->super.super.ompi_req->req_status.MPI_SOURCE = - MTL_PORTALS4_GET_SOURCE(ev->match_bits); + MTL_PORTALS4_GET_SOURCE(ev->match_bits); ptl_request->super.super.ompi_req->req_status.MPI_TAG = - MTL_PORTALS4_GET_TAG(ev->match_bits); + MTL_PORTALS4_GET_TAG(ev->match_bits); if (OPAL_UNLIKELY(msg_length > ptl_request->delivery_len)) { opal_output_verbose(1, ompi_mtl_base_framework.framework_output, - "truncate expected: %ld %ld", - msg_length, ptl_request->delivery_len); + "truncate expected: %ld %ld", + msg_length, ptl_request->delivery_len); ptl_request->super.super.ompi_req->req_status.MPI_ERROR = MPI_ERR_TRUNCATE; } @@ -152,47 +116,36 @@ ompi_mtl_portals4_recv_progress(ptl_event_t *ev, /* If it's not a short message and we're doing rndv, we only have the first part of the message. Issue the get to pull the second part of the message. */ - if (ptl_request->is_triggered) { - ptl_request->super.super.ompi_req->req_status._ucount = 0; + ret = read_msg((char*) ptl_request->delivery_ptr + ompi_mtl_portals4.eager_limit, + ((msg_length > ptl_request->delivery_len) ? + ptl_request->delivery_len : msg_length) - ompi_mtl_portals4.eager_limit, + ev->initiator, + ev->hdr_data, + ompi_mtl_portals4.eager_limit, + ptl_request); + if (OPAL_UNLIKELY(OMPI_SUCCESS != ret)) { + if (NULL != ptl_request->buffer_ptr) free(ptl_request->buffer_ptr); + goto callback_error; } - else { - ptl_request->super.super.ompi_req->req_status._ucount = ompi_mtl_portals4.eager_limit; - - MTL_PORTALS4_SET_READ_BITS(read_match_bits, - MTL_PORTALS4_GET_CONTEXT(ev->match_bits), - MTL_PORTALS4_GET_TAG(ev->match_bits)); - - ret = read_msg((char*) ptl_request->delivery_ptr + ompi_mtl_portals4.eager_limit, - ((msg_length > ptl_request->delivery_len) ? - ptl_request->delivery_len : msg_length) - ompi_mtl_portals4.eager_limit, - ev->initiator, - read_match_bits, - ompi_mtl_portals4.eager_limit, - ptl_request); - if (OPAL_UNLIKELY(OMPI_SUCCESS != ret)) { - if (NULL != ptl_request->buffer_ptr) free(ptl_request->buffer_ptr); - goto callback_error; - } - } } else { /* If we're either using the eager protocol or were a short message, all data has been received, so complete the message. */ ret = ompi_mtl_datatype_unpack(ptl_request->convertor, - ev->start, - ev->mlength); + ev->start, + ev->mlength); if (OPAL_UNLIKELY(OMPI_SUCCESS != ret)) { opal_output_verbose(1, ompi_mtl_base_framework.framework_output, - "%s:%d: ompi_mtl_datatype_unpack failed: %d", - __FILE__, __LINE__, ret); + "%s:%d: ompi_mtl_datatype_unpack failed: %d", + __FILE__, __LINE__, ret); ptl_request->super.super.ompi_req->req_status.MPI_ERROR = ret; } ptl_request->super.super.ompi_req->req_status._ucount = ev->mlength; OPAL_OUTPUT_VERBOSE((50, ompi_mtl_base_framework.framework_output, - "Recv %lu (0x%lx) completed, expected", - ptl_request->opcount, ptl_request->hdr_data)); + "Recv %lu (0x%lx) completed, expected", + ptl_request->opcount, ptl_request->hdr_data)); ptl_request->super.super.completion_callback(&ptl_request->super.super); } break; @@ -209,14 +162,13 @@ ompi_mtl_portals4_recv_progress(ptl_event_t *ev, goto callback_error; } - if (ptl_request->is_triggered) { - PtlCTFree(ptl_request->ct_h); - ptl_request->ct_h = PTL_INVALID_HANDLE; - } - /* set the received length in the status, now that we know - exactly how much data was sent. */ - ptl_request->super.super.ompi_req->req_status._ucount += ev->mlength; + excatly how much data was sent. */ + ptl_request->super.super.ompi_req->req_status._ucount = ev->mlength; + if (ompi_mtl_portals4.protocol == rndv) { + ptl_request->super.super.ompi_req->req_status._ucount += + ompi_mtl_portals4.eager_limit; + } #if OMPI_MTL_PORTALS4_FLOW_CONTROL OPAL_THREAD_ADD32(&ompi_mtl_portals4.flowctl.send_slots, 1); @@ -245,13 +197,13 @@ ompi_mtl_portals4_recv_progress(ptl_event_t *ev, case PTL_EVENT_PUT_OVERFLOW: OPAL_OUTPUT_VERBOSE((50, ompi_mtl_base_framework.framework_output, - "Recv %lu (0x%lx) got put_overflow event", - ptl_request->opcount, ev->hdr_data)); + "Recv %lu (0x%lx) got put_overflow event", + ptl_request->opcount, ev->hdr_data)); if (OPAL_UNLIKELY(ev->ni_fail_type != PTL_NI_OK)) { opal_output_verbose(1, ompi_mtl_base_framework.framework_output, - "%s:%d: PTL_EVENT_PUT_OVERFLOW with ni_fail_type: %d", - __FILE__, __LINE__, ev->ni_fail_type); + "%s:%d: PTL_EVENT_PUT_OVERFLOW with ni_fail_type: %d", + __FILE__, __LINE__, ev->ni_fail_type); goto callback_error; } @@ -259,25 +211,25 @@ ompi_mtl_portals4_recv_progress(ptl_event_t *ev, msg_length = MTL_PORTALS4_GET_LENGTH(ev->hdr_data); ptl_request->super.super.ompi_req->req_status.MPI_SOURCE = - MTL_PORTALS4_GET_SOURCE(ev->match_bits); + MTL_PORTALS4_GET_SOURCE(ev->match_bits); ptl_request->super.super.ompi_req->req_status.MPI_TAG = - MTL_PORTALS4_GET_TAG(ev->match_bits); + MTL_PORTALS4_GET_TAG(ev->match_bits); if (OPAL_UNLIKELY(msg_length > ptl_request->delivery_len)) { opal_output_verbose(1, ompi_mtl_base_framework.framework_output, - "truncate unexpected: %ld %ld %d", - msg_length, ptl_request->delivery_len, - MTL_PORTALS4_IS_SHORT_MSG(ev->match_bits)); + "truncate unexpected: %ld %ld %d", + msg_length, ptl_request->delivery_len, + MTL_PORTALS4_IS_SHORT_MSG(ev->match_bits)); ptl_request->super.super.ompi_req->req_status.MPI_ERROR = MPI_ERR_TRUNCATE; } #if OPAL_ENABLE_DEBUG ptl_request->hdr_data = ev->hdr_data; #endif - ptl_request->super.super.ompi_req->req_status._ucount = ev->mlength; /* overflow case. Short messages have the buffer stashed somewhere. Long messages left in buffer at the source */ if (MTL_PORTALS4_IS_SHORT_MSG(ev->match_bits)) { + ptl_request->super.super.ompi_req->req_status._ucount = ev->mlength; if (ev->mlength > 0) { struct iovec iov; uint32_t iov_count = 1; @@ -287,70 +239,63 @@ ompi_mtl_portals4_recv_progress(ptl_event_t *ev, max_data = iov.iov_len; ret = opal_convertor_unpack(ptl_request->convertor, - &iov, &iov_count, - &max_data ); + &iov, &iov_count, + &max_data ); if (NULL != ptl_request->buffer_ptr) free(ptl_request->buffer_ptr); if (OPAL_UNLIKELY(ret < 0)) { opal_output_verbose(1, ompi_mtl_base_framework.framework_output, - "%s:%d: opal_convertor_unpack failed: %d", - __FILE__, __LINE__, ret); + "%s:%d: opal_convertor_unpack failed: %d", + __FILE__, __LINE__, ret); goto callback_error; } } /* if it's a sync, send the ack */ if (MTL_PORTALS4_IS_SYNC_MSG(ev->hdr_data)) { OPAL_OUTPUT_VERBOSE((50, ompi_mtl_base_framework.framework_output, - "Recv %lu (0x%lx) sending sync ack", - ptl_request->opcount, ptl_request->hdr_data)); + "Recv %lu (0x%lx) sending sync ack", + ptl_request->opcount, ptl_request->hdr_data)); ret = PtlPut(ompi_mtl_portals4.zero_md_h, - 0, - 0, - PTL_NO_ACK_REQ, - ev->initiator, - ompi_mtl_portals4.read_idx, - ev->hdr_data, - 0, - NULL, - 0); + 0, + 0, + PTL_NO_ACK_REQ, + ev->initiator, + ompi_mtl_portals4.read_idx, + ev->hdr_data, + 0, + NULL, + 0); if (OPAL_UNLIKELY(PTL_OK != ret)) { opal_output_verbose(1, ompi_mtl_base_framework.framework_output, - "%s:%d: PtlPut failed: %d", - __FILE__, __LINE__, ret); + "%s:%d: PtlPut failed: %d", + __FILE__, __LINE__, ret); goto callback_error; } } OPAL_OUTPUT_VERBOSE((50, ompi_mtl_base_framework.framework_output, - "Recv %lu (0x%lx) completed, unexpected short (0x%lx)", - ptl_request->opcount, ptl_request->hdr_data, (long) ev->start)); + "Recv %lu (0x%lx) completed, unexpected short (0x%lx)", + ptl_request->opcount, ptl_request->hdr_data, (long) ev->start)); ptl_request->super.super.completion_callback(&ptl_request->super.super); } else { - if (!ptl_request->is_triggered) { + if (ev->mlength > 0) { + /* if rndv or triggered, copy the eager part to the right place */ + memcpy(ptl_request->delivery_ptr, ev->start, ev->mlength); + } - if (ev->mlength > 0) { - /* if rndv or triggered, copy the eager part to the right place */ - memcpy(ptl_request->delivery_ptr, ev->start, ev->mlength); - } - - - MTL_PORTALS4_SET_READ_BITS(read_match_bits, - MTL_PORTALS4_GET_CONTEXT(ev->match_bits), - MTL_PORTALS4_GET_TAG(ev->match_bits)); - - ret = read_msg((char*) ptl_request->delivery_ptr + ev->mlength, - ((msg_length > ptl_request->delivery_len) ? - ptl_request->delivery_len : msg_length) - ev->mlength, - ev->initiator, - read_match_bits, - ev->mlength, - ptl_request); - if (OPAL_UNLIKELY(OMPI_SUCCESS != ret)) { - if (NULL != ptl_request->buffer_ptr) free(ptl_request->buffer_ptr); - goto callback_error; - } + ret = read_msg((char*) ptl_request->delivery_ptr + ev->mlength, + ((msg_length > ptl_request->delivery_len) ? + ptl_request->delivery_len : msg_length) - ev->mlength, + ev->initiator, + ev->hdr_data, + ev->mlength, + ptl_request); + if (OPAL_UNLIKELY(OMPI_SUCCESS != ret)) { + if (NULL != ptl_request->buffer_ptr) free(ptl_request->buffer_ptr); + goto callback_error; } } + break; case PTL_EVENT_LINK: @@ -381,7 +326,7 @@ ompi_mtl_portals4_irecv(struct mca_mtl_base_module_t* mtl, struct opal_convertor_t *convertor, mca_mtl_request_t *mtl_request) { - ptl_match_bits_t read_match_bits, recv_match_bits, recv_ignore_bits; + ptl_match_bits_t match_bits, ignore_bits; int ret = OMPI_SUCCESS; ptl_process_t remote_proc; ompi_mtl_portals4_recv_request_t *ptl_request = @@ -405,11 +350,9 @@ ompi_mtl_portals4_irecv(struct mca_mtl_base_module_t* mtl, remote_proc = *((ptl_process_t*) ompi_mtl_portals4_get_endpoint (mtl, ompi_proc)); } - MTL_PORTALS4_SET_RECV_BITS(recv_match_bits, recv_ignore_bits, comm->c_contextid, + MTL_PORTALS4_SET_RECV_BITS(match_bits, ignore_bits, comm->c_contextid, src, tag); - MTL_PORTALS4_SET_READ_BITS(read_match_bits, comm->c_contextid, tag); - ret = ompi_mtl_datatype_recv_buf(convertor, &start, &length, &free_after); if (OPAL_UNLIKELY(OMPI_SUCCESS != ret)) { return ret; @@ -427,50 +370,28 @@ ompi_mtl_portals4_irecv(struct mca_mtl_base_module_t* mtl, ptl_request->delivery_len = length; ptl_request->req_started = false; ptl_request->super.super.ompi_req->req_status.MPI_ERROR = OMPI_SUCCESS; - ptl_request->super.super.ompi_req->req_status._ucount = 0; - - ptl_request->is_triggered = - ((ompi_mtl_portals4.protocol == eager) || - (ompi_mtl_portals4.eager_limit >= length) || - (MPI_ANY_SOURCE == src) || - (MPI_ANY_TAG == tag)) ? false : true; - - if (ptl_request->is_triggered) { - ret = triggered_read_msg((char*) ptl_request->delivery_ptr, - ptl_request->delivery_len, - remote_proc, - read_match_bits, - 0, - ptl_request); - } OPAL_OUTPUT_VERBOSE((50, ompi_mtl_base_framework.framework_output, "Recv %lu from %x,%x of length %ld (0x%lx, 0x%lx, 0x%lx)\n", ptl_request->opcount, remote_proc.phys.nid, remote_proc.phys.pid, - (int64_t)length, recv_match_bits, recv_ignore_bits, (unsigned long) ptl_request)); + (int64_t)length, match_bits, ignore_bits, (unsigned long) ptl_request)); me.start = start; me.length = length; - if (ptl_request->is_triggered) - me.ct_handle = ptl_request->ct_h; - else - me.ct_handle = PTL_CT_NONE; + me.ct_handle = PTL_CT_NONE; me.min_free = 0; me.uid = ompi_mtl_portals4.uid; me.options = PTL_ME_OP_PUT | PTL_ME_USE_ONCE | PTL_ME_EVENT_UNLINK_DISABLE; - if (ptl_request->is_triggered) - me.options |= PTL_ME_EVENT_CT_COMM | PTL_ME_EVENT_CT_OVERFLOW; - if (length <= ompi_mtl_portals4.eager_limit) { me.options |= PTL_ME_EVENT_LINK_DISABLE; } me.match_id = remote_proc; - me.match_bits = recv_match_bits; - me.ignore_bits = recv_ignore_bits; + me.match_bits = match_bits; + me.ignore_bits = ignore_bits; ret = PtlMEAppend(ompi_mtl_portals4.ni_h, ompi_mtl_portals4.recv_idx, @@ -530,7 +451,6 @@ ompi_mtl_portals4_imrecv(struct mca_mtl_base_module_t* mtl, ptl_request->delivery_ptr = start; ptl_request->delivery_len = length; ptl_request->super.super.ompi_req->req_status.MPI_ERROR = OMPI_SUCCESS; - ptl_request->super.super.ompi_req->req_status._ucount = 0; OPAL_OUTPUT_VERBOSE((50, ompi_mtl_base_framework.framework_output, "Mrecv %lu of length %ld (0x%lx)\n", diff --git a/ompi/mca/mtl/portals4/mtl_portals4_request.h b/ompi/mca/mtl/portals4/mtl_portals4_request.h index a615fb5b3b..f76846115c 100644 --- a/ompi/mca/mtl/portals4/mtl_portals4_request.h +++ b/ompi/mca/mtl/portals4/mtl_portals4_request.h @@ -69,8 +69,6 @@ struct ompi_mtl_portals4_recv_request_t { ompi_mtl_portals4_base_request_t super; void *buffer_ptr; ptl_handle_me_t me_h; - ptl_handle_ct_t ct_h; - bool is_triggered; struct opal_convertor_t *convertor; void *delivery_ptr; size_t delivery_len; diff --git a/ompi/mca/mtl/portals4/mtl_portals4_send.c b/ompi/mca/mtl/portals4/mtl_portals4_send.c index 5373e9e3c1..4ee2e77532 100644 --- a/ompi/mca/mtl/portals4/mtl_portals4_send.c +++ b/ompi/mca/mtl/portals4/mtl_portals4_send.c @@ -182,7 +182,7 @@ ompi_mtl_portals4_short_isend(mca_pml_base_send_mode_t mode, ompi_mtl_portals4_isend_request_t *ptl_request) { int ret; - ptl_match_bits_t read_match_bits, match_bits; + ptl_match_bits_t match_bits; ptl_me_t me; ptl_hdr_data_t hdr_data; @@ -190,12 +190,9 @@ ompi_mtl_portals4_short_isend(mca_pml_base_send_mode_t mode, MTL_PORTALS4_SHORT_MSG); MTL_PORTALS4_SET_HDR_DATA(hdr_data, ptl_request->opcount, length, - MCA_PML_BASE_SEND_SYNCHRONOUS == mode); + (MCA_PML_BASE_SEND_SYNCHRONOUS == mode) ? 1 : 0); if (MCA_PML_BASE_SEND_SYNCHRONOUS == mode) { - - MTL_PORTALS4_SET_READ_BITS(read_match_bits, contextid, tag); - me.start = NULL; me.length = 0; me.ct_handle = PTL_CT_NONE; @@ -207,7 +204,7 @@ ompi_mtl_portals4_short_isend(mca_pml_base_send_mode_t mode, PTL_ME_EVENT_LINK_DISABLE | PTL_ME_EVENT_UNLINK_DISABLE; me.match_id = ptl_proc; - me.match_bits = read_match_bits; + me.match_bits = hdr_data; me.ignore_bits = 0; ret = PtlMEAppend(ompi_mtl_portals4.ni_h, @@ -269,7 +266,7 @@ ompi_mtl_portals4_long_isend(void *start, size_t length, int contextid, int tag, ompi_mtl_portals4_isend_request_t *ptl_request) { int ret; - ptl_match_bits_t read_match_bits, match_bits; + ptl_match_bits_t match_bits; ptl_me_t me; ptl_hdr_data_t hdr_data; ptl_size_t put_length; @@ -277,8 +274,6 @@ ompi_mtl_portals4_long_isend(void *start, size_t length, int contextid, int tag, MTL_PORTALS4_SET_SEND_BITS(match_bits, contextid, localrank, tag, MTL_PORTALS4_LONG_MSG); - MTL_PORTALS4_SET_READ_BITS(read_match_bits, contextid, tag); - MTL_PORTALS4_SET_HDR_DATA(hdr_data, ptl_request->opcount, length, 0); me.start = start; @@ -292,7 +287,7 @@ ompi_mtl_portals4_long_isend(void *start, size_t length, int contextid, int tag, PTL_ME_EVENT_LINK_DISABLE | PTL_ME_EVENT_UNLINK_DISABLE; me.match_id = ptl_proc; - me.match_bits = read_match_bits; + me.match_bits = hdr_data; me.ignore_bits = 0; ret = PtlMEAppend(ompi_mtl_portals4.ni_h,