66 =
xmalloc((
size_t)(nrecv + nsend) *
sizeof (*requests));
68 for (
int i = 0; i < nrecv; ++i)
69 xt_mpi_call(MPI_Irecv(dst_data, 1, recv_msgs[i].datatype,
74 for (
int i = 0; i < nsend; ++i)
75 xt_mpi_call(MPI_Isend(CAST_MPI_SEND_BUF(src_data), 1, send_msgs[i].datatype,
78 requests+nrecv+i), comm);
80 xt_mpi_call(MPI_Waitall(nrecv + nsend, requests, MPI_STATUSES_IGNORE), comm);
93 MPI_Request *tmp_requests
94 =
xmalloc((
size_t)(nrecv + nsend) *
sizeof (*tmp_requests));
96 for (
int i = 0; i < nrecv; ++i)
97 xt_mpi_call(MPI_Irecv(dst_data, 1, recv_msgs[i].datatype,
100 tmp_requests+i), comm);
102 for (
int i = 0; i < nsend; ++i)
103 xt_mpi_call(MPI_Isend(CAST_MPI_SEND_BUF(src_data), 1, send_msgs[i].datatype,
106 tmp_requests+nrecv+i), comm);
add versions of standard API functions not returning on error
static void xt_exchanger_irecv_isend_s_exchange(const void *src_data, void *dst_data, int nsend, int nrecv, const struct Xt_redist_msg *send_msgs, const struct Xt_redist_msg *recv_msgs, int tag_offset, MPI_Comm comm)
static void xt_exchanger_irecv_isend_a_exchange(const void *src_data, void *dst_data, int nsend, int nrecv, const struct Xt_redist_msg *send_msgs, const struct Xt_redist_msg *recv_msgs, int tag_offset, MPI_Comm comm, Xt_request *request)
Xt_exchanger xt_exchanger_irecv_isend_new(int nsend, int nrecv, const struct Xt_redist_msg *send_msgs, const struct Xt_redist_msg *recv_msgs, MPI_Comm comm, int tag_offset)
Xt_exchanger xt_exchanger_simple_base_new(int nsend, int nrecv, const struct Xt_redist_msg *send_msgs, const struct Xt_redist_msg *recv_msgs, MPI_Comm comm, int tag_offset, xt_simple_s_exchange_func s_func, xt_simple_a_exchange_func a_func)
#define xt_mpi_call(call, comm)
@ xt_mpi_tag_exchange_msg
redistribution of data, non-public declarations
Xt_request xt_request_msgs_new(int n, const MPI_Request requests[n], MPI_Comm comm)