Skip to content

Commit

Permalink
Merge pull request #2180 from brminich/topic/ucp_tag_offload_rndv
Browse files Browse the repository at this point in the history
UCP/TAG: Use separate field for md index in offload RNDV hdr
  • Loading branch information
yosefe authored Jan 14, 2018
2 parents 7505222 + 5034ca5 commit 6fc0921
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 34 deletions.
3 changes: 3 additions & 0 deletions src/ucp/core/ucp_ep.c
Original file line number Diff line number Diff line change
Expand Up @@ -884,6 +884,9 @@ void ucp_ep_config_init(ucp_worker_h worker, ucp_ep_config_t *config)
max_rndv_thresh = iface_attr->cap.tag.eager.max_zcopy;
max_am_rndv_thresh = iface_attr->cap.tag.eager.max_bcopy;

ucs_assert_always(iface_attr->cap.tag.rndv.max_hdr >=
sizeof(ucp_tag_offload_unexp_rndv_hdr_t));

if (config->key.am_lane != UCP_NULL_LANE) {
/* Must have active messages for using rendezvous */
ucp_ep_config_set_rndv_thresh(worker, config, lane,
Expand Down
29 changes: 8 additions & 21 deletions src/ucp/tag/offload.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,6 @@
#include <ucs/sys/sys.h>


#define UCP_TAG_OFFLOAD_REQPTR_MDI_MASK ((uintptr_t)(UCS_SYS_CACHE_LINE_SIZE - 1))

/**
* Header for unexpected rendezvous
*/
typedef struct {
uint64_t sender_uuid; /* Sender worker uuid */
uintptr_t reqptr_mdi; /* Request pointer (high) + md_index (low) */
} UCS_S_PACKED ucp_tag_offload_unexp_rndv_hdr_t;


int ucp_tag_offload_iface_activate(ucp_worker_iface_t *iface)
{
ucp_worker_t *worker = iface->worker;
Expand Down Expand Up @@ -177,7 +166,7 @@ UCS_PROFILE_FUNC(ucs_status_t, ucp_tag_offload_unexp_rndv,
rndv_hdr = hdr;

/* Calculate size for dummy (on-stack) RTS packet */
md_index = rndv_hdr->reqptr_mdi & UCP_TAG_OFFLOAD_REQPTR_MDI_MASK;
md_index = rndv_hdr->md_index;
rkey_size = ucp_rkey_packed_size(worker->context, UCS_BIT(md_index));
dummy_rts_size = sizeof(*dummy_rts) + rkey_size;

Expand All @@ -187,8 +176,7 @@ UCS_PROFILE_FUNC(ucs_status_t, ucp_tag_offload_unexp_rndv,
dummy_rts = ucs_alloca(dummy_rts_size);
dummy_rts->super.tag = stag;
dummy_rts->sreq.sender_uuid = rndv_hdr->sender_uuid;
dummy_rts->sreq.reqptr = rndv_hdr->reqptr_mdi &
~UCP_TAG_OFFLOAD_REQPTR_MDI_MASK;
dummy_rts->sreq.reqptr = rndv_hdr->reqptr;
dummy_rts->address = remote_addr;
dummy_rts->size = length;

Expand Down Expand Up @@ -473,18 +461,17 @@ ucs_status_t ucp_tag_offload_rndv_zcopy(uct_pending_req_t *self)

md_index = ucp_ep_md_index(ep, req->send.lane);

UCS_STATIC_ASSERT(UCP_MD_INDEX_BITS <= UCS_SYS_CACHE_LINE_SIZE);
ucs_assert(md_index < UCS_SYS_CACHE_LINE_SIZE);
ucs_assert_always(!((uintptr_t)req & UCP_TAG_OFFLOAD_REQPTR_MDI_MASK));

ucp_request_hdr_t rndv_hdr = {
.sender_uuid = ep->worker->uuid,
.reqptr = (uintptr_t)req | md_index
ucp_tag_offload_unexp_rndv_hdr_t rndv_hdr = {
.sender_uuid = ep->worker->uuid,
.reqptr = (uintptr_t)req,
.md_index = md_index
};

dt_state = req->send.state.dt;

UCS_STATIC_ASSERT(sizeof(ucp_rsc_index_t) <= sizeof(rndv_hdr.md_index));
ucs_assert_always(UCP_DT_IS_CONTIG(req->send.datatype));

ucp_dt_iov_copy_uct(ep->worker->context, iov, &iovcnt, max_iov, &dt_state,
req->send.buffer, req->send.datatype, req->send.length, 0);

Expand Down
20 changes: 7 additions & 13 deletions src/ucp/tag/offload.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,22 +12,16 @@
#include <ucp/proto/proto.h>
#include <ucs/datastruct/queue.h>

/**
* Header for SW RNDV request
*/
typedef struct ucp_sw_rndv_hdr {
ucp_request_hdr_t super;
size_t length;
uint16_t flags;
} UCS_S_PACKED ucp_sw_rndv_hdr_t;

/**
* Header for extended SW RNDV request
* Header for unexpected rendezvous
*/
typedef struct ucp_sw_rndv_ext_hdr {
ucp_sw_rndv_hdr_t super;
uintptr_t address;
} UCS_S_PACKED ucp_sw_rndv_ext_hdr_t;
typedef struct {
uint64_t sender_uuid; /* Sender worker uuid */
uintptr_t reqptr; /* Request pointer */
uint8_t md_index; /* md index */
} UCS_S_PACKED ucp_tag_offload_unexp_rndv_hdr_t;


/**
* Header for sync send acknowledgment
Expand Down

0 comments on commit 6fc0921

Please sign in to comment.