Skip to content

Commit 0cbdbe3

Browse files
committed
ompi/request: Support non-PML persistent requests
This commit adds the `req_start` member to the `ompi_request_t` struct. The `MPI_START` and `MPI_STARTALL` routines call this callback function instead of `MCA_PML_CALL(start(...))`. So components that return persistent request must set this member to their request objects. `mca_pml_base_module_t::pml_start` is not deleted because `MCA_PML_CALL(start(...))` is still used elsewhere across OMPI. Signed-off-by: KAWASHIMA Takahiro <[email protected]>
1 parent cde80bb commit 0cbdbe3

File tree

13 files changed

+54
-12
lines changed

13 files changed

+54
-12
lines changed

ompi/mca/pml/bfo/pml_bfo_recvreq.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ static int mca_pml_bfo_recv_request_cancel(struct ompi_request_t* ompi_request,
154154
static void mca_pml_bfo_recv_request_construct(mca_pml_bfo_recv_request_t* request)
155155
{
156156
request->req_recv.req_base.req_type = MCA_PML_REQUEST_RECV;
157+
request->req_recv.req_base.req_ompi.req_start = mca_pml_bfo_start;
157158
request->req_recv.req_base.req_ompi.req_free = mca_pml_bfo_recv_request_free;
158159
request->req_recv.req_base.req_ompi.req_cancel = mca_pml_bfo_recv_request_cancel;
159160
request->req_rdma_cnt = 0;

ompi/mca/pml/bfo/pml_bfo_sendreq.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ static int mca_pml_bfo_send_request_cancel(struct ompi_request_t* request, int c
131131
static void mca_pml_bfo_send_request_construct(mca_pml_bfo_send_request_t* req)
132132
{
133133
req->req_send.req_base.req_type = MCA_PML_REQUEST_SEND;
134+
req->req_send.req_base.req_ompi.req_start = mca_pml_bfo_start;
134135
req->req_send.req_base.req_ompi.req_free = mca_pml_bfo_send_request_free;
135136
req->req_send.req_base.req_ompi.req_cancel = mca_pml_bfo_send_request_cancel;
136137
req->req_rdma_cnt = 0;

ompi/mca/pml/cm/pml_cm_recvreq.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ void mca_pml_cm_recv_request_completion(struct mca_mtl_request_t *mtl_request)
5656
static void
5757
mca_pml_cm_recv_request_construct(mca_pml_cm_thin_recv_request_t* recvreq)
5858
{
59+
recvreq->req_base.req_ompi.req_start = mca_pml_cm_start;
5960
recvreq->req_base.req_ompi.req_free = mca_pml_cm_recv_request_free;
6061
recvreq->req_base.req_ompi.req_cancel = mca_pml_cm_cancel;
6162
OBJ_CONSTRUCT( &(recvreq->req_base.req_convertor), opal_convertor_t );

ompi/mca/pml/cm/pml_cm_sendreq.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ mca_pml_cm_send_request_completion(struct mca_mtl_request_t *mtl_request)
6363
static void mca_pml_cm_send_request_construct(mca_pml_cm_hvy_send_request_t* sendreq)
6464
{
6565
/* no need to reinit for every send -- never changes */
66+
sendreq->req_send.req_base.req_ompi.req_start = mca_pml_cm_start;
6667
sendreq->req_send.req_base.req_ompi.req_free = mca_pml_cm_send_request_free;
6768
sendreq->req_send.req_base.req_ompi.req_cancel = mca_pml_cm_cancel;
6869
}

ompi/mca/pml/ob1/pml_ob1_recvreq.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ static int mca_pml_ob1_recv_request_cancel(struct ompi_request_t* ompi_request,
143143
static void mca_pml_ob1_recv_request_construct(mca_pml_ob1_recv_request_t* request)
144144
{
145145
/* the request type is set by the superclass */
146+
request->req_recv.req_base.req_ompi.req_start = mca_pml_ob1_start;
146147
request->req_recv.req_base.req_ompi.req_free = mca_pml_ob1_recv_request_free;
147148
request->req_recv.req_base.req_ompi.req_cancel = mca_pml_ob1_recv_request_cancel;
148149
request->req_rdma_cnt = 0;

ompi/mca/pml/ob1/pml_ob1_sendreq.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ static int mca_pml_ob1_send_request_cancel(struct ompi_request_t* request, int c
132132
static void mca_pml_ob1_send_request_construct(mca_pml_ob1_send_request_t* req)
133133
{
134134
req->req_send.req_base.req_type = MCA_PML_REQUEST_SEND;
135+
req->req_send.req_base.req_ompi.req_start = mca_pml_ob1_start;
135136
req->req_send.req_base.req_ompi.req_free = mca_pml_ob1_send_request_free;
136137
req->req_send.req_base.req_ompi.req_cancel = mca_pml_ob1_send_request_cancel;
137138
req->req_rdma_cnt = 0;

ompi/mca/pml/pml.h

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
#include "ompi/mca/mca.h"
7070
#include "mpi.h" /* needed for MPI_ANY_TAG */
7171
#include "ompi/mca/pml/pml_constants.h"
72+
#include "ompi/request/request.h"
7273

7374
BEGIN_C_DECLS
7475

@@ -350,14 +351,11 @@ typedef int (*mca_pml_base_module_send_fn_t)(
350351
/**
351352
* Initiate one or more persistent requests.
352353
*
353-
* @param count Number of requests
354-
* @param request Array of persistent requests
355-
* @return OMPI_SUCCESS or failure status.
354+
* @param count (IN) Number of requests
355+
* @param requests (IN/OUT) Array of persistent requests
356+
* @return OMPI_SUCCESS or failure status.
356357
*/
357-
typedef int (*mca_pml_base_module_start_fn_t)(
358-
size_t count,
359-
struct ompi_request_t** requests
360-
);
358+
typedef ompi_request_start_fn_t mca_pml_base_module_start_fn_t;
361359

362360
/**
363361
* Probe to poll for pending recv.

ompi/mca/pml/ucx/pml_ucx_request.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ static void mca_pml_ucx_request_init_common(ompi_request_t* ompi_req,
136136
OMPI_REQUEST_INIT(ompi_req, req_persistent);
137137
ompi_req->req_type = OMPI_REQUEST_PML;
138138
ompi_req->req_state = state;
139+
ompi_req->req_start = mca_pml_ucx_start;
139140
ompi_req->req_free = req_free;
140141
ompi_req->req_cancel = req_cancel;
141142
/* This field is used to attach persistant request to a temporary req.

ompi/mca/pml/yalla/pml_yalla_request.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ static void init_base_req(mca_pml_yalla_base_request_t *req)
149149
{
150150
OMPI_REQUEST_INIT(&req->ompi, false);
151151
req->ompi.req_type = OMPI_REQUEST_PML;
152+
req->ompi.req_start = mca_pml_yalla_start;
152153
req->ompi.req_cancel = NULL;
153154
req->ompi.req_complete_cb = NULL;
154155
req->ompi.req_complete_cb_data = NULL;

ompi/mpi/c/start.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ int MPI_Start(MPI_Request *request)
6868
case OMPI_REQUEST_PML:
6969
OPAL_CR_ENTER_LIBRARY();
7070

71-
ret = MCA_PML_CALL(start(1, request));
71+
ret = (*request)->req_start(1, request);
7272

7373
OPAL_CR_EXIT_LIBRARY();
7474
return ret;

0 commit comments

Comments
 (0)