23 #ifndef MCA_PML_BASE_SEND_REQUEST_H
24 #define MCA_PML_BASE_SEND_REQUEST_H
26 #include "ompi_config.h"
29 #include "opal/datatype/opal_convertor.h"
30 #include "ompi/peruse/peruse-internal.h"
65 #define MCA_PML_BASE_SEND_REQUEST_INIT( request, \
79 OMPI_REQUEST_INIT(&(request)->req_base.req_ompi, persistent); \
80 (request)->req_base.req_ompi.req_mpi_object.comm = comm; \
81 (request)->req_base.req_ompi.req_peer = peer; \
82 (request)->req_base.req_ompi.req_tag = tag; \
83 (request)->req_addr = addr; \
84 (request)->req_send_mode = mode; \
85 (request)->req_base.req_addr = addr; \
86 (request)->req_base.req_count = count; \
87 (request)->req_base.req_datatype = datatype; \
88 (request)->req_base.req_peer = (int32_t)peer; \
89 (request)->req_base.req_tag = (int32_t)tag; \
90 (request)->req_base.req_comm = comm; \
92 (request)->req_base.req_pml_complete = OPAL_INT_TO_BOOL(persistent); \
93 (request)->req_base.req_free_called = false; \
94 (request)->req_base.req_ompi.req_status._cancelled = 0; \
95 (request)->req_bytes_packed = 0; \
99 OBJ_RETAIN(datatype); \
102 opal_convertor_copy_and_prepare_for_send( \
103 (request)->req_base.req_proc->proc_convertor, \
104 &((request)->req_base.req_datatype->super), \
105 (request)->req_base.req_count, \
106 (request)->req_base.req_addr, \
108 &(request)->req_base.req_convertor ); \
109 opal_convertor_get_packed_size( &(request)->req_base.req_convertor, \
110 &((request)->req_bytes_packed) );\
120 #define MCA_PML_BASE_SEND_START( request ) \
122 (request)->req_pml_complete = false; \
123 (request)->req_ompi.req_complete = false; \
124 (request)->req_ompi.req_state = OMPI_REQUEST_ACTIVE; \
125 (request)->req_ompi.req_status._cancelled = 0; \
126 (request)->req_ompi.req_status.MPI_ERROR = OMPI_SUCCESS; \
127 (request)->req_ompi.req_mpi_object.comm = (request)->req_comm; \
128 (request)->req_ompi.req_peer = (request)->req_peer; \
137 #define MCA_PML_BASE_SEND_REQUEST_FINI( request ) \
139 OMPI_REQUEST_FINI(&(request)->req_base.req_ompi); \
140 OBJ_RELEASE((request)->req_base.req_comm); \
141 if( 0 != (request)->req_base.req_count ) \
142 OBJ_RELEASE((request)->req_base.req_datatype); \
143 opal_convertor_cleanup( &((request)->req_base.req_convertor) ); \
P2P Management Layer (PML)
void * req_addr
pointer to send buffer - may not be application buffer
Definition: pml_base_sendreq.h:39
mca_pml_base_request_t req_base
base request type - common data structure for use by wait/test
Definition: pml_base_sendreq.h:38
Base type for send requests.
Definition: pml_base_sendreq.h:37
size_t req_bytes_packed
packed size of a message given the datatype and count
Definition: pml_base_sendreq.h:40
mca_pml_base_send_mode_t req_send_mode
type of send
Definition: pml_base_sendreq.h:41
Type of request.
Definition: pml_base_request.h:57
#define OBJ_CLASS_DECLARATION(NAME)
Declaration for class descriptor.
Definition: opal_object.h:236