57 #pragma GCC diagnostic push
58 #pragma GCC diagnostic ignored "-Wreserved-id-macro"
59 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
63 #pragma GCC diagnostic pop
111 #if (defined __GNUC__ && __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 5))\
112 || (defined __clang__)
113 #pragma GCC diagnostic push
114 #pragma GCC diagnostic ignored "-Wmissing-prototypes"
119 comm_c = MPI_Comm_f2c(*comm_f);
125 return MPI_Comm_c2f(Xt_default_comm);
132 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
133 Xt_abort(comm_c, msg, source, line);
185 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
187 if (size > XT_MPI_FINT_MAX)
188 Xt_abort(comm_c,
"pack size too large", __FILE__, __LINE__);
196 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
202 PVOID, PVOID, INT, PINT, INT)
205 xt_idxlist_unpack_f2c(
struct xt_idxlist_f *idxlist,
void *buffer,
209 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
214 PVOID, PVOID, INT, PINT, INT)
219 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
226 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
235 MPI_Comm inter_comm_c = MPI_Comm_f2c(inter_comm_f),
236 intra_comm_c = MPI_Comm_f2c(intra_comm_f);
239 inter_comm_c, intra_comm_c);
243 int *src_block_offsets,
244 int *src_block_sizes,
246 int *dst_block_offsets,
247 int *dst_block_sizes,
250 MPI_Datatype datatype_c = MPI_Type_f2c(datatype_f);
253 src_block_offsets, src_block_sizes,
255 dst_block_offsets, dst_block_sizes,
262 int *src_block_offsets,
263 int *src_block_sizes,
265 int *dst_block_offsets,
266 int *dst_block_sizes,
271 MPI_Datatype datatype_c = MPI_Type_f2c(datatype_f);
274 xmap_f->
cptr, src_block_offsets, src_block_sizes, src_block_num,
275 dst_block_offsets, dst_block_sizes, dst_block_num, datatype_c,
280 int *src_block_sizes,
int src_block_num,
281 int *dst_block_sizes,
int dst_block_num,
283 MPI_Datatype datatype_c = MPI_Type_f2c(datatype_f);
286 xmap_f->
cptr, src_block_sizes, src_block_num,
287 dst_block_sizes, dst_block_num, datatype_c);
292 int *src_block_sizes,
int src_block_num,
293 int *dst_block_sizes,
int dst_block_num,
297 MPI_Datatype datatype_c = MPI_Type_f2c(datatype_f);
300 xmap_f->
cptr, src_block_sizes, src_block_num,
301 dst_block_sizes, dst_block_num, datatype_c, config->
cptr);
311 num_dst_ext, dst_extents,
312 MPI_Type_f2c(datatype_f));
323 num_dst_ext, dst_extents,
324 MPI_Type_f2c(datatype_f), config->
cptr);
331 MPI_Datatype datatype_c = MPI_Type_f2c(datatype_f);
332 assert(
sizeof (
MPI_Fint) ==
sizeof (
int));
343 MPI_Datatype datatype_c = MPI_Type_f2c(datatype_f);
344 assert(
sizeof (
MPI_Fint) ==
sizeof (
int));
347 datatype_c, config->
cptr);
352 MPI_Datatype datatype_c = MPI_Type_f2c(datatype_f);
360 MPI_Datatype datatype_c = MPI_Type_f2c(datatype_f);
367 MPI_Aint *src_displacements,
368 MPI_Aint *dst_displacements,
371 #if XT_MPI_FINT_MAX != INT_MAX
372 assert((
long long)num_redists <= (
long long)INT_MAX);
374 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
376 Xt_abort(comm_c,
"bad case: (num_redists < 1)", __FILE__, __LINE__);
379 redists, (
int)num_redists, src_displacements, dst_displacements, comm_c);
385 MPI_Aint *src_displacements, MPI_Aint *dst_displacements,
388 #if XT_MPI_FINT_MAX != INT_MAX
389 assert((
long long)num_redists <= (
long long)INT_MAX);
391 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
393 Xt_abort(comm_c,
"bad case: (num_redists < 1)", __FILE__, __LINE__);
396 redists, (
int)num_redists, src_displacements, dst_displacements,
397 comm_c, config->
cptr);
404 #if XT_MPI_FINT_MAX != INT_MAX
405 assert((
long long)num_redists <= (
long long)INT_MAX
406 && (
long long)cache_size <= (
long long)INT_MAX);
408 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
410 Xt_abort(comm_c,
"bad case: (num_redists < 1)", __FILE__, __LINE__);
412 (
int)cache_size, comm_c);
420 #if XT_MPI_FINT_MAX != INT_MAX
421 assert((
long long)num_redists <= (
long long)INT_MAX
422 && (
long long)cache_size <= (
long long)INT_MAX);
424 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
426 Xt_abort(comm_c,
"bad case: (num_redists < 1)", __FILE__, __LINE__);
428 (
int)cache_size, comm_c, config->
cptr);
443 return MPI_Comm_c2f(comm);
450 return MPI_Type_c2f(dt);
457 return MPI_Type_c2f(dt);
466 assert(nsend >= 0 && nrecv >= 0);
467 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
469 =
xmalloc(((
size_t)nsend + (
size_t)nrecv) *
sizeof(*send_msgs_c)),
470 *recv_msgs_c = send_msgs_c + nsend;
471 for (
int i = 0; i < nsend; ++i) {
472 send_msgs_c[i].
rank = send_msgs_f[i].
rank;
475 for (
int i = 0; i < nrecv; ++i) {
476 recv_msgs_c[i].rank = recv_msgs_f[i].
rank;
477 recv_msgs_c[i].datatype = MPI_Type_f2c(recv_msgs_f[i].
datatype);
480 nsend, nrecv, send_msgs_c, recv_msgs_c, comm_c, config->
cptr);
492 nsend, nrecv, send_msgs_f, recv_msgs_f, comm_f,
498 int num_src_intersections,
499 const struct Xt_com_list src_com[num_src_intersections],
500 int num_dst_intersections,
501 const struct Xt_com_list dst_com[num_dst_intersections],
502 void *src_idxlist,
void *dst_idxlist,
MPI_Fint comm)
505 num_dst_intersections, dst_com,
506 src_idxlist, dst_idxlist, MPI_Comm_f2c(comm));
511 int num_src_intersections,
const void *src_com,
512 int num_dst_intersections,
const void *dst_com,
513 void *src_idxlist,
void *dst_idxlist,
MPI_Fint comm)
516 num_src_intersections, src_com, num_dst_intersections, dst_com,
517 src_idxlist, dst_idxlist, MPI_Comm_f2c(comm));
522 int num_src_msg,
const void *src_com,
int num_dst_msg,
const void *dst_com,
526 num_src_msg, src_com, num_dst_msg, dst_com, MPI_Comm_f2c(comm));
529 #ifndef HAVE_FC_IS_CONTIGUOUS
534 return (p_com_a + 1 == p_com_b);
541 return (p_msgs_a + 1 == p_msgs_b);
549 #if (defined __GNUC__ && __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 5))\
550 || (defined __clang__)
551 #pragma GCC diagnostic pop
external, public xt_slice_c_loc
external, public xt_idxlist_unpack_f
external, public xt_idxlist_pack_f
add versions of standard API functions not returning on error
struct Xt_config_ xt_default_config
struct Xt_config_ * Xt_config
implementation of configuration object
void xt_initialize(MPI_Comm default_comm)
Xt_idxlist xt_idxlist_unpack(void *buffer, int buffer_size, int *position, MPI_Comm comm)
void xt_idxlist_pack(Xt_idxlist idxlist, void *buffer, int buffer_size, int *position, MPI_Comm comm)
size_t xt_idxlist_get_pack_size(Xt_idxlist idxlist, MPI_Comm comm)
void xt_mpi_comm_mark_exclusive(MPI_Comm comm)
MPI_Datatype xt_redist_get_recv_MPI_Datatype(Xt_redist redist, int rank)
MPI_Comm xt_redist_get_MPI_Comm(Xt_redist redist)
MPI_Datatype xt_redist_get_send_MPI_Datatype(Xt_redist redist, int rank)
Xt_redist xt_redist_collection_new(Xt_redist *redists, int num_redists, int cache_size, MPI_Comm comm)
Xt_redist xt_redist_collection_custom_new(Xt_redist *redists, int num_redists, int cache_size, MPI_Comm comm, Xt_config config)
Xt_redist xt_redist_collection_static_new(Xt_redist *redists, int num_redists, const MPI_Aint src_displacements[num_redists], const MPI_Aint dst_displacements[num_redists], MPI_Comm comm)
Xt_redist xt_redist_collection_static_custom_new(Xt_redist *redists, int num_redists, const MPI_Aint src_displacements[num_redists], const MPI_Aint dst_displacements[num_redists], MPI_Comm comm, Xt_config config)
Xt_redist xt_redist_p2p_custom_new(Xt_xmap xmap, MPI_Datatype datatype, Xt_config config)
Xt_redist xt_redist_p2p_off_new(Xt_xmap xmap, const int *src_offsets, const int *dst_offsets, MPI_Datatype datatype)
Xt_redist xt_redist_p2p_blocks_custom_new(Xt_xmap xmap, const int *src_block_sizes, int src_block_num, const int *dst_block_sizes, int dst_block_num, MPI_Datatype datatype, Xt_config config)
Xt_redist xt_redist_p2p_new(Xt_xmap xmap, MPI_Datatype datatype)
Xt_redist xt_redist_p2p_off_custom_new(Xt_xmap xmap, const int *src_offsets, const int *dst_offsets, MPI_Datatype datatype, Xt_config config)
Xt_redist xt_redist_p2p_blocks_off_custom_new(Xt_xmap xmap, const int *src_block_offsets, const int *src_block_sizes, int src_block_num, const int *dst_block_offsets, const int *dst_block_sizes, int dst_block_num, MPI_Datatype datatype, Xt_config config)
Xt_redist xt_redist_p2p_ext_new(Xt_xmap xmap, int num_src_ext, const struct Xt_offset_ext src_extents[], int num_dst_ext, const struct Xt_offset_ext dst_extents[], MPI_Datatype datatype)
Xt_redist xt_redist_p2p_blocks_off_new(Xt_xmap xmap, const int *src_block_offsets, const int *src_block_sizes, int src_block_num, const int *dst_block_offsets, const int *dst_block_sizes, int dst_block_num, MPI_Datatype datatype)
Xt_redist xt_redist_p2p_blocks_new(Xt_xmap xmap, const int *src_block_sizes, int src_block_num, const int *dst_block_sizes, int dst_block_num, MPI_Datatype datatype)
Xt_redist xt_redist_p2p_ext_custom_new(Xt_xmap xmap, int num_src_ext, const struct Xt_offset_ext src_extents[], int num_dst_ext, const struct Xt_offset_ext dst_extents[], MPI_Datatype datatype, Xt_config config)
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)
void(* xt_sort_int_permutation)(int a[], size_t n, int permutation[])
void(* xt_sort_index)(Xt_int *a, int n, int *idx, int reset_index)
void(* xt_sort_idxpos)(idxpos_type *v, size_t n)
void(* xt_sort_int)(int *a, size_t n)
exchange map declarations
Xt_xmap xt_xmap_all2all_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm)
Xt_xmap xt_xmap_dist_dir_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm)
Xt_xmap xt_xmap_dist_dir_intercomm_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm inter_comm, MPI_Comm intra_comm)
Xt_xmap xt_xmap_intersection_ext_new(int num_src_intersections, const struct Xt_com_list src_com[num_src_intersections], int num_dst_intersections, const struct Xt_com_list dst_com[num_dst_intersections], Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm)
Xt_xmap xt_xmap_intersection_pos_new(int num_src_msg, const struct Xt_com_pos src_com[num_src_msg], int num_dst_msg, const struct Xt_com_pos dst_com[num_dst_msg], MPI_Comm comm)
Xt_xmap xt_xmap_intersection_new(int num_src_intersections, const struct Xt_com_list src_com[num_src_intersections], int num_dst_intersections, const struct Xt_com_list dst_com[num_dst_intersections], Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm)
Xt_redist xt_redist_f2c(struct xt_redist_f *p)
Xt_request xt_request_f2c(struct xt_request_f *p)
void xt_abort_f(MPI_Fint comm_f, const char *msg, const char *source, int line) __attribute__((noreturn))
void * xt_redist_single_array_base_new_c2f(int nsend, int nrecv, const struct xt_redist_msg_f *send_msgs_f, const struct xt_redist_msg_f *recv_msgs_f, MPI_Fint comm_f)
MPI_Fint xt_idxlist_get_pack_size_f2c(struct xt_idxlist_f *idxlist, MPI_Fint comm_f)
MPI_Fint xt_get_default_comm_f(void)
Xt_redist xt_redist_collection_static_new_f(Xt_redist *redists, MPI_Fint num_redists, MPI_Aint *src_displacements, MPI_Aint *dst_displacements, MPI_Fint comm_f)
Xt_redist xt_redist_collection_static_custom_new_f(Xt_redist *redists, MPI_Fint num_redists, MPI_Aint *src_displacements, MPI_Aint *dst_displacements, MPI_Fint comm_f, struct xt_config_f *config)
Xt_redist xt_redist_p2p_off_custom_new_f(struct xt_xmap_f *xmap_f, MPI_Fint *src_offsets, MPI_Fint *dst_offsets, MPI_Fint datatype_f, struct xt_config_f *config)
void * xt_xmap_intersection_ext_new_f2c(int num_src_intersections, const void *src_com, int num_dst_intersections, const void *dst_com, void *src_idxlist, void *dst_idxlist, MPI_Fint comm)
Xt_redist xt_redist_p2p_blocks_new_f(struct xt_xmap_f *xmap_f, int *src_block_sizes, int src_block_num, int *dst_block_sizes, int dst_block_num, MPI_Fint datatype_f)
Xt_redist xt_redist_p2p_blocks_custom_new_f(struct xt_xmap_f *xmap_f, int *src_block_sizes, int src_block_num, int *dst_block_sizes, int dst_block_num, MPI_Fint datatype_f, struct xt_config_f *config)
static void xt_slice_c_loc_f2c(void *a, void **p)
Xt_redist xt_redist_p2p_off_new_f(struct xt_xmap_f *xmap_f, MPI_Fint *src_offsets, MPI_Fint *dst_offsets, MPI_Fint datatype_f)
Xt_redist xt_redist_p2p_blocks_off_custom_new_f(struct xt_xmap_f *xmap_f, int *src_block_offsets, int *src_block_sizes, int src_block_num, int *dst_block_offsets, int *dst_block_sizes, int dst_block_num, MPI_Fint datatype_f, struct xt_config_f *config)
void xt_sort_int_f2c(int *a, size_t n)
int xt_com_list_contiguous(const struct Xt_com_list *p_com_a, const struct Xt_com_list *p_com_b)
void * xt_xmap_intersection_pos_new_f2c(int num_src_msg, const void *src_com, int num_dst_msg, const void *dst_com, MPI_Fint comm)
Xt_xmap xt_xmap_dist_dir_intercomm_new_f(struct xt_idxlist_f *src_idxlist_f, struct xt_idxlist_f *dst_idxlist_f, MPI_Fint inter_comm_f, MPI_Fint intra_comm_f)
FCALLSCSUB5(xt_idxlist_pack_f2c, XT_IDXLIST_PACK_F, xt_idxlist_pack_f, PVOID, PVOID, INT, PINT, INT)
Xt_redist xt_redist_p2p_custom_new_f(struct xt_xmap_f *xmap_f, MPI_Fint datatype_f, struct xt_config_f *config)
Xt_redist xt_redist_p2p_ext_custom_new_c2f(Xt_xmap *xmap, int num_src_ext, struct Xt_offset_ext src_extents[], int num_dst_ext, struct Xt_offset_ext dst_extents[], MPI_Fint datatype_f, struct xt_config_f *config)
Xt_redist xt_redist_collection_custom_new_f(Xt_redist *redists, MPI_Fint num_redists, MPI_Fint cache_size, MPI_Fint comm_f, struct xt_config_f *config)
void xt_sort_index_f2c(Xt_int *a, int n, int *idx, int reset_index)
Xt_redist xt_redist_p2p_new_f(struct xt_xmap_f *xmap_f, MPI_Fint datatype_f)
Xt_redist xt_redist_p2p_ext_new_c2f(Xt_xmap *xmap, int num_src_ext, struct Xt_offset_ext src_extents[], int num_dst_ext, struct Xt_offset_ext dst_extents[], MPI_Fint datatype_f)
Xt_redist xt_redist_p2p_blocks_off_new_f(struct xt_xmap_f *xmap_f, int *src_block_offsets, int *src_block_sizes, int src_block_num, int *dst_block_offsets, int *dst_block_sizes, int dst_block_num, MPI_Fint datatype_f)
static void xt_idxlist_pack_f2c(struct xt_idxlist_f *idxlist, void *buffer, MPI_Fint buffer_size, MPI_Fint *position, MPI_Fint comm_f)
void xt_initialize_f(MPI_Fint *comm_f)
void xt_sort_int_permutation_f2c(int *a, size_t n, int *permutation)
Xt_idxlist xt_idxlist_f2c(struct xt_idxlist_f *p)
Xt_redist xt_redist_collection_new_f(Xt_redist *redists, MPI_Fint num_redists, MPI_Fint cache_size, MPI_Fint comm_f)
MPI_Fint xt_redist_get_recv_MPI_Datatype_c2f(Xt_redist *redist, MPI_Fint rank)
void * xt_redist_single_array_base_custom_new_c2f(int nsend, int nrecv, const struct xt_redist_msg_f *send_msgs_f, const struct xt_redist_msg_f *recv_msgs_f, MPI_Fint comm_f, struct xt_config_f *config)
Xt_xmap xt_xmap_f2c(struct xt_xmap_f *p)
MPI_Fint xt_redist_get_mpi_comm_c2f(Xt_redist *redist)
void xt_mpi_comm_mark_exclusive_f2c(MPI_Fint *comm)
MPI_Fint xt_redist_get_send_MPI_Datatype_c2f(Xt_redist *redist, MPI_Fint rank)
int xt_redist_msg_contiguous(const struct xt_redist_msg_f *p_msgs_a, const struct xt_redist_msg_f *p_msgs_b)
void xt_sort_idxpos_f2c(idxpos_type *a, size_t n)
void * xt_xmap_intersection_new_f2c(int num_src_intersections, const struct Xt_com_list src_com[num_src_intersections], int num_dst_intersections, const struct Xt_com_list dst_com[num_dst_intersections], void *src_idxlist, void *dst_idxlist, MPI_Fint comm)
Xt_xmap xt_xmap_dist_dir_new_f(struct xt_idxlist_f *src_idxlist_f, struct xt_idxlist_f *dst_idxlist_f, MPI_Fint comm_f)
Xt_config xt_config_f2c(struct xt_config_f *p)