86 const MPI_Request *requests,
89 const MPI_Datatype * datatypes,
92 void * unpacked_data) {
94 assert(n_requests >= 0 && n_packed >= 0 && n_tmp_buffers >= 0);
103 (
int *)(request->
requests + (
size_t)n_requests);
105 (
size_t)n_requests *
sizeof(*request->
requests));
106 request->
comm = comm;
110 for (
int i = 0; i < n_packed; ++i)
113 xmalloc(((
size_t)n_packed + (
size_t)n_tmp_buffers)
115 memcpy(request->
buffers, packed_data,
116 (
size_t)n_packed *
sizeof(*request->
buffers));
117 memcpy(request->
buffers + n_packed, tmp_buffers,
118 (
size_t)n_tmp_buffers *
sizeof(*request->
buffers));
126 for (
int i = 0; i < request_msgs_packed->
n_packed; ++i) {
127 int position = 0, buffer_size;
129 request_msgs_packed->
comm, &buffer_size),
130 request_msgs_packed->
comm);
134 request_msgs_packed->
comm),
135 request_msgs_packed->
comm);
141 for (
int i = 0; i < request_msgs_packed->
n_packed +
143 free(request_msgs_packed->
buffers[i]);
144 free(request_msgs_packed->
buffers);
145 for (
int i = 0; i < request_msgs_packed->
n_packed; ++i)
147 request_msgs_packed->
comm);
149 free(request_msgs_packed->
requests);
150 free(request_msgs_packed);
158 request_msgs_packed->
requests, MPI_STATUSES_IGNORE),
159 request_msgs_packed->
comm);
173 request_msgs_packed->
comm);
add versions of standard API functions not returning on error
int * ops_completed_buffer
const struct Xt_request_vtable * vtable
void(* wait)(Xt_request request)
bool xt_mpi_test_some(int *restrict num_req, MPI_Request *restrict req, int *restrict ops_completed, MPI_Comm comm)
#define xt_mpi_call(call, comm)
Provide non-public declarations common to all requests.
static void xt_request_msgs_wait_packed(Xt_request request)
Xt_request xt_request_msgs_packed_new(int n_requests, const MPI_Request *requests, MPI_Comm comm, int n_packed, int n_tmp_buffers, const MPI_Datatype *datatypes, void **packed_data, void **tmp_buffers, void *unpacked_data)
struct Xt_request_msgs_packed_ * Xt_request_msgs_packed
static void free_request(Xt_request_msgs_packed request_msgs_packed)
static int xt_request_msgs_test_packed(Xt_request request)
static void unpack_data(Xt_request_msgs_packed request_msgs_packed)
static const struct Xt_request_vtable request_msgs_packed_vtable