ucs_status_t ucp_ep_create_connected(ucp_worker_h worker, uint64_t dest_uuid, const char *peer_name, unsigned address_count, const ucp_address_entry_t *address_list, const char *message, ucp_ep_h *ep_p) { ucs_status_t status; ucp_ep_h ep = NULL; status = ucp_ep_new(worker, dest_uuid, peer_name, message, &ep); if (status != UCS_OK) { goto err; } /* initialize transport endpoints */ status = ucp_ep_init_trasports(ep, address_count, address_list); if (status != UCS_OK) { goto err_delete; } *ep_p = ep; return UCS_OK; err_delete: ucp_ep_delete(ep); err: return status; }
ucs_status_t ucp_ep_create_stub(ucp_worker_h worker, uint64_t dest_uuid, const char *message, ucp_ep_h *ep_p) { ucs_status_t status; ucp_ep_op_t optype; ucp_ep_h ep = NULL; status = ucp_ep_new(worker, dest_uuid, "??", message, &ep); if (status != UCS_OK) { goto err; } for (optype = 0; optype < UCP_EP_OP_LAST; ++optype) { status = ucp_stub_ep_create(ep, optype, 0, NULL, &ep->uct_eps[optype]); if (status != UCS_OK) { goto err_destroy_uct_eps; } } *ep_p = ep; return UCS_OK; err_destroy_uct_eps: for (optype = 0; optype < UCP_EP_OP_LAST; ++optype) { if (ep->uct_eps[optype] != NULL) { uct_ep_destroy(ep->uct_eps[optype]); } } ucp_ep_delete(ep); err: return status; }
ucs_status_t ucp_ep_create_stub(ucp_worker_h worker, uint64_t dest_uuid, const char *message, ucp_ep_h *ep_p) { ucs_status_t status; ucp_ep_config_key_t key; ucp_ep_h ep = NULL; status = ucp_ep_new(worker, dest_uuid, "??", message, &ep); if (status != UCS_OK) { goto err; } /* all operations will use the first lane, which is a stub endpoint */ memset(&key, 0, sizeof(key)); key.rma_lane_map = 1; key.amo_lane_map = 1; key.reachable_md_map = 0; /* TODO */ key.am_lane = 0; key.rndv_lane = 0; key.wireup_msg_lane = 0; key.lanes[0] = UCP_NULL_RESOURCE; key.num_lanes = 1; memset(key.amo_lanes, UCP_NULL_LANE, sizeof(key.amo_lanes)); ep->cfg_index = ucp_worker_get_ep_config(worker, &key); ep->am_lane = 0; status = ucp_stub_ep_create(ep, &ep->uct_eps[0]); if (status != UCS_OK) { goto err_destroy_uct_eps; } *ep_p = ep; return UCS_OK; err_destroy_uct_eps: uct_ep_destroy(ep->uct_eps[0]); ucp_ep_delete(ep); err: return status; }