int mca_pml_yalla_imrecv(void *buf, size_t count, ompi_datatype_t *datatype, struct ompi_message_t **message, struct ompi_request_t **request) { mca_pml_yalla_recv_request_t *rreq; mxm_error_t error; rreq = MCA_PML_YALLA_RREQ_INIT(buf, count, datatype, -1, 0, (*message)->comm, OMPI_REQUEST_ACTIVE); rreq->super.ompi.req_persistent = false; rreq->super.flags = 0; PML_YALLA_VERBOSE(8, "receive request *%p=%p message *%p=%p dtype %s count %zu", (void *)request, (void *)rreq, (void *)message, (void *)(*message), datatype->name, count); error = mxm_message_recv(&rreq->mxm, (*message)->req_ptr); if (MXM_OK != error) { return OMPI_ERROR; } PML_YALLA_MESSAGE_RELEASE(message); *request = &rreq->super.ompi; return OMPI_SUCCESS; }
int mca_pml_yalla_mrecv(void *buf, size_t count, ompi_datatype_t *datatype, struct ompi_message_t **message, ompi_status_public_t* status) { mxm_recv_req_t rreq; mxm_error_t error; PML_YALLA_INIT_MXM_RECV_REQ(&rreq, buf, count, datatype, -1, 0, (*message)->comm, recv); PML_YALLA_INIT_BLOCKING_MXM_RECV_REQ(&rreq); PML_YALLA_VERBOSE(8, "receive message *%p=%p dtype %s count %zu", (void *)message, (void *)*message, datatype->name, count); error = mxm_message_recv(&rreq, (*message)->req_ptr); if (MXM_OK != error) { return OMPI_ERROR; } PML_YALLA_MESSAGE_RELEASE(message); PML_YALLA_WAIT_MXM_REQ(&rreq.base); PML_YALLA_VERBOSE(8, "receive completed with status %s source %d rtag %d(%d/0x%x) len %zu", mxm_error_string(rreq.base.error), rreq.completion.sender_imm, rreq.completion.sender_tag, rreq.tag, rreq.tag_mask, rreq.completion.actual_len); PML_YALLA_SET_RECV_STATUS(&rreq, rreq.completion.actual_len, status); return OMPI_SUCCESS; }
int ompi_mtl_mxm_imrecv(struct mca_mtl_base_module_t* mtl, struct opal_convertor_t *convertor, struct ompi_message_t **message, struct mca_mtl_request_t *mtl_request) { #if MXM_API >= MXM_VERSION(1,5) int ret; mxm_error_t err; mxm_recv_req_t *mxm_recv_req; mca_mtl_mxm_request_t *mtl_mxm_request; ompi_mtl_mxm_message_t *msgp = (ompi_mtl_mxm_message_t *) (*message)->req_ptr; mtl_mxm_request = (mca_mtl_mxm_request_t*) mtl_request; mxm_recv_req = &mtl_mxm_request->mxm.recv; /* prepare a receive request embedded in the MTL request */ ret = ompi_mtl_mxm_recv_init(mtl_mxm_request, convertor, mxm_recv_req); if (OPAL_UNLIKELY(OMPI_SUCCESS != ret)) { return ret; } mxm_recv_req->tag = msgp->tag; mxm_recv_req->tag_mask = msgp->tag_mask; mxm_recv_req->base.mq = msgp->mq; mxm_recv_req->base.conn = msgp->conn; err = mxm_message_recv(mxm_recv_req, msgp->mxm_msg); if (OPAL_UNLIKELY(MXM_OK != err)) { orte_show_help("help-mtl-mxm.txt", "error posting message receive", true, mxm_error_string(err), mtl_mxm_request->buf, mtl_mxm_request->length); return OMPI_ERROR; } OMPI_FREE_LIST_RETURN(&mca_mtl_mxm_component.mxm_messages, (ompi_free_list_item_t *) msgp); ompi_message_return(*message); (*message) = MPI_MESSAGE_NULL; return OMPI_SUCCESS; #else return OMPI_ERR_NOT_IMPLEMENTED; #endif }