Skip to content

Commit bd33b99

Browse files
authored
Merge pull request open-mpi#12211 from wenduwan/pml_cm_simple
pml/cm: use MCA_PML_CM_* macros for recv
2 parents ec01df5 + 73977ba commit bd33b99

File tree

1 file changed

+25
-60
lines changed

1 file changed

+25
-60
lines changed

ompi/mca/pml/cm/pml_cm.h

Lines changed: 25 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,6 @@
1818
#ifndef PML_CM_H
1919
#define PML_CM_H
2020

21-
#ifdef HAVE_ALLOCA_H
22-
#include <alloca.h>
23-
#endif
24-
2521
#include "ompi_config.h"
2622
#include "ompi/request/request.h"
2723
#include "ompi/mca/pml/pml.h"
@@ -144,73 +140,42 @@ mca_pml_cm_recv(void *addr,
144140
{
145141
int ret;
146142
uint32_t flags = 0;
143+
mca_pml_cm_thin_recv_request_t *recvreq;
144+
145+
MCA_PML_CM_THIN_RECV_REQUEST_ALLOC(recvreq);
146+
if (OPAL_UNLIKELY(NULL == recvreq))
147+
return OMPI_ERR_OUT_OF_RESOURCE;
148+
147149
#if OPAL_ENABLE_HETEROGENEOUS_SUPPORT
148-
ompi_proc_t *ompi_proc;
150+
ompi_proc_t *ompi_proc = NULL;
149151
#endif
150-
opal_convertor_t convertor;
151-
mca_pml_cm_request_t req;
152-
mca_mtl_request_t *req_mtl =
153-
alloca(sizeof(mca_mtl_request_t) + ompi_mtl->mtl_request_size);
154-
155-
OBJ_CONSTRUCT(&convertor, opal_convertor_t);
156-
req_mtl->ompi_req = &req.req_ompi;
157-
req_mtl->completion_callback = mca_pml_cm_recv_fast_completion;
158-
159-
req.req_pml_type = MCA_PML_CM_REQUEST_RECV_THIN;
160-
req.req_free_called = false;
161-
req.req_ompi.req_complete = false;
162-
req.req_ompi.req_complete_cb = NULL;
163-
req.req_ompi.req_state = OMPI_REQUEST_ACTIVE;
164-
req.req_ompi.req_status.MPI_TAG = OMPI_ANY_TAG;
165-
req.req_ompi.req_status.MPI_ERROR = OMPI_SUCCESS;
166-
req.req_ompi.req_status._cancelled = 0;
167152

168-
#if OPAL_ENABLE_HETEROGENEOUS_SUPPORT
169-
if( MPI_ANY_SOURCE == src ) {
170-
ompi_proc = ompi_proc_local_proc;
171-
} else {
172-
ompi_proc = ompi_comm_peer_lookup( comm, src );
173-
}
153+
MCA_PML_CM_THIN_RECV_REQUEST_INIT(recvreq,
154+
ompi_proc,
155+
comm,
156+
src,
157+
datatype,
158+
addr,
159+
count,
160+
flags);
174161

175-
MCA_PML_CM_SWITCH_ACCELERATOR_CONVERTOR_OFF(flags, datatype, count);
176-
177-
opal_convertor_copy_and_prepare_for_recv(
178-
ompi_proc->super.proc_convertor,
179-
&(datatype->super),
180-
count,
181-
addr,
182-
flags,
183-
&convertor );
184-
#else
185-
MCA_PML_CM_SWITCH_ACCELERATOR_CONVERTOR_OFF(flags, datatype, count);
186-
187-
opal_convertor_copy_and_prepare_for_recv(
188-
ompi_mpi_local_convertor,
189-
&(datatype->super),
190-
count,
191-
addr,
192-
flags,
193-
&convertor );
194-
#endif
162+
recvreq->req_mtl.completion_callback = mca_pml_cm_recv_fast_completion;
163+
assert(NULL == recvreq->req_base.req_ompi.req_complete_cb);
195164

196-
ret = OMPI_MTL_CALL(irecv(ompi_mtl,
197-
comm,
198-
src,
199-
tag,
200-
&convertor,
201-
req_mtl));
202-
if( OPAL_UNLIKELY(OMPI_SUCCESS != ret) ) {
203-
OBJ_DESTRUCT(&convertor);
165+
MCA_PML_CM_THIN_RECV_REQUEST_START(recvreq, comm, tag, src, ret);
166+
if (OPAL_UNLIKELY(OMPI_SUCCESS != ret)) {
167+
MCA_PML_CM_THIN_RECV_REQUEST_RETURN(recvreq);
204168
return ret;
205169
}
206170

207-
ompi_request_wait_completion(&req.req_ompi);
171+
ompi_request_wait_completion(&recvreq->req_base.req_ompi);
208172

209173
if (MPI_STATUS_IGNORE != status) {
210-
OMPI_COPY_STATUS(status, req.req_ompi.req_status, false);
174+
OMPI_COPY_STATUS(status, recvreq->req_base.req_ompi.req_status, false);
211175
}
212-
ret = req.req_ompi.req_status.MPI_ERROR;
213-
OBJ_DESTRUCT(&convertor);
176+
177+
ret = recvreq->req_base.req_ompi.req_status.MPI_ERROR;
178+
ompi_request_free((ompi_request_t **) &recvreq);
214179
return ret;
215180
}
216181

0 commit comments

Comments
 (0)