[mpich] MPICH primary repository branch, master, updated. v3.2a2-178-g51d6c94
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "MPICH primary repository". The branch, master has been updated via 51d6c94873957ca8ccbd996db2888e39c3687ed8 (commit) via eb972bf67b442b36fdcd9e2138ca0e15ed45a9f8 (commit) via fe0d61dbf896be25d1d63f63aed4ff5a3d2ee484 (commit) via ad489f822654fde50d187b483590ee48901a399d (commit) from 6523ad970475dcbe71d8529d0928aa31ed416cdf (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- http://git.mpich.org/mpich.git/commitdiff/51d6c94873957ca8ccbd996db2888e39c3... commit 51d6c94873957ca8ccbd996db2888e39c3687ed8 Author: Ken Raffenetti <[email protected]> Date: Wed Feb 25 12:52:31 2015 -0600 portals4: change variable name Make it clearer that the meappend_large is passed a usable set of match_bits. No further conversion is needed. Signed-off-by: Antonio Pena Monferrer <[email protected]> diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c index d13adae..0564ac0 100644 --- a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c +++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c @@ -96,7 +96,7 @@ int MPID_nem_ptl_nm_finalize(void) #define FUNCNAME meappend_large #undef FCNAME #define FCNAME MPIU_QUOTE(FUNCNAME) -static inline int meappend_large(ptl_process_t id, MPID_Request *req, ptl_match_bits_t tag, void *buf, size_t remaining) +static inline int meappend_large(ptl_process_t id, MPID_Request *req, ptl_match_bits_t match_bits, void *buf, size_t remaining) { int mpi_errno = MPI_SUCCESS; int ret; @@ -113,7 +113,7 @@ static inline int meappend_large(ptl_process_t id, MPID_Request *req, ptl_match_ me.options = ( PTL_ME_OP_GET | PTL_ME_USE_ONCE | PTL_ME_IS_ACCESSIBLE | PTL_ME_EVENT_LINK_DISABLE | PTL_ME_EVENT_UNLINK_DISABLE ); me.match_id = id; - me.match_bits = tag; + me.match_bits = match_bits; me.ignore_bits = NPTL_MATCH_IGNORE; me.min_free = 0; @@ -126,7 +126,7 @@ static inline int meappend_large(ptl_process_t id, MPID_Request *req, ptl_match_ &foo_me_handle); MPIU_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**ptlmeappend", "**ptlmeappend %s", MPID_nem_ptl_strerror(ret)); - MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "PtlMEAppend(req=%p tag=%#lx)", req, tag)); + MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "PtlMEAppend(req=%p tag=%#lx)", req, NPTL_MATCH_GET_TAG(match_bits))); me.start = (char *)me.start + me.length; remaining -= me.length; http://git.mpich.org/mpich.git/commitdiff/eb972bf67b442b36fdcd9e2138ca0e15ed... commit eb972bf67b442b36fdcd9e2138ca0e15ed45a9f8 Author: Ken Raffenetti <[email protected]> Date: Wed Feb 25 09:12:22 2015 -0600 portals4: use portals4 hdr_data for length info Moves the message length information from the payload to the message header to save on overhead. Signed-off-by: Antonio Pena Monferrer <[email protected]> diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c index a4a2134..d13adae 100644 --- a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c +++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c @@ -12,17 +12,12 @@ #define NUM_RECV_BUFS 50 #define CTL_TAG 0 #define GET_TAG 1 -#define PAYLOAD_SIZE (PTL_MAX_EAGER - offsetof(buf_t, packet) - sizeof(MPIDI_CH3_Pkt_t)) -#define SENDBUF_SIZE(sent_sz_) (offsetof(buf_t, packet) + sizeof(MPIDI_CH3_Pkt_t) + (sent_sz_)) +#define PAYLOAD_SIZE (PTL_MAX_EAGER - sizeof(MPIDI_CH3_Pkt_t)) +#define SENDBUF_SIZE(sent_sz_) (sizeof(MPIDI_CH3_Pkt_t) + (sent_sz_)) #define SENDBUF(req_) REQ_PTL(req_)->chunk_buffer[0] #define TMPBUF(req_) REQ_PTL(req_)->chunk_buffer[1] -typedef struct { - size_t remaining; - char packet[PTL_MAX_EAGER]; -} buf_t; - -static buf_t recvbufs[NUM_RECV_BUFS]; +static char recvbufs[NUM_RECV_BUFS * PTL_MAX_EAGER]; static ptl_me_t mes[NUM_RECV_BUFS]; static ptl_handle_me_t me_handles[NUM_RECV_BUFS]; static unsigned long long put_cnt = 0; /* required to not finalizing too early */ @@ -46,8 +41,8 @@ int MPID_nem_ptl_nm_init(void) id_any.phys.nid = PTL_NID_ANY; for (i = 0; i < NUM_RECV_BUFS; ++i) { - mes[i].start = &recvbufs[i]; - mes[i].length = sizeof(buf_t); + mes[i].start = &recvbufs[i * PTL_MAX_EAGER]; + mes[i].length = PTL_MAX_EAGER; mes[i].ct_handle = PTL_CT_NONE; mes[i].uid = PTL_UID_ANY; mes[i].options = (PTL_ME_OP_PUT | PTL_ME_USE_ONCE | PTL_ME_EVENT_UNLINK_DISABLE | @@ -156,9 +151,10 @@ static inline int send_pkt(MPIDI_VC_t *vc, void *hdr_p, void *data_p, MPIDI_msg_ int mpi_errno = MPI_SUCCESS; MPID_nem_ptl_vc_area *const vc_ptl = VC_PTL(vc); int ret; - buf_t *sendbuf; + char *sendbuf; const size_t sent_sz = data_sz < PAYLOAD_SIZE ? data_sz : PAYLOAD_SIZE; const size_t sendbuf_sz = SENDBUF_SIZE(sent_sz); + const size_t remaining = data_sz - sent_sz; ptl_match_bits_t match_bits = NPTL_MATCH(CTL_TAG, 0, MPIDI_Process.my_pg_rank); MPIDI_STATE_DECL(MPID_STATE_SEND_PKT); @@ -166,17 +162,16 @@ static inline int send_pkt(MPIDI_VC_t *vc, void *hdr_p, void *data_p, MPIDI_msg_ sendbuf = MPIU_Malloc(sendbuf_sz); MPIU_Assert(sendbuf != NULL); - MPIU_Memcpy(sendbuf->packet, hdr_p, sizeof(MPIDI_CH3_Pkt_t)); - sendbuf->remaining = data_sz - sent_sz; + MPIU_Memcpy(sendbuf, hdr_p, sizeof(MPIDI_CH3_Pkt_t)); TMPBUF(sreq) = NULL; REQ_PTL(sreq)->num_gets = 0; REQ_PTL(sreq)->put_done = 0; if (data_sz) { - MPIU_Memcpy(sendbuf->packet + sizeof(MPIDI_CH3_Pkt_t), data_p, sent_sz); - if (sendbuf->remaining) /* Post MEs for the remote gets */ + MPIU_Memcpy(sendbuf + sizeof(MPIDI_CH3_Pkt_t), data_p, sent_sz); + if (remaining) /* Post MEs for the remote gets */ mpi_errno = meappend_large(vc_ptl->id, sreq, NPTL_MATCH(GET_TAG, 0, MPIDI_Process.my_pg_rank), - (char *)data_p + sent_sz, sendbuf->remaining); + (char *)data_p + sent_sz, remaining); if (mpi_errno) goto fn_fail; } @@ -185,7 +180,7 @@ static inline int send_pkt(MPIDI_VC_t *vc, void *hdr_p, void *data_p, MPIDI_msg_ REQ_PTL(sreq)->event_handler = MPID_nem_ptl_nm_ctl_event_handler; ret = MPID_nem_ptl_rptl_put(MPIDI_nem_ptl_global_md, (ptl_size_t)sendbuf, sendbuf_sz, PTL_NO_ACK_REQ, - vc_ptl->id, vc_ptl->ptc, match_bits, 0, sreq, 0); + vc_ptl->id, vc_ptl->ptc, match_bits, 0, sreq, NPTL_HEADER(0, remaining)); MPIU_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**ptlput", "**ptlput %s", MPID_nem_ptl_strerror(ret)); MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "PtlPut(size=%lu id=(%#x,%#x) pt=%#x)", @@ -209,9 +204,10 @@ static int send_noncontig_pkt(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr_p) int mpi_errno = MPI_SUCCESS; MPID_nem_ptl_vc_area *const vc_ptl = VC_PTL(vc); int ret; - buf_t *sendbuf; + char *sendbuf; const size_t sent_sz = sreq->dev.segment_size < PAYLOAD_SIZE ? sreq->dev.segment_size : PAYLOAD_SIZE; - size_t sendbuf_sz = SENDBUF_SIZE(sent_sz); + const size_t sendbuf_sz = SENDBUF_SIZE(sent_sz); + const size_t remaining = sreq->dev.segment_size - sent_sz; ptl_match_bits_t match_bits = NPTL_MATCH(CTL_TAG, 0, MPIDI_Process.my_pg_rank); MPIDI_STATE_DECL(MPID_STATE_SEND_NONCONTIG_PKT); MPIDI_FUNC_ENTER(MPID_STATE_SEND_NONCONTIG_PKT); @@ -220,24 +216,23 @@ static int send_noncontig_pkt(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr_p) sendbuf = MPIU_Malloc(sendbuf_sz); MPIU_Assert(sendbuf != NULL); - MPIU_Memcpy(sendbuf->packet, hdr_p, sizeof(MPIDI_CH3_Pkt_t)); - sendbuf->remaining = sreq->dev.segment_size - sent_sz; + MPIU_Memcpy(sendbuf, hdr_p, sizeof(MPIDI_CH3_Pkt_t)); TMPBUF(sreq) = NULL; REQ_PTL(sreq)->num_gets = 0; REQ_PTL(sreq)->put_done = 0; if (sreq->dev.segment_size) { MPIDI_msg_sz_t last = sent_sz; - MPID_Segment_pack(sreq->dev.segment_ptr, 0, &last, sendbuf->packet + sizeof(MPIDI_CH3_Pkt_t)); + MPID_Segment_pack(sreq->dev.segment_ptr, 0, &last, sendbuf + sizeof(MPIDI_CH3_Pkt_t)); - if (sendbuf->remaining) { /* Post MEs for the remote gets */ - TMPBUF(sreq) = MPIU_Malloc(sendbuf->remaining); + if (remaining) { /* Post MEs for the remote gets */ + TMPBUF(sreq) = MPIU_Malloc(remaining); sreq->dev.segment_first = last; last = sreq->dev.segment_size; MPID_Segment_pack(sreq->dev.segment_ptr, sreq->dev.segment_first, &last, TMPBUF(sreq)); MPIU_Assert(last == sreq->dev.segment_size); - mpi_errno = meappend_large(vc_ptl->id, sreq, NPTL_MATCH(GET_TAG, 0, MPIDI_Process.my_pg_rank), TMPBUF(sreq), sendbuf->remaining); + mpi_errno = meappend_large(vc_ptl->id, sreq, NPTL_MATCH(GET_TAG, 0, MPIDI_Process.my_pg_rank), TMPBUF(sreq), remaining); if (mpi_errno) goto fn_fail; } @@ -247,7 +242,7 @@ static int send_noncontig_pkt(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr_p) REQ_PTL(sreq)->event_handler = MPID_nem_ptl_nm_ctl_event_handler; ret = MPID_nem_ptl_rptl_put(MPIDI_nem_ptl_global_md, (ptl_size_t)sendbuf, sendbuf_sz, PTL_NO_ACK_REQ, - vc_ptl->id, vc_ptl->ptc, match_bits, 0, sreq, 0); + vc_ptl->id, vc_ptl->ptc, match_bits, 0, sreq, NPTL_HEADER(0, remaining)); MPIU_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**ptlput", "**ptlput %s", MPID_nem_ptl_strerror(ret)); MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "PtlPut(size=%lu id=(%#x,%#x) pt=%#x)", @@ -384,17 +379,18 @@ int MPID_nem_ptl_nm_ctl_event_handler(const ptl_event_t *e) { int ret; const uint64_t buf_idx = (uint64_t) e->user_ptr; - const size_t packet_sz = e->mlength - offsetof(buf_t, packet); + const size_t packet_sz = e->mlength; MPIDI_VC_t *vc; MPID_nem_ptl_vc_area * vc_ptl; + ptl_size_t remaining = NPTL_HEADER_GET_LENGTH(e->hdr_data); - MPIU_Assert(e->start == &recvbufs[buf_idx]); + MPIU_Assert(e->start == &recvbufs[buf_idx * PTL_MAX_EAGER]); MPIDI_PG_Get_vc(MPIDI_Process.my_pg, NPTL_MATCH_GET_RANK(e->match_bits), &vc); vc_ptl = VC_PTL(vc); - if (recvbufs[buf_idx].remaining == 0) { - mpi_errno = MPID_nem_handle_pkt(vc, recvbufs[buf_idx].packet, packet_sz); + if (remaining == 0) { + mpi_errno = MPID_nem_handle_pkt(vc, &recvbufs[buf_idx * PTL_MAX_EAGER], packet_sz); if (mpi_errno) MPIU_ERR_POP(mpi_errno); } @@ -407,17 +403,16 @@ int MPID_nem_ptl_nm_ctl_event_handler(const ptl_event_t *e) MPIU_Assert(req != NULL); MPIDI_CH3U_Request_decrement_cc(req, &incomplete); /* We'll increment it below */ REQ_PTL(req)->event_handler = MPID_nem_ptl_nm_ctl_event_handler; - REQ_PTL(req)->bytes_put = packet_sz + recvbufs[buf_idx].remaining; + REQ_PTL(req)->bytes_put = packet_sz + remaining; TMPBUF(req) = MPIU_Malloc(REQ_PTL(req)->bytes_put); MPIU_Assert(TMPBUF(req) != NULL); - MPIU_Memcpy(TMPBUF(req), recvbufs[buf_idx].packet, packet_sz); + MPIU_Memcpy(TMPBUF(req), &recvbufs[buf_idx * PTL_MAX_EAGER], packet_sz); req->ch.vc = vc; - size = recvbufs[buf_idx].remaining < MPIDI_nem_ptl_ni_limits.max_msg_size ? - recvbufs[buf_idx].remaining : MPIDI_nem_ptl_ni_limits.max_msg_size; + size = remaining < MPIDI_nem_ptl_ni_limits.max_msg_size ? remaining : MPIDI_nem_ptl_ni_limits.max_msg_size; buf_ptr = (char *)TMPBUF(req) + packet_sz; - while (recvbufs[buf_idx].remaining) { + while (remaining) { MPIDI_CH3U_Request_increment_cc(req, &incomplete); /* Will be decremented - and eventually freed in REPLY */ ret = MPID_nem_ptl_rptl_get(MPIDI_nem_ptl_global_md, (ptl_size_t)buf_ptr, size, vc_ptl->id, vc_ptl->ptc, NPTL_MATCH(GET_TAG, 0, MPIDI_Process.my_pg_rank), 0, req); @@ -428,9 +423,9 @@ int MPID_nem_ptl_nm_ctl_event_handler(const ptl_event_t *e) vc_ptl->id.phys.nid, vc_ptl->id.phys.pid, vc_ptl->ptc, GET_TAG)); buf_ptr += size; - recvbufs[buf_idx].remaining -= size; - if (recvbufs[buf_idx].remaining < MPIDI_nem_ptl_ni_limits.max_msg_size) - size = recvbufs[buf_idx].remaining; + remaining -= size; + if (remaining < MPIDI_nem_ptl_ni_limits.max_msg_size) + size = remaining; } } http://git.mpich.org/mpich.git/commitdiff/fe0d61dbf896be25d1d63f63aed4ff5a3d... commit fe0d61dbf896be25d1d63f63aed4ff5a3d2ee484 Author: Ken Raffenetti <[email protected]> Date: Tue Feb 24 23:12:28 2015 -0600 portals4: encode rank in match bits instead of header Use the match bits to encode a process's rank in MPI_COMM_WORLD, to be retrieved by the receiving process. This is the same method used by the 2-sided Portals code, and allows the header to be used for other purposes. Signed-off-by: Antonio Pena Monferrer <[email protected]> diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c index 41ceaa0..a4a2134 100644 --- a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c +++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c @@ -53,8 +53,8 @@ int MPID_nem_ptl_nm_init(void) mes[i].options = (PTL_ME_OP_PUT | PTL_ME_USE_ONCE | PTL_ME_EVENT_UNLINK_DISABLE | PTL_ME_EVENT_LINK_DISABLE | PTL_ME_IS_ACCESSIBLE); mes[i].match_id = id_any; - mes[i].match_bits = CTL_TAG; - mes[i].ignore_bits = 0; + mes[i].match_bits = NPTL_MATCH(CTL_TAG, 0, MPI_ANY_SOURCE); + mes[i].ignore_bits = NPTL_MATCH_IGNORE; ret = MPID_nem_ptl_me_append(MPIDI_nem_ptl_ni, MPIDI_nem_ptl_control_pt, &mes[i], PTL_PRIORITY_LIST, (void *)(uint64_t)i, &me_handles[i]); @@ -119,7 +119,7 @@ static inline int meappend_large(ptl_process_t id, MPID_Request *req, ptl_match_ PTL_ME_EVENT_LINK_DISABLE | PTL_ME_EVENT_UNLINK_DISABLE ); me.match_id = id; me.match_bits = tag; - me.ignore_bits = 0; + me.ignore_bits = NPTL_MATCH_IGNORE; me.min_free = 0; while (remaining) { @@ -159,6 +159,7 @@ static inline int send_pkt(MPIDI_VC_t *vc, void *hdr_p, void *data_p, MPIDI_msg_ buf_t *sendbuf; const size_t sent_sz = data_sz < PAYLOAD_SIZE ? data_sz : PAYLOAD_SIZE; const size_t sendbuf_sz = SENDBUF_SIZE(sent_sz); + ptl_match_bits_t match_bits = NPTL_MATCH(CTL_TAG, 0, MPIDI_Process.my_pg_rank); MPIDI_STATE_DECL(MPID_STATE_SEND_PKT); MPIDI_FUNC_ENTER(MPID_STATE_SEND_PKT); @@ -174,7 +175,8 @@ static inline int send_pkt(MPIDI_VC_t *vc, void *hdr_p, void *data_p, MPIDI_msg_ if (data_sz) { MPIU_Memcpy(sendbuf->packet + sizeof(MPIDI_CH3_Pkt_t), data_p, sent_sz); if (sendbuf->remaining) /* Post MEs for the remote gets */ - mpi_errno = meappend_large(vc_ptl->id, sreq, GET_TAG, (char *)data_p + sent_sz, sendbuf->remaining); + mpi_errno = meappend_large(vc_ptl->id, sreq, NPTL_MATCH(GET_TAG, 0, MPIDI_Process.my_pg_rank), + (char *)data_p + sent_sz, sendbuf->remaining); if (mpi_errno) goto fn_fail; } @@ -183,7 +185,7 @@ static inline int send_pkt(MPIDI_VC_t *vc, void *hdr_p, void *data_p, MPIDI_msg_ REQ_PTL(sreq)->event_handler = MPID_nem_ptl_nm_ctl_event_handler; ret = MPID_nem_ptl_rptl_put(MPIDI_nem_ptl_global_md, (ptl_size_t)sendbuf, sendbuf_sz, PTL_NO_ACK_REQ, - vc_ptl->id, vc_ptl->ptc, CTL_TAG, 0, sreq, MPIDI_Process.my_pg_rank); + vc_ptl->id, vc_ptl->ptc, match_bits, 0, sreq, 0); MPIU_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**ptlput", "**ptlput %s", MPID_nem_ptl_strerror(ret)); MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "PtlPut(size=%lu id=(%#x,%#x) pt=%#x)", @@ -210,6 +212,7 @@ static int send_noncontig_pkt(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr_p) buf_t *sendbuf; const size_t sent_sz = sreq->dev.segment_size < PAYLOAD_SIZE ? sreq->dev.segment_size : PAYLOAD_SIZE; size_t sendbuf_sz = SENDBUF_SIZE(sent_sz); + ptl_match_bits_t match_bits = NPTL_MATCH(CTL_TAG, 0, MPIDI_Process.my_pg_rank); MPIDI_STATE_DECL(MPID_STATE_SEND_NONCONTIG_PKT); MPIDI_FUNC_ENTER(MPID_STATE_SEND_NONCONTIG_PKT); @@ -234,7 +237,7 @@ static int send_noncontig_pkt(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr_p) MPID_Segment_pack(sreq->dev.segment_ptr, sreq->dev.segment_first, &last, TMPBUF(sreq)); MPIU_Assert(last == sreq->dev.segment_size); - mpi_errno = meappend_large(vc_ptl->id, sreq, GET_TAG, TMPBUF(sreq), sendbuf->remaining); + mpi_errno = meappend_large(vc_ptl->id, sreq, NPTL_MATCH(GET_TAG, 0, MPIDI_Process.my_pg_rank), TMPBUF(sreq), sendbuf->remaining); if (mpi_errno) goto fn_fail; } @@ -244,7 +247,7 @@ static int send_noncontig_pkt(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr_p) REQ_PTL(sreq)->event_handler = MPID_nem_ptl_nm_ctl_event_handler; ret = MPID_nem_ptl_rptl_put(MPIDI_nem_ptl_global_md, (ptl_size_t)sendbuf, sendbuf_sz, PTL_NO_ACK_REQ, - vc_ptl->id, vc_ptl->ptc, CTL_TAG, 0, sreq, MPIDI_Process.my_pg_rank); + vc_ptl->id, vc_ptl->ptc, match_bits, 0, sreq, 0); MPIU_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**ptlput", "**ptlput %s", MPID_nem_ptl_strerror(ret)); MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "PtlPut(size=%lu id=(%#x,%#x) pt=%#x)", @@ -387,7 +390,7 @@ int MPID_nem_ptl_nm_ctl_event_handler(const ptl_event_t *e) MPIU_Assert(e->start == &recvbufs[buf_idx]); - MPIDI_PG_Get_vc(MPIDI_Process.my_pg, (uint64_t)e->hdr_data, &vc); + MPIDI_PG_Get_vc(MPIDI_Process.my_pg, NPTL_MATCH_GET_RANK(e->match_bits), &vc); vc_ptl = VC_PTL(vc); if (recvbufs[buf_idx].remaining == 0) { @@ -417,11 +420,11 @@ int MPID_nem_ptl_nm_ctl_event_handler(const ptl_event_t *e) while (recvbufs[buf_idx].remaining) { MPIDI_CH3U_Request_increment_cc(req, &incomplete); /* Will be decremented - and eventually freed in REPLY */ ret = MPID_nem_ptl_rptl_get(MPIDI_nem_ptl_global_md, (ptl_size_t)buf_ptr, - size, vc_ptl->id, vc_ptl->ptc, GET_TAG, 0, req); + size, vc_ptl->id, vc_ptl->ptc, NPTL_MATCH(GET_TAG, 0, MPIDI_Process.my_pg_rank), 0, req); MPIU_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**ptlget", "**ptlget %s", MPID_nem_ptl_strerror(ret)); MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, - "PtlGet(size=%lu id=(%#x,%#x) pt=%#x tag=%#lx)", size, + "PtlGet(size=%lu id=(%#x,%#x) pt=%#x tag=%d)", size, vc_ptl->id.phys.nid, vc_ptl->id.phys.pid, vc_ptl->ptc, GET_TAG)); buf_ptr += size; http://git.mpich.org/mpich.git/commitdiff/ad489f822654fde50d187b483590ee4890... commit ad489f822654fde50d187b483590ee48901a399d Author: Ken Raffenetti <[email protected]> Date: Wed Feb 11 16:15:26 2015 -0600 portals4: simplify operation tags in RMA code Since we use the same portal for puts and gets in the RMA code, we differentiate them with the otherwise unused match_bits. This commit removes the sequenced tag numbers, instead relying on a simple 2 tag system and the natural matching order of the portal. Signed-off-by: Antonio Pena Monferrer <[email protected]> diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c index 1780920..41ceaa0 100644 --- a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c +++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c @@ -11,19 +11,14 @@ #define NUM_RECV_BUFS 50 #define CTL_TAG 0 +#define GET_TAG 1 #define PAYLOAD_SIZE (PTL_MAX_EAGER - offsetof(buf_t, packet) - sizeof(MPIDI_CH3_Pkt_t)) #define SENDBUF_SIZE(sent_sz_) (offsetof(buf_t, packet) + sizeof(MPIDI_CH3_Pkt_t) + (sent_sz_)) #define SENDBUF(req_) REQ_PTL(req_)->chunk_buffer[0] #define TMPBUF(req_) REQ_PTL(req_)->chunk_buffer[1] -#define NEW_TAG(tag_) do { \ - if (++global_tag == CTL_TAG) \ - ++global_tag; \ - (tag_) = global_tag; \ -} while(0) typedef struct { size_t remaining; - ptl_match_bits_t tag; char packet[PTL_MAX_EAGER]; } buf_t; @@ -31,8 +26,6 @@ static buf_t recvbufs[NUM_RECV_BUFS]; static ptl_me_t mes[NUM_RECV_BUFS]; static ptl_handle_me_t me_handles[NUM_RECV_BUFS]; static unsigned long long put_cnt = 0; /* required to not finalizing too early */ -static ptl_match_bits_t global_tag = 0; - #undef FUNCNAME #define FUNCNAME MPID_nem_ptl_nm_init @@ -174,7 +167,6 @@ static inline int send_pkt(MPIDI_VC_t *vc, void *hdr_p, void *data_p, MPIDI_msg_ MPIU_Assert(sendbuf != NULL); MPIU_Memcpy(sendbuf->packet, hdr_p, sizeof(MPIDI_CH3_Pkt_t)); sendbuf->remaining = data_sz - sent_sz; - NEW_TAG(sendbuf->tag); TMPBUF(sreq) = NULL; REQ_PTL(sreq)->num_gets = 0; REQ_PTL(sreq)->put_done = 0; @@ -182,7 +174,7 @@ static inline int send_pkt(MPIDI_VC_t *vc, void *hdr_p, void *data_p, MPIDI_msg_ if (data_sz) { MPIU_Memcpy(sendbuf->packet + sizeof(MPIDI_CH3_Pkt_t), data_p, sent_sz); if (sendbuf->remaining) /* Post MEs for the remote gets */ - mpi_errno = meappend_large(vc_ptl->id, sreq, sendbuf->tag, (char *)data_p + sent_sz, sendbuf->remaining); + mpi_errno = meappend_large(vc_ptl->id, sreq, GET_TAG, (char *)data_p + sent_sz, sendbuf->remaining); if (mpi_errno) goto fn_fail; } @@ -227,7 +219,6 @@ static int send_noncontig_pkt(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr_p) MPIU_Assert(sendbuf != NULL); MPIU_Memcpy(sendbuf->packet, hdr_p, sizeof(MPIDI_CH3_Pkt_t)); sendbuf->remaining = sreq->dev.segment_size - sent_sz; - NEW_TAG(sendbuf->tag); TMPBUF(sreq) = NULL; REQ_PTL(sreq)->num_gets = 0; REQ_PTL(sreq)->put_done = 0; @@ -243,7 +234,7 @@ static int send_noncontig_pkt(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr_p) MPID_Segment_pack(sreq->dev.segment_ptr, sreq->dev.segment_first, &last, TMPBUF(sreq)); MPIU_Assert(last == sreq->dev.segment_size); - mpi_errno = meappend_large(vc_ptl->id, sreq, sendbuf->tag, TMPBUF(sreq), sendbuf->remaining); + mpi_errno = meappend_large(vc_ptl->id, sreq, GET_TAG, TMPBUF(sreq), sendbuf->remaining); if (mpi_errno) goto fn_fail; } @@ -420,21 +411,19 @@ int MPID_nem_ptl_nm_ctl_event_handler(const ptl_event_t *e) req->ch.vc = vc; - req->dev.match.parts.tag = recvbufs[buf_idx].tag; - size = recvbufs[buf_idx].remaining < MPIDI_nem_ptl_ni_limits.max_msg_size ? recvbufs[buf_idx].remaining : MPIDI_nem_ptl_ni_limits.max_msg_size; buf_ptr = (char *)TMPBUF(req) + packet_sz; while (recvbufs[buf_idx].remaining) { MPIDI_CH3U_Request_increment_cc(req, &incomplete); /* Will be decremented - and eventually freed in REPLY */ ret = MPID_nem_ptl_rptl_get(MPIDI_nem_ptl_global_md, (ptl_size_t)buf_ptr, - size, vc_ptl->id, vc_ptl->ptc, recvbufs[buf_idx].tag, 0, req); + size, vc_ptl->id, vc_ptl->ptc, GET_TAG, 0, req); MPIU_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**ptlget", "**ptlget %s", MPID_nem_ptl_strerror(ret)); MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "PtlGet(size=%lu id=(%#x,%#x) pt=%#x tag=%#lx)", size, vc_ptl->id.phys.nid, - vc_ptl->id.phys.pid, vc_ptl->ptc, recvbufs[buf_idx].tag)); + vc_ptl->id.phys.pid, vc_ptl->ptc, GET_TAG)); buf_ptr += size; recvbufs[buf_idx].remaining -= size; if (recvbufs[buf_idx].remaining < MPIDI_nem_ptl_ni_limits.max_msg_size) ----------------------------------------------------------------------- Summary of changes: .../ch3/channels/nemesis/netmod/portals4/ptl_nm.c | 109 +++++++++----------- 1 files changed, 48 insertions(+), 61 deletions(-) hooks/post-receive -- MPICH primary repository
participants (1)
-
noreply@mpich.org