73xt_request_msgs_ebuf_wait_omp(
Xt_request request);
75xt_request_msgs_ebuf_test_omp(
Xt_request request);
84 , request_msgs_ebuf_auto_omp_vtable = {
85 .wait = xt_request_msgs_ebuf_wait_omp,
86 .test = xt_request_msgs_ebuf_test_omp,
102#define no_finalizer ((void (*)(Xt_request, void *))0)
107 size_t extra_buf_size,
111 bufr_size = (size_t)
n_requests *
sizeof(MPI_Request)
115 size_t ofs = ((hdr_size + bufr_size +
sizeof (
void *) - 1)
123 request->
vtable = &request_msgs_ebuf_auto_omp_vtable;
138 return (
unsigned char *)request_msgs_ebuf + ofs;
143 size_t extra_buf_size,
154 size_t extra_buf_size,
177 free(request_msgs_ebuf);
186#if __GNUC__ >= 11 && __GNUC__ <= 13 && defined MPICH
187#pragma GCC diagnostic push
188#pragma GCC diagnostic ignored "-Wstringop-overread"
189#pragma GCC diagnostic ignored "-Wstringop-overflow"
192 request_msgs_ebuf->
requests, MPI_STATUSES_IGNORE),
193 request_msgs_ebuf->
comm);
194#if __GNUC__ >= 11 && __GNUC__ <= 13 && defined MPICH
195#pragma GCC diagnostic pop
209 request_msgs_ebuf->
comm);
225 || request->
vtable == &request_msgs_ebuf_auto_omp_vtable);
238 || request->
vtable == &request_msgs_ebuf_auto_omp_vtable);
240 return request_msgs_ebuf->
comm;
252 || request->
vtable == &request_msgs_ebuf_auto_omp_vtable);
265 || request->
vtable == &request_msgs_ebuf_auto_omp_vtable);
280 free(request_msgs_ebuf);
284xt_request_msgs_ebuf_wait_omp(
Xt_request request)
289 int num_threads = omp_get_num_threads(),
290 tid = omp_get_thread_num();
292 start_req = (nreq * tid) / num_threads,
293 nreq_ = (nreq * (tid+1)) / num_threads - start_req;
297#if __GNUC__ >= 11 && __GNUC__ <= 13 && defined MPICH
298#pragma GCC diagnostic push
299#pragma GCC diagnostic ignored "-Wstringop-overread"
300#pragma GCC diagnostic ignored "-Wstringop-overflow"
303 MPI_STATUSES_IGNORE), request_msgs->
comm);
304#if __GNUC__ >= 11 && __GNUC__ <= 13 && defined MPICH
305#pragma GCC diagnostic pop
308 finish_requests_mt(request_msgs);
313xt_request_msgs_ebuf_test_omp(
Xt_request request)
320 int *ops_completed_buffer
323 = xt_mpi_test_some_mt(&request_msgs->
n_requests,
325 ops_completed_buffer,
331 finish_requests_mt(request_msgs);
add versions of standard API functions not returning on error
const struct Xt_request_vtable * vtable
const struct Xt_request_vtable * vtable
void(* finalizer)(Xt_request, void *)
struct Xt_config_ xt_default_config
struct Xt_config_ * Xt_config
int xt_config_get_redist_mthread_mode(Xt_config config)
implementation of configuration object
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)
struct Xt_request_ * Xt_request
Provide non-public declarations common to all requests.
void xt_request_msgs_ebuf_set_finalizer(Xt_request request, Xt_request_msgs_ebuf_finalizer finalizer)
static int xt_request_msgs_ebuf_test(Xt_request request)
static void finish_requests(Xt_request_msgs_ebuf request_msgs_ebuf)
MPI_Comm xt_request_msgs_ebuf_get_comm(Xt_request request)
struct Xt_request_msgs_ebuf_ * Xt_request_msgs_ebuf
static const struct Xt_request_vtable request_msgs_ebuf_vtable
Xt_request xt_request_msgs_ebuf_custom_new(int n_requests, size_t extra_buf_size, Xt_fill_ebuf_requests init, void *data, Xt_request_msgs_ebuf_finalizer finalize, MPI_Comm comm, Xt_config config)
Xt_request xt_request_msgs_ebuf_alloc(int n_requests, MPI_Comm comm, size_t extra_buf_size, Xt_config config)
static void * extra_buf(Xt_request_msgs_ebuf request_msgs_ebuf)
static void xt_request_msgs_ebuf_wait(Xt_request request)
Xt_request xt_request_msgs_ebuf_new(int n_requests, size_t extra_buf_size, Xt_fill_ebuf_requests init, void *data, Xt_request_msgs_ebuf_finalizer finalize, MPI_Comm comm)
MPI_Request * xt_request_msgs_ebuf_get_req_ptr(Xt_request request)
void * xt_request_msgs_ebuf_get_extra_buf(Xt_request request)
functions to create collection of request handles augmented with user-defined buffer
void(* Xt_request_msgs_ebuf_finalizer)(Xt_request request_msgs, void *ebuf)
void(* Xt_fill_ebuf_requests)(Xt_request requests_msgs, MPI_Request *requests, void *ebuf, void *data, MPI_Comm comm)
internal interfaces for xt_request_msgs_ebuf