size_t ucp_memcpy_pack(void *dest, void *arg) { ucp_memcpy_pack_context_t *ctx = arg; size_t length = ctx->length; UCS_PROFILE_CALL(memcpy, dest, ctx->src, length); return length; }
static size_t ucp_tag_rndv_pack_rkey(ucp_request_t *sreq, ucp_rndv_rts_hdr_t *rndv_rts_hdr) { ucp_ep_h ep = sreq->send.ep; size_t packed_rkey = 0; ucs_status_t status; ucs_assert(UCP_DT_IS_CONTIG(sreq->send.datatype)); /* Check if the sender needs to register the send buffer - * is its datatype contiguous and does the receive side need it */ if ((ucp_ep_is_rndv_lane_present(ep)) && (ucp_ep_rndv_md_flags(ep) & UCT_MD_FLAG_NEED_RKEY)) { status = ucp_request_send_buffer_reg(sreq, ucp_ep_get_rndv_get_lane(ep)); ucs_assert_always(status == UCS_OK); /* if the send buffer was registered, send the rkey */ UCS_PROFILE_CALL(uct_md_mkey_pack, ucp_ep_md(ep, ucp_ep_get_rndv_get_lane(ep)), sreq->send.state.dt.contig.memh, rndv_rts_hdr + 1); rndv_rts_hdr->flags |= UCP_RNDV_RTS_FLAG_PACKED_RKEY; packed_rkey = ucp_ep_md_attr(ep, ucp_ep_get_rndv_get_lane(ep))->rkey_packed_size; } return packed_rkey; }
static ucs_status_t ucp_amo_basic_progress_post(uct_pending_req_t *self) { ucp_request_t *req = ucs_container_of(self, ucp_request_t, send.uct); ucp_rkey_h rkey = req->send.amo.rkey; ucp_ep_t *ep = req->send.ep; uint64_t value = req->send.amo.value; uint64_t remote_addr = req->send.amo.remote_addr; uct_atomic_op_t op = req->send.amo.uct_op; ucs_status_t status; req->send.lane = rkey->cache.amo_lane; if (req->send.length == sizeof(uint64_t)) { status = UCS_PROFILE_CALL(uct_ep_atomic64_post, ep->uct_eps[req->send.lane], op, value, remote_addr, rkey->cache.amo_rkey); } else { ucs_assert(req->send.length == sizeof(uint32_t)); status = UCS_PROFILE_CALL(uct_ep_atomic32_post, ep->uct_eps[req->send.lane], op, value, remote_addr, rkey->cache.amo_rkey); } return ucp_amo_check_send_status(req, status); }