69 MPI_Aint extent,
const int *displacements,
Xt_redist redist,
74 size_t num_messages = (size_t)*nmsgs;
75 int *restrict ranks = NULL;
79 =
xrealloc(*msgs,
sizeof (*p) * (num_messages + num_ranks));
80 for (
size_t i = 0; i < num_ranks; ++i) {
83 MPI_Aint curr_lb, curr_extent;
84 MPI_Datatype datatype_with_extent;
89 &datatype_with_extent), comm);
91 p[num_messages + i].rank = ranks[i];
92 p[num_messages + i].datatype
94 datatype_with_extent, comm);
95 MPI_Type_free(&datatype_with_extent);
100 *nmsgs = (int)(num_messages + num_ranks);
105 MPI_Aint dst_extent,
int num_repetitions,
106 const int src_displacements[num_repetitions],
107 const int dst_displacements[num_repetitions])
110 redist, src_extent, dst_extent, num_repetitions,
116 MPI_Aint dst_extent,
int num_repetitions,
117 const int src_displacements[num_repetitions],
118 const int dst_displacements[num_repetitions],
124 int nsend = 0, nrecv = 0;
130 if (num_repetitions < 1)
131 Xt_abort(comm,
"ERROR: invalid number of repetitions (Xt_redist_repeat)\n",
136 src_displacements, redist, num_repetitions, comm,
SEND);
139 dst_displacements, redist, num_repetitions, comm,
RECV);
142 nsend, nrecv, send_msgs, recv_msgs, comm, config);
150 MPI_Aint dst_extent,
int num_repetitions,
151 const int displacements[num_repetitions]) {
153 redist, src_extent, dst_extent, num_repetitions, displacements,
158 MPI_Aint dst_extent,
int num_repetitions,
159 const int displacements[num_repetitions],
163 redist, src_extent, dst_extent, num_repetitions, displacements,
164 displacements, config);
add versions of standard API functions not returning on error
#define xrealloc(ptr, size)
struct Xt_config_ xt_default_config
implementation of configuration object
MPI_Comm xt_mpi_comm_smart_dup(MPI_Comm comm, int *tag_offset)
void xt_mpi_comm_smart_dedup(MPI_Comm *comm, int tag_offset)
MPI_Datatype xt_mpi_generate_datatype(int const *displacements, int count, MPI_Datatype old_type, MPI_Comm comm)
#define xt_mpi_call(call, comm)
MPI_Datatype xt_redist_get_MPI_Datatype(Xt_redist redist, int rank, enum xt_msg_direction direction)
int xt_redist_get_msg_ranks(Xt_redist redist, enum xt_msg_direction direction, int *restrict *ranks)
MPI_Comm xt_redist_get_MPI_Comm(Xt_redist redist)
redistribution of data, non-public declarations
static void xt_redist_msgs_free(size_t n, struct Xt_redist_msg *msgs, MPI_Comm comm)
Xt_redist xt_redist_repeat_custom_new(Xt_redist redist, MPI_Aint src_extent, MPI_Aint dst_extent, int num_repetitions, const int displacements[num_repetitions], Xt_config config)
Xt_redist xt_redist_repeat_asym_custom_new(Xt_redist redist, MPI_Aint src_extent, MPI_Aint dst_extent, int num_repetitions, const int src_displacements[num_repetitions], const int dst_displacements[num_repetitions], Xt_config config)
Xt_redist xt_redist_repeat_new(Xt_redist redist, MPI_Aint src_extent, MPI_Aint dst_extent, int num_repetitions, const int displacements[num_repetitions])
Xt_redist xt_redist_repeat_asym_new(Xt_redist redist, MPI_Aint src_extent, MPI_Aint dst_extent, int num_repetitions, const int src_displacements[num_repetitions], const int dst_displacements[num_repetitions])
static void generate_msg_infos(struct Xt_redist_msg **msgs, int *nmsgs, MPI_Aint extent, const int *displacements, Xt_redist redist, int num_repetitions, MPI_Comm comm, enum xt_msg_direction direction)
Xt_redist xt_redist_single_array_base_custom_new(int nsend, int nrecv, const struct Xt_redist_msg send_msgs[], const struct Xt_redist_msg recv_msgs[], MPI_Comm comm, Xt_config config)