69static const char filename[] =
"xt_redist_repeat.c";
73 MPI_Aint extent,
const int *displacements,
Xt_redist redist,
77 int *restrict ranks = NULL;
80 for (
size_t i = 0; i < num_ranks; ++i) {
83 MPI_Aint curr_lb, curr_extent;
84 MPI_Datatype datatype_with_extent;
87 xt_mpi_call(MPI_Type_get_extent(datatype, &curr_lb, &curr_extent), comm);
89 &datatype_with_extent), comm);
91 msgs[i].rank = ranks[i];
94 datatype_with_extent, comm);
102 MPI_Aint dst_extent,
int num_repetitions,
103 const int src_displacements[num_repetitions],
104 const int dst_displacements[num_repetitions])
107 redist, src_extent, dst_extent, num_repetitions,
113 MPI_Aint dst_extent,
int num_repetitions,
114 const int src_displacements[num_repetitions],
115 const int dst_displacements[num_repetitions],
125 if (num_repetitions < 1)
126 Xt_abort(comm,
"ERROR: invalid number of repetitions (Xt_redist_repeat)\n",
130 for (
int i = 0; i < 2; ++i)
132 size_t num_messages = (size_t)nmsg[
SEND] + (
size_t)nmsg[
RECV];
136 redist, num_repetitions, comm,
SEND);
139 redist, num_repetitions, comm,
RECV);
145 nmsg[
SEND], nmsg[
RECV], msgs, msgs+nmsg[
SEND], comm, &config_);
152 MPI_Aint dst_extent,
int num_repetitions,
153 const int displacements[num_repetitions]) {
155 redist, src_extent, dst_extent, num_repetitions, displacements,
160 MPI_Aint dst_extent,
int num_repetitions,
161 const int displacements[num_repetitions],
165 redist, src_extent, dst_extent, num_repetitions, displacements,
166 displacements, config);
add versions of standard API functions not returning on error
const struct xt_redist_vtable * vtable
int(* get_num_msg)(Xt_redist, enum xt_msg_direction)
int MPI_Type_create_resized(MPI_Datatype oldtype, MPI_Aint lb, MPI_Aint extent, MPI_Datatype *newtype)
int MPI_Type_free(MPI_Datatype *datatype)
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, bool do_dup)
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
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)
static const char filename[]
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])
static void generate_msg_infos(struct Xt_redist_msg *restrict msgs, MPI_Aint extent, const int *displacements, Xt_redist redist, int num_repetitions, MPI_Comm comm, enum xt_msg_direction direction)
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])
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)