Yet Another eXchange Tool 0.11.3
Loading...
Searching...
No Matches
yaxt_f2c.c
Go to the documentation of this file.
1
12/*
13 * Keywords:
14 * Maintainer: Jörg Behrens <behrens@dkrz.de>
15 * Moritz Hanke <hanke@dkrz.de>
16 * Thomas Jahns <jahns@dkrz.de>
17 * URL: https://dkrz-sw.gitlab-pages.dkrz.de/yaxt/
18 *
19 * Redistribution and use in source and binary forms, with or without
20 * modification, are permitted provided that the following conditions are
21 * met:
22 *
23 * Redistributions of source code must retain the above copyright notice,
24 * this list of conditions and the following disclaimer.
25 *
26 * Redistributions in binary form must reproduce the above copyright
27 * notice, this list of conditions and the following disclaimer in the
28 * documentation and/or other materials provided with the distribution.
29 *
30 * Neither the name of the DKRZ GmbH nor the names of its contributors
31 * may be used to endorse or promote products derived from this software
32 * without specific prior written permission.
33 *
34 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
35 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
36 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
37 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
38 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
39 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
40 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
41 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
42 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
43 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
44 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
45 */
46
47#ifdef HAVE_CONFIG_H
48#include "config.h"
49#endif
50
51#include <assert.h>
52#include <mpi.h>
53
54#include "core/ppm_visibility.h"
55#include "core/core.h"
56#include "core/ppm_xfuncs.h"
57
60
61static const char filename[] = "yaxt_f2c.c";
62
63#if defined __clang__
64#pragma GCC diagnostic push
65#pragma GCC diagnostic ignored "-Wreserved-id-macro"
66#pragma GCC diagnostic ignored "-Wstrict-prototypes"
67#endif
68#include "cfortran.h"
69#if defined __clang__
70#pragma GCC diagnostic pop
71#endif
72
73#include "xt/xt_mpi.h"
74#include "xt/xt_idxlist.h"
75#include "xt/xt_idxvec.h"
76#include "xt/xt_idxstripes.h"
77#include "xt/xt_idxmod.h"
78#include "xt/xt_xmap.h"
80#include "xt/xt_xmap_all2all.h"
81#include "xt/xt_xmap_dist_dir.h"
83#include "xt/xt_redist.h"
84#include "xt/xt_redist_p2p.h"
88#include "xt/xt_sort.h"
89
90#include "xt_config_internal.h"
91
95
96struct xt_xmap_f {
98};
99
103
107
111
115
119
120
121/* These functions are meant to be called from Fortran and don't need
122 * an interface declaration in a C header */
123#if (defined __GNUC__ && __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 5))\
124 || (defined __clang__)
125#pragma GCC diagnostic push
126#pragma GCC diagnostic ignored "-Wmissing-prototypes"
127#endif
128
130 MPI_Comm comm_c;
131 comm_c = MPI_Comm_f2c(*comm_f);
132 xt_initialize(comm_c);
133}
134
136{
137 return MPI_Comm_c2f(Xt_default_comm);
138}
139
141xt_abort_f(MPI_Fint comm_f, const char *msg, const char *source,
142 MPI_Fint line) __attribute__((noreturn));
143void xt_abort_f(MPI_Fint comm_f, const char *msg, const char *source,
144 MPI_Fint line) {
145 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
146 Xt_abort(comm_c, msg, source, line);
147}
148
149void xt_sort_int_f2c(int *a, size_t n)
150{
151 xt_sort_int(a, n);
152}
153
154void xt_sort_xt_int_f2c(Xt_int *a, size_t n)
155{
156 xt_sort_xt_int(a, n);
157}
158
159void xt_sort_index_f2c(Xt_int *restrict a, int n, int *restrict idx,
160 int reset_index)
161{
162 xt_sort_index(a, n, idx, reset_index);
163}
164
166{
167 xt_sort_idxpos(a, n);
168}
169
170void xt_sort_xt_int_permutation_f2c(Xt_int *a, size_t n, int *permutation)
171{
172 xt_sort_xt_int_permutation(a, n, permutation);
173}
174
175void xt_sort_int_permutation_f2c(int *a, size_t n, int *permutation)
176{
177 xt_sort_int_permutation(a, n, permutation);
178}
179
181{
182 return p->cptr;
183}
184
186{
187 return p->cptr;
188}
189
191{
192 return p->cptr;
193}
194
196{
197 return p->cptr;
198}
199
201{
202 return p->cptr;
203}
204
209
211 MPI_Fint comm_f)
212{
213 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
214 size_t size = xt_idxlist_get_pack_size(idxlist->cptr, comm_c);
215 if (size > XT_MPI_FINT_MAX)
216 Xt_abort(comm_c, "pack size too large", filename, __LINE__);
217 return (MPI_Fint)size;
218}
219
220static void
221xt_idxlist_pack_f2c(struct xt_idxlist_f *idxlist, void *buffer,
222 MPI_Fint buffer_size, MPI_Fint *position, MPI_Fint comm_f)
223{
224 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
225 xt_idxlist_pack(idxlist->cptr, buffer, (int)buffer_size, position,
226 comm_c);
227}
228
229FCALLSCSUB5(xt_idxlist_pack_f2c, XT_IDXLIST_PACK_F, xt_idxlist_pack_f,
230 PVOID, PVOID, INT, PINT, INT)
231
232static void
233xt_idxlist_unpack_f2c(struct xt_idxlist_f *idxlist, void *buffer,
234 MPI_Fint buffer_size, MPI_Fint *position,
235 MPI_Fint comm_f)
236{
237 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
238 idxlist->cptr = xt_idxlist_unpack(buffer, (int)buffer_size, position, comm_c);
239}
240
241FCALLSCSUB5(xt_idxlist_unpack_f2c, XT_IDXLIST_UNPACK_F, xt_idxlist_unpack_f,
242 PVOID, PVOID, INT, PINT, INT)
243
245xt_xmap_all2all_new_f(struct xt_idxlist_f *src_idxlist_f,
246 struct xt_idxlist_f *dst_idxlist_f, MPI_Fint comm_f)
247{
248 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
249 return xt_xmap_all2all_new(src_idxlist_f->cptr, dst_idxlist_f->cptr, comm_c);
250}
251
254 struct xt_idxlist_f *dst_idxlist_f,
255 MPI_Fint comm_f, struct xt_config_f *config_f)
256{
257 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
258 return xt_xmap_all2all_custom_new(src_idxlist_f->cptr, dst_idxlist_f->cptr,
259 comm_c, config_f->cptr);
260}
261
264 struct xt_idxlist_f *dst_idxlist_f, MPI_Fint comm_f)
265{
266 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
267 return xt_xmap_dist_dir_new(src_idxlist_f->cptr, dst_idxlist_f->cptr, comm_c);
268}
269
272 struct xt_idxlist_f *dst_idxlist_f,
273 MPI_Fint comm_f, struct xt_config_f *config_f)
274{
275 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
276 return xt_xmap_dist_dir_custom_new(src_idxlist_f->cptr, dst_idxlist_f->cptr,
277 comm_c, config_f->cptr);
278}
279
282 struct xt_idxlist_f *dst_idxlist_f,
283 MPI_Fint inter_comm_f, MPI_Fint intra_comm_f)
284{
285 MPI_Comm inter_comm_c = MPI_Comm_f2c(inter_comm_f),
286 intra_comm_c = MPI_Comm_f2c(intra_comm_f);
288 src_idxlist_f->cptr, dst_idxlist_f->cptr, inter_comm_c, intra_comm_c);
289}
290
293 struct xt_idxlist_f *dst_idxlist_f,
294 MPI_Fint inter_comm_f,
295 MPI_Fint intra_comm_f,
296 struct xt_config_f *config_f)
297{
298 MPI_Comm inter_comm_c = MPI_Comm_f2c(inter_comm_f),
299 intra_comm_c = MPI_Comm_f2c(intra_comm_f);
301 src_idxlist_f->cptr, dst_idxlist_f->cptr, inter_comm_c, intra_comm_c,
302 config_f->cptr);
303}
304
307 struct xt_xmap_f *xmap_f,
308 int *src_block_offsets, int *src_block_sizes, int src_block_num,
309 int *dst_block_offsets, int *dst_block_sizes, int dst_block_num,
310 MPI_Fint datatype_f)
311{
312 MPI_Datatype datatype_c = MPI_Type_f2c(datatype_f);
313
315 xmap_f->cptr,
316 src_block_offsets, src_block_sizes, src_block_num,
317 dst_block_offsets, dst_block_sizes, dst_block_num, datatype_c);
318}
319
322 struct xt_xmap_f *xmap_f,
323 int *src_block_offsets, int *src_block_sizes, int src_block_num,
324 int *dst_block_offsets, int *dst_block_sizes, int dst_block_num,
325 MPI_Fint datatype_f, struct xt_config_f *config)
326{
327 MPI_Datatype datatype_c = MPI_Type_f2c(datatype_f);
328
330 xmap_f->cptr, src_block_offsets, src_block_sizes, src_block_num,
331 dst_block_offsets, dst_block_sizes, dst_block_num, datatype_c,
332 config->cptr);
333}
334
337 struct xt_xmap_f *xmap_f, int *src_block_sizes, int src_block_num,
338 int *dst_block_sizes, int dst_block_num, MPI_Fint datatype_f)
339{
340 MPI_Datatype datatype_c = MPI_Type_f2c(datatype_f);
341
343 xmap_f->cptr, src_block_sizes, src_block_num,
344 dst_block_sizes, dst_block_num, datatype_c);
345}
346
349 int *src_block_sizes, int src_block_num,
350 int *dst_block_sizes, int dst_block_num,
351 MPI_Fint datatype_f,
352 struct xt_config_f *config)
353{
354 MPI_Datatype datatype_c = MPI_Type_f2c(datatype_f);
355
357 xmap_f->cptr, src_block_sizes, src_block_num,
358 dst_block_sizes, dst_block_num, datatype_c, config->cptr);
359}
360
363 int num_src_ext, struct Xt_offset_ext src_extents[],
364 int num_dst_ext, struct Xt_offset_ext dst_extents[],
365 MPI_Fint datatype_f)
366{
367 return xt_redist_p2p_ext_new(*xmap, num_src_ext, src_extents,
368 num_dst_ext, dst_extents,
369 MPI_Type_f2c(datatype_f));
370}
371
374 Xt_xmap *xmap,
375 int num_src_ext, struct Xt_offset_ext src_extents[],
376 int num_dst_ext, struct Xt_offset_ext dst_extents[],
377 MPI_Fint datatype_f, struct xt_config_f *config)
378{
379 return xt_redist_p2p_ext_custom_new(*xmap, num_src_ext, src_extents,
380 num_dst_ext, dst_extents,
381 MPI_Type_f2c(datatype_f), config->cptr);
382}
383
386 int num_src_ext, struct Xt_aoffset_ext src_extents[],
387 int num_dst_ext, struct Xt_aoffset_ext dst_extents[],
388 MPI_Fint datatype_f)
389{
390 return xt_redist_p2p_aext_new(*xmap, num_src_ext, src_extents,
391 num_dst_ext, dst_extents,
392 MPI_Type_f2c(datatype_f));
393}
394
397 Xt_xmap *xmap,
398 int num_src_ext, struct Xt_aoffset_ext src_extents[],
399 int num_dst_ext, struct Xt_aoffset_ext dst_extents[],
400 MPI_Fint datatype_f, struct xt_config_f *config)
401{
402 return xt_redist_p2p_aext_custom_new(*xmap, num_src_ext, src_extents,
403 num_dst_ext, dst_extents,
404 MPI_Type_f2c(datatype_f), config->cptr);
405}
406
409 MPI_Fint *src_offsets, MPI_Fint *dst_offsets,
410 MPI_Fint datatype_f) {
411 MPI_Datatype datatype_c = MPI_Type_f2c(datatype_f);
412 assert(sizeof (MPI_Fint) == sizeof (int));
413
414 return xt_redist_p2p_off_new(xmap_f->cptr, src_offsets, dst_offsets,
415 datatype_c);
416}
417
420 MPI_Fint *src_offsets, MPI_Fint *dst_offsets,
421 MPI_Fint datatype_f, struct xt_config_f *config)
422{
423 MPI_Datatype datatype_c = MPI_Type_f2c(datatype_f);
424 assert(sizeof (MPI_Fint) == sizeof (int));
425
426 return xt_redist_p2p_off_custom_new(xmap_f->cptr, src_offsets, dst_offsets,
427 datatype_c, config->cptr);
428}
429
431xt_redist_p2p_new_f(struct xt_xmap_f *xmap_f, MPI_Fint datatype_f) {
432 MPI_Datatype datatype_c = MPI_Type_f2c(datatype_f);
433
434 return xt_redist_p2p_new(xmap_f->cptr, datatype_c);
435}
436
439 struct xt_config_f *config) {
440 MPI_Datatype datatype_c = MPI_Type_f2c(datatype_f);
441
442 return xt_redist_p2p_custom_new(xmap_f->cptr, datatype_c, config->cptr);
443}
444
447 MPI_Aint *src_displacements,
448 MPI_Aint *dst_displacements,
449 MPI_Fint comm_f)
450{
451#if XT_MPI_FINT_MAX != INT_MAX
452 assert((long long)num_redists <= (long long)INT_MAX);
453#endif
454 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
455 if (num_redists < 1)
456 Xt_abort(comm_c, "bad case: (num_redists < 1)", filename, __LINE__);
457
459 redists, (int)num_redists, src_displacements, dst_displacements, comm_c);
460}
461
464 Xt_redist *redists, MPI_Fint num_redists,
465 MPI_Aint *src_displacements, MPI_Aint *dst_displacements,
466 MPI_Fint comm_f, struct xt_config_f *config)
467{
468#if XT_MPI_FINT_MAX != INT_MAX
469 assert((long long)num_redists <= (long long)INT_MAX);
470#endif
471 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
472 if (num_redists < 1)
473 Xt_abort(comm_c, "bad case: (num_redists < 1)", filename, __LINE__);
474
476 redists, (int)num_redists, src_displacements, dst_displacements,
477 comm_c, config->cptr);
478}
479
482 MPI_Fint cache_size, MPI_Fint comm_f)
483{
484#if XT_MPI_FINT_MAX != INT_MAX
485 assert((long long)num_redists <= (long long)INT_MAX
486 && (long long)cache_size <= (long long)INT_MAX);
487#endif
488 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
489 if (num_redists < 1)
490 Xt_abort(comm_c, "bad case: (num_redists < 1)", filename, __LINE__);
491 return xt_redist_collection_new(redists, (int)num_redists,
492 (int)cache_size, comm_c);
493}
494
497 MPI_Fint cache_size, MPI_Fint comm_f,
498 struct xt_config_f *config)
499{
500#if XT_MPI_FINT_MAX != INT_MAX
501 assert((long long)num_redists <= (long long)INT_MAX
502 && (long long)cache_size <= (long long)INT_MAX);
503#endif
504 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
505 if (num_redists < 1)
506 Xt_abort(comm_c, "bad case: (num_redists < 1)", filename, __LINE__);
507 return xt_redist_collection_custom_new(redists, (int)num_redists,
508 (int)cache_size, comm_c, config->cptr);
509}
510
511static void
512xt_slice_c_loc_f2c(void *a, void **p)
513{
514 *p = a;
515}
516
517FCALLSCSUB2(xt_slice_c_loc_f2c,XT_SLICE_C_LOC,xt_slice_c_loc,PVOID,PVOID)
518
521{
522 MPI_Comm comm = xt_redist_get_MPI_Comm(*redist);
523 return MPI_Comm_c2f(comm);
524}
525
528{
529 MPI_Datatype dt = xt_redist_get_recv_MPI_Datatype(*redist, (int)rank);
530 return MPI_Type_c2f(dt);
531}
532
535{
536 MPI_Datatype dt = xt_redist_get_send_MPI_Datatype(*redist, (int)rank);
537 return MPI_Type_c2f(dt);
538}
539
540PPM_DSO_INTERNAL void *
542 int nsend, int nrecv, const struct xt_redist_msg_f *send_msgs_f,
543 const struct xt_redist_msg_f *recv_msgs_f, MPI_Fint comm_f,
544 const struct xt_config_f *config);
545
546PPM_DSO_INTERNAL void *
548 const struct xt_redist_msg_f *send_msgs_f,
549 const struct xt_redist_msg_f *recv_msgs_f,
550 MPI_Fint comm_f)
551{
553 nsend, nrecv, send_msgs_f, recv_msgs_f, comm_f,
555}
556
557PPM_DSO_INTERNAL void *
559 int nsend, int nrecv, const struct xt_redist_msg_f *send_msgs_f,
560 const struct xt_redist_msg_f *recv_msgs_f, MPI_Fint comm_f,
561 const struct xt_config_f *config)
562{
563 assert(nsend >= 0 && nrecv >= 0);
564 MPI_Comm comm_c = MPI_Comm_f2c(comm_f);
565 struct Xt_redist_msg *send_msgs_c
566 = xmalloc(((size_t)nsend + (size_t)nrecv) * sizeof(*send_msgs_c)),
567 *recv_msgs_c = send_msgs_c + nsend;
568 for (int i = 0; i < nsend; ++i) {
569 send_msgs_c[i].rank = send_msgs_f[i].rank;
570 send_msgs_c[i].datatype = MPI_Type_f2c(send_msgs_f[i].datatype);
571 }
572 for (int i = 0; i < nrecv; ++i) {
573 recv_msgs_c[i].rank = recv_msgs_f[i].rank;
574 recv_msgs_c[i].datatype = MPI_Type_f2c(recv_msgs_f[i].datatype);
575 }
577 nsend, nrecv, send_msgs_c, recv_msgs_c, comm_c, config->cptr);
578 free(send_msgs_c);
579 return redist;
580}
581
582PPM_DSO_INTERNAL void *
584 int num_src_intersections,
585 const struct Xt_com_list src_com[num_src_intersections],
586 int num_dst_intersections,
587 const struct Xt_com_list dst_com[num_dst_intersections],
588 void *src_idxlist, void *dst_idxlist, MPI_Fint comm)
589{
590 return xt_xmap_intersection_new(num_src_intersections, src_com,
591 num_dst_intersections, dst_com,
592 src_idxlist, dst_idxlist, MPI_Comm_f2c(comm));
593}
594
595PPM_DSO_INTERNAL void *
597 int num_src_intersections, const void *src_com,
598 int num_dst_intersections, const void *dst_com,
599 void *src_idxlist, void *dst_idxlist, MPI_Fint comm)
600{
602 num_src_intersections, src_com, num_dst_intersections, dst_com,
603 src_idxlist, dst_idxlist, MPI_Comm_f2c(comm));
604}
605
606PPM_DSO_INTERNAL void *
608 int num_src_msg, const void *src_com, int num_dst_msg, const void *dst_com,
609 MPI_Fint comm)
610{
612 num_src_msg, src_com, num_dst_msg, dst_com, MPI_Comm_f2c(comm));
613}
614
615#ifndef HAVE_FC_IS_CONTIGUOUS
618 const struct Xt_com_list *p_com_b)
619{
620 return (p_com_a + 1 == p_com_b);
621}
622
625 const struct xt_redist_msg_f *p_msgs_b)
626{
627 return (p_msgs_a + 1 == p_msgs_b);
628}
629#endif
630
631static int
633 void *gen_state,
634 Xt_idxlist src_idxlist,
635 Xt_idxlist dst_idxlist,
636 Xt_config config,
637 const struct Xt_xmdd_bucket_gen_comms *comms,
638 void *init_params,
639 const struct Xt_xmdd_bucket_gen_ *bgd)
640{
641 struct Xt_xmdd_bucket_gen_comms_f comms_f = {
642 .intra_comm = MPI_Comm_c2f(comms->intra_comm),
643 .inter_comm = MPI_Comm_c2f(comms->inter_comm),
644 .tag_offset_intra = comms->tag_offset_intra,
645 .tag_offset_inter = comms->tag_offset_inter
646 };
647 return bgd->init_f(gen_state, src_idxlist, dst_idxlist, config,
648 &comms_f, init_params);
649}
650
651
652static void
657 Xt_xmdd_bucket_gen_get_intersect_max_num get_intersect_max_num,
659 long gen_state_size,
660 void *init_params)
661{
662 assert(gen_state_size >= 0);
664 *gen, (Xt_xmdd_bucket_gen_init_state)(void (*)(void))
665 f2c_xmdd_bucket_gen_init_state, destroy, get_intersect_max_num, next,
666 (size_t)gen_state_size, init_params);
667 (*gen)->init_f = init;
668}
669
670#undef ROUTINE_2
671#define ROUTINE_2 (Xt_xmdd_bucket_gen_init_state_f)(void (*)(void))
672#undef ROUTINE_3
673#define ROUTINE_3 (Xt_xmdd_bucket_gen_destroy_state)(void (*)(void))
674#undef ROUTINE_4
675#define ROUTINE_4 (Xt_xmdd_bucket_gen_get_intersect_max_num)(void (*)(void))
676#undef ROUTINE_5
677#define ROUTINE_5 (Xt_xmdd_bucket_gen_next)(void (*)(void))
678
680 XT_XMDD_BUCKET_GEN_DEFINE_INTERFACE_F,
681 xt_xmdd_bucket_gen_define_interface_f,
682 PVOID, ROUTINE, ROUTINE, ROUTINE, ROUTINE, LONG, PVOID)
683
684void
685xt_mpi_comm_mark_exclusive_f2c(MPI_Fint *comm) {
686 xt_mpi_comm_mark_exclusive(MPI_Comm_f2c(*comm));
687}
688#if (defined __GNUC__ && __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 5))\
689 || (defined __clang__)
690#pragma GCC diagnostic pop
691#endif
692
693/*
694 * Local Variables:
695 * c-basic-offset: 2
696 * coding: utf-8
697 * indent-tabs-mode: nil
698 * show-trailing-whitespace: t
699 * require-trailing-newline: t
700 * End:
701 */
int MPI_Fint
Definition core.h:68
int MPI_Comm
Definition core.h:64
#define __attribute__(x)
Definition core.h:82
#define PPM_DSO_INTERNAL
add versions of standard API functions not returning on error
#define xmalloc(size)
Definition ppm_xfuncs.h:70
MPI_Datatype datatype
Definition xt_redist.h:69
Xt_xmdd_bucket_gen_init_state_f init_f
Xt_config cptr
Definition yaxt_f2c.c:101
Xt_idxlist cptr
Definition yaxt_f2c.c:93
Xt_redist cptr
Definition yaxt_f2c.c:105
MPI_Fint rank
Definition yaxt_f2c.c:109
MPI_Fint datatype
Definition yaxt_f2c.c:109
Xt_request cptr
Definition yaxt_f2c.c:113
Xt_xmap cptr
Definition yaxt_f2c.c:97
Xt_xmdd_bucket_gen cptr
Definition yaxt_f2c.c:117
struct Xt_config_ xt_default_config
Definition xt_config.c:204
struct Xt_config_ * Xt_config
Definition xt_config.h:58
implementation of configuration object
void xt_initialize(MPI_Comm default_comm)
Definition xt_init.c:70
XT_INT Xt_int
Definition xt_core.h:72
index list declaration
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)
Definition xt_idxlist.c:86
size_t xt_idxlist_get_pack_size(Xt_idxlist idxlist, MPI_Comm comm)
Definition xt_idxlist.c:80
utility routines for MPI
void xt_mpi_comm_mark_exclusive(MPI_Comm comm)
Definition xt_mpi.c:403
redistribution of data
MPI_Datatype xt_redist_get_recv_MPI_Datatype(Xt_redist redist, int rank)
Definition xt_redist.c:118
MPI_Comm xt_redist_get_MPI_Comm(Xt_redist redist)
Definition xt_redist.c:130
MPI_Datatype xt_redist_get_send_MPI_Datatype(Xt_redist redist, int rank)
Definition xt_redist.c:113
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_aext_new(Xt_xmap xmap, int num_src_ext, const struct Xt_aoffset_ext src_extents[], int num_dst_ext, const struct Xt_aoffset_ext dst_extents[], 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_aext_custom_new(Xt_xmap xmap, int num_src_ext, const struct Xt_aoffset_ext src_extents[], int num_dst_ext, const struct Xt_aoffset_ext dst_extents[], MPI_Datatype datatype, Xt_config config)
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_idxpos)(idxpos_type *v, size_t n)
Definition xt_sort.c:60
void(* xt_sort_int)(int *a, size_t n)
Definition xt_sort.c:53
void(* xt_sort_xt_int_permutation)(Xt_int *restrict a, size_t n, int *restrict permutation)
void(* xt_sort_xt_int)(Xt_int *a, size_t n)
Definition xt_sort.c:55
void(* xt_sort_int_permutation)(int *restrict a, size_t n, int *restrict permutation)
void(* xt_sort_index)(Xt_int *restrict a, int n, int *restrict idx, int reset_index)
Definition xt_sort.c:57
exchange map declarations
Xt_xmap xt_xmap_all2all_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm)
Xt_xmap xt_xmap_all2all_custom_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm, Xt_config config)
Xt_xmap xt_xmap_dist_dir_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm)
Xt_xmap xt_xmap_dist_dir_custom_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm, Xt_config config)
int(* Xt_xmdd_bucket_gen_init_state)(void *gen_state, Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, Xt_config config, const struct Xt_xmdd_bucket_gen_comms *comms, void *init_params)
void xt_xmdd_bucket_gen_define_interface(Xt_xmdd_bucket_gen gen, Xt_xmdd_bucket_gen_init_state init, Xt_xmdd_bucket_gen_destroy_state destroy, Xt_xmdd_bucket_gen_get_intersect_max_num get_intersect_max_num, Xt_xmdd_bucket_gen_next next, size_t gen_state_size, void *init_params)
void(* Xt_xmdd_bucket_gen_destroy_state)(void *gen_state)
int(* Xt_xmdd_bucket_gen_get_intersect_max_num)(void *gen_state, int type)
struct Xt_com_list(* Xt_xmdd_bucket_gen_next)(void *gen_state, int type)
Default bucket generator for creation of distributed directories.
int(* Xt_xmdd_bucket_gen_init_state_f)(void *gen_state, Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, Xt_config config, struct Xt_xmdd_bucket_gen_comms_f *comms, void *init_params)
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_dist_dir_intercomm_custom_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm inter_comm, MPI_Comm intra_comm, Xt_config config)
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)
Definition yaxt_f2c.c:185
Xt_request xt_request_f2c(struct xt_request_f *p)
Definition yaxt_f2c.c:195
PPM_DSO_INTERNAL 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)
Definition yaxt_f2c.c:607
PPM_DSO_INTERNAL 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)
Definition yaxt_f2c.c:373
static int f2c_xmdd_bucket_gen_init_state(void *gen_state, Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, Xt_config config, const struct Xt_xmdd_bucket_gen_comms *comms, void *init_params, const struct Xt_xmdd_bucket_gen_ *bgd)
Definition yaxt_f2c.c:632
static const char filename[]
Definition yaxt_f2c.c:61
MPI_Fint xt_idxlist_get_pack_size_f2c(struct xt_idxlist_f *idxlist, MPI_Fint comm_f)
Definition yaxt_f2c.c:210
MPI_Fint xt_get_default_comm_f(void)
Definition yaxt_f2c.c:135
PPM_DSO_INTERNAL 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)
Definition yaxt_f2c.c:321
PPM_DSO_INTERNAL Xt_redist xt_redist_p2p_new_f(struct xt_xmap_f *xmap_f, MPI_Fint datatype_f)
Definition yaxt_f2c.c:431
PPM_DSO_INTERNAL 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)
Definition yaxt_f2c.c:336
Xt_xmdd_bucket_gen xt_xmdd_bucket_gen_f2c(struct xt_xmdd_bucket_gen_f *p)
Definition yaxt_f2c.c:205
PPM_DSO_INTERNAL 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)
Definition yaxt_f2c.c:408
PPM_DSO_INTERNAL int xt_com_list_contiguous(const struct Xt_com_list *p_com_a, const struct Xt_com_list *p_com_b)
Definition yaxt_f2c.c:617
PPM_DSO_INTERNAL 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)
Definition yaxt_f2c.c:596
PPM_DSO_INTERNAL 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)
Definition yaxt_f2c.c:281
static void xt_slice_c_loc_f2c(void *a, void **p)
Definition yaxt_f2c.c:512
PPM_DSO_INTERNAL 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)
Definition yaxt_f2c.c:362
void xt_sort_xt_int_permutation_f2c(Xt_int *a, size_t n, int *permutation)
Definition yaxt_f2c.c:170
void xt_sort_int_f2c(int *a, size_t n)
Definition yaxt_f2c.c:149
PPM_DSO_INTERNAL 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)
Definition yaxt_f2c.c:263
PPM_DSO_INTERNAL void xt_abort_f(MPI_Fint comm_f, const char *msg, const char *source, MPI_Fint line) __attribute__((noreturn))
Definition yaxt_f2c.c:143
PPM_DSO_INTERNAL 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)
Definition yaxt_f2c.c:463
PPM_DSO_INTERNAL Xt_xmap xt_xmap_dist_dir_intercomm_custom_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, struct xt_config_f *config_f)
Definition yaxt_f2c.c:292
PPM_DSO_INTERNAL Xt_redist xt_redist_p2p_aext_custom_new_c2f(Xt_xmap *xmap, int num_src_ext, struct Xt_aoffset_ext src_extents[], int num_dst_ext, struct Xt_aoffset_ext dst_extents[], MPI_Fint datatype_f, struct xt_config_f *config)
Definition yaxt_f2c.c:396
PPM_DSO_INTERNAL Xt_xmap xt_xmap_dist_dir_custom_new_f(struct xt_idxlist_f *src_idxlist_f, struct xt_idxlist_f *dst_idxlist_f, MPI_Fint comm_f, struct xt_config_f *config_f)
Definition yaxt_f2c.c:271
FCALLSCSUB5(xt_idxlist_pack_f2c, XT_IDXLIST_PACK_F, xt_idxlist_pack_f, PVOID, PVOID, INT, PINT, INT)
Definition yaxt_f2c.c:229
PPM_DSO_INTERNAL 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)
Definition yaxt_f2c.c:419
PPM_DSO_INTERNAL 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)
Definition yaxt_f2c.c:547
void xt_sort_xt_int_f2c(Xt_int *a, size_t n)
Definition yaxt_f2c.c:154
PPM_DSO_INTERNAL 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)
Definition yaxt_f2c.c:496
PPM_DSO_INTERNAL Xt_xmap xt_xmap_all2all_custom_new_f(struct xt_idxlist_f *src_idxlist_f, struct xt_idxlist_f *dst_idxlist_f, MPI_Fint comm_f, struct xt_config_f *config_f)
Definition yaxt_f2c.c:253
PPM_DSO_INTERNAL Xt_redist xt_redist_p2p_aext_new_c2f(Xt_xmap *xmap, int num_src_ext, struct Xt_aoffset_ext src_extents[], int num_dst_ext, struct Xt_aoffset_ext dst_extents[], MPI_Fint datatype_f)
Definition yaxt_f2c.c:385
static void xt_xmdd_bucket_gen_define_interface_f2c(Xt_xmdd_bucket_gen *gen, Xt_xmdd_bucket_gen_init_state_f init, Xt_xmdd_bucket_gen_destroy_state destroy, Xt_xmdd_bucket_gen_get_intersect_max_num get_intersect_max_num, Xt_xmdd_bucket_gen_next next, long gen_state_size, void *init_params)
Definition yaxt_f2c.c:653
static void xt_idxlist_pack_f2c(struct xt_idxlist_f *idxlist, void *buffer, MPI_Fint buffer_size, MPI_Fint *position, MPI_Fint comm_f)
Definition yaxt_f2c.c:221
PPM_DSO_INTERNAL Xt_redist xt_redist_collection_new_f(Xt_redist *redists, MPI_Fint num_redists, MPI_Fint cache_size, MPI_Fint comm_f)
Definition yaxt_f2c.c:481
PPM_DSO_INTERNAL 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, const struct xt_config_f *config)
Definition yaxt_f2c.c:558
void xt_initialize_f(MPI_Fint *comm_f)
Definition yaxt_f2c.c:129
void xt_sort_int_permutation_f2c(int *a, size_t n, int *permutation)
Definition yaxt_f2c.c:175
PPM_DSO_INTERNAL Xt_redist xt_redist_p2p_custom_new_f(struct xt_xmap_f *xmap_f, MPI_Fint datatype_f, struct xt_config_f *config)
Definition yaxt_f2c.c:438
Xt_idxlist xt_idxlist_f2c(struct xt_idxlist_f *p)
Definition yaxt_f2c.c:180
PPM_DSO_INTERNAL 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)
Definition yaxt_f2c.c:348
MPI_Fint xt_redist_get_recv_MPI_Datatype_c2f(Xt_redist *redist, MPI_Fint rank)
Definition yaxt_f2c.c:527
PPM_DSO_INTERNAL 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)
Definition yaxt_f2c.c:583
FCALLSCSUB7(xt_xmdd_bucket_gen_define_interface_f2c, XT_XMDD_BUCKET_GEN_DEFINE_INTERFACE_F, xt_xmdd_bucket_gen_define_interface_f, PVOID, ROUTINE, ROUTINE, ROUTINE, ROUTINE, LONG, PVOID)
Definition yaxt_f2c.c:679
Xt_xmap xt_xmap_f2c(struct xt_xmap_f *p)
Definition yaxt_f2c.c:200
MPI_Fint xt_redist_get_mpi_comm_c2f(Xt_redist *redist)
Definition yaxt_f2c.c:520
PPM_DSO_INTERNAL int xt_redist_msg_contiguous(const struct xt_redist_msg_f *p_msgs_a, const struct xt_redist_msg_f *p_msgs_b)
Definition yaxt_f2c.c:624
MPI_Fint xt_redist_get_send_MPI_Datatype_c2f(Xt_redist *redist, MPI_Fint rank)
Definition yaxt_f2c.c:534
void xt_sort_idxpos_f2c(idxpos_type *a, size_t n)
Definition yaxt_f2c.c:165
Xt_config xt_config_f2c(struct xt_config_f *p)
Definition yaxt_f2c.c:190
PPM_DSO_INTERNAL 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)
Definition yaxt_f2c.c:306
PPM_DSO_INTERNAL 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)
Definition yaxt_f2c.c:446
void xt_sort_index_f2c(Xt_int *restrict a, int n, int *restrict idx, int reset_index)
Definition yaxt_f2c.c:159