Yet Another eXchange Tool 0.11.4
Loading...
Searching...
No Matches
xt_xmap_dist_dir_bucket_gen_cycl_stripe.c File Reference

Implementation of default bucket generator for the creation of distributed directories. More...

#include <string.h>
#include <assert.h>
#include <mpi.h>
#include "xt/xt_xmap_dist_dir_bucket_gen.h"
#include "xt_xmap_dist_dir_bucket_gen_cycl_stripe.h"
#include "xt_xmap_dist_dir_common.h"
#include "xt_idxlist_internal.h"
#include "xt_idxstripes_internal.h"
#include "xt_idxlist_unpack.h"
#include "xt_config_internal.h"
#include "core/ppm_xfuncs.h"
#include "xt/xt_mpi.h"
#include "xt_mpi_internal.h"
#include "xt_arithmetic_util.h"
#include "ensure_array_size.h"
#include "xt_xmap_dist_dir_bucket_gen_internal.h"
Include dependency graph for xt_xmap_dist_dir_bucket_gen_cycl_stripe.c:

Go to the source code of this file.

Functions

static int xt_xmdd_bucket_gen_cycl_stripe_init (void *gen_state_, Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, Xt_config config, struct Xt_xmdd_bucket_gen_comms *comms, void *init_params)
 
static struct Xt_com_list xt_xmdd_cycl_stripe_get_next_bucket (void *gen_state_, int type)
 
static void xt_xmdd_bucket_gen_cycl_stripe_destroy (void *gen_state)
 
static int xt_xmdd_bucket_gen_cycl_stripe_get_intersect_max_num (void *gen_state, int type)
 
static Xt_int get_intracomm_dist_dir_global_interval_size (Xt_idxlist src, Xt_idxlist dst, bool *stripify, MPI_Comm comm, int comm_size, Xt_config config)
 
static Xt_int get_min_idxlist_index (Xt_idxlist a, Xt_idxlist b)
 
static Xt_int get_max_idxlist_index (Xt_idxlist a, Xt_idxlist b)
 
static struct bucket_params get_intracomm_bucket_params (Xt_int global_interval, Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, int comm_size)
 
static void get_intercomm_dist_dir_global_interval_size (Xt_idxlist src, Xt_idxlist dst, bool *stripify, Xt_int interval_size[2], struct Xt_xmdd_bucket_gen_comms *comms, int comm_size, int remote_size, Xt_config config)
 
static Xt_int get_intercomm_min_idxlist_index (Xt_idxlist l)
 
static Xt_int get_intercomm_max_idxlist_index (Xt_idxlist l)
 
static struct bucket_params get_intercomm_bucket_params (Xt_idxlist idxlist, Xt_int global_interval, int comm_size)
 
static Xt_idxlist xt_xmap_dist_dir_get_bucket (struct Xt_xmdd_bucket_gen_cycl_stripe_state *gen_state, struct bucket_params *bucket_params, int dist_dir_rank)
 generates the buckets of the distributed directory
 

Variables

const struct Xt_xmdd_bucket_gen_ Xt_xmdd_cycl_stripe_bucket_gen_desc
 

Detailed Description

Implementation of default bucket generator for the creation of distributed directories.

Author
Jörg Behrens behre.nosp@m.ns@d.nosp@m.krz.d.nosp@m.e Moritz Hanke hanke.nosp@m.@dkr.nosp@m.z.de Thomas Jahns jahns.nosp@m.@dkr.nosp@m.z.de

Definition in file xt_xmap_dist_dir_bucket_gen_cycl_stripe.c.

Function Documentation

◆ get_intercomm_bucket_params()

static struct bucket_params get_intercomm_bucket_params ( Xt_idxlist idxlist,
Xt_int global_interval,
int comm_size )
static

Definition at line 258 of file xt_xmap_dist_dir_bucket_gen_cycl_stripe.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_intercomm_dist_dir_global_interval_size()

static void get_intercomm_dist_dir_global_interval_size ( Xt_idxlist src,
Xt_idxlist dst,
bool * stripify,
Xt_int interval_size[2],
struct Xt_xmdd_bucket_gen_comms * comms,
int comm_size,
int remote_size,
Xt_config config )
inlinestatic

Definition at line 193 of file xt_xmap_dist_dir_bucket_gen_cycl_stripe.c.

Here is the caller graph for this function:

◆ get_intercomm_max_idxlist_index()

static Xt_int get_intercomm_max_idxlist_index ( Xt_idxlist l)
inlinestatic

Definition at line 249 of file xt_xmap_dist_dir_bucket_gen_cycl_stripe.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_intercomm_min_idxlist_index()

static Xt_int get_intercomm_min_idxlist_index ( Xt_idxlist l)
inlinestatic

Definition at line 241 of file xt_xmap_dist_dir_bucket_gen_cycl_stripe.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_intracomm_bucket_params()

static struct bucket_params get_intracomm_bucket_params ( Xt_int global_interval,
Xt_idxlist src_idxlist,
Xt_idxlist dst_idxlist,
int comm_size )
static

Definition at line 143 of file xt_xmap_dist_dir_bucket_gen_cycl_stripe.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_intracomm_dist_dir_global_interval_size()

static Xt_int get_intracomm_dist_dir_global_interval_size ( Xt_idxlist src,
Xt_idxlist dst,
bool * stripify,
MPI_Comm comm,
int comm_size,
Xt_config config )
inlinestatic

Definition at line 102 of file xt_xmap_dist_dir_bucket_gen_cycl_stripe.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_max_idxlist_index()

static Xt_int get_max_idxlist_index ( Xt_idxlist a,
Xt_idxlist b )
inlinestatic

Definition at line 132 of file xt_xmap_dist_dir_bucket_gen_cycl_stripe.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_min_idxlist_index()

static Xt_int get_min_idxlist_index ( Xt_idxlist a,
Xt_idxlist b )
inlinestatic

Definition at line 122 of file xt_xmap_dist_dir_bucket_gen_cycl_stripe.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ xt_xmap_dist_dir_get_bucket()

static Xt_idxlist xt_xmap_dist_dir_get_bucket ( struct Xt_xmdd_bucket_gen_cycl_stripe_state * gen_state,
struct bucket_params * bucket_params,
int dist_dir_rank )
static

generates the buckets of the distributed directory

The buckets of the distributed directory are computed as follows:

  • compute sum of the sizes of all src_idxlist's and round to next multiple of comm_size -> global_interval
  • local_interval_size = global_interval / comm_size
  • local_interval_start = rank * local_interval_size
  • local_interval_end = (rank + 1) * local_interval_size
  • local_interval = $[local_interval_start,local_interval_end)$
  • bucket of each rank is the set of stripes that is defined as: stripe[i].start = start + rank*local_interval_start + i*global_interval stripe[i].stride = 1; stripe[i].nstrides = (int)local_interval; with i in [0,num_stripes) bucket[rank] = xt_idxstripes_new(stripes, num_stripes);
  • num_stripes and start are choosen such that: start + local_interval > get_min_idxlist_index(src_idxlist, dst_idxlist) (which implies for rank 0 stripe[0].start <= get_min_idxlist_index(src_idxlist, dst_idxlist)) where start = global_interval * k, k is minimal and start + num_stripes*global_interval > get_max_idxlist_index(src_idxlist, dst_idxlist); i.e. local_interval is replicated modulo global_interval for the whole range of indices.

\

Parameters
[in]bucket_paramsthe parameters
[in,out]gen_statebucket generator state
[in]dist_dir_rankrank for which to compute bucket
Returns
newly created bucket and corresponding rank. The bucket must not be used after either the next call to xt_xmap_dist_dir_get_bucket or xt_xmdd_bucket_gen_cycl_stripe_destroy for the same gen_state.

Definition at line 401 of file xt_xmap_dist_dir_bucket_gen_cycl_stripe.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ xt_xmdd_bucket_gen_cycl_stripe_destroy()

static void xt_xmdd_bucket_gen_cycl_stripe_destroy ( void * gen_state)
static

Definition at line 336 of file xt_xmap_dist_dir_bucket_gen_cycl_stripe.c.

Here is the call graph for this function:

◆ xt_xmdd_bucket_gen_cycl_stripe_get_intersect_max_num()

static int xt_xmdd_bucket_gen_cycl_stripe_get_intersect_max_num ( void * gen_state,
int type )
static

Definition at line 345 of file xt_xmap_dist_dir_bucket_gen_cycl_stripe.c.

◆ xt_xmdd_bucket_gen_cycl_stripe_init()

static int xt_xmdd_bucket_gen_cycl_stripe_init ( void * gen_state_,
Xt_idxlist src_idxlist,
Xt_idxlist dst_idxlist,
Xt_config config,
struct Xt_xmdd_bucket_gen_comms * comms,
void * init_params )
static

Definition at line 290 of file xt_xmap_dist_dir_bucket_gen_cycl_stripe.c.

Here is the call graph for this function:

◆ xt_xmdd_cycl_stripe_get_next_bucket()

static struct Xt_com_list xt_xmdd_cycl_stripe_get_next_bucket ( void * gen_state_,
int type )
static

Definition at line 452 of file xt_xmap_dist_dir_bucket_gen_cycl_stripe.c.

Here is the call graph for this function:

Variable Documentation

◆ Xt_xmdd_cycl_stripe_bucket_gen_desc

const struct Xt_xmdd_bucket_gen_ Xt_xmdd_cycl_stripe_bucket_gen_desc
Initial value:
= { .init
.gen_state_size = sizeof (struct Xt_xmdd_bucket_gen_cycl_stripe_state),
}
static void xt_xmdd_bucket_gen_cycl_stripe_destroy(void *gen_state)
static int xt_xmdd_bucket_gen_cycl_stripe_init(void *gen_state_, Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, Xt_config config, struct Xt_xmdd_bucket_gen_comms *comms, void *init_params)
static int xt_xmdd_bucket_gen_cycl_stripe_get_intersect_max_num(void *gen_state, int type)
static struct Xt_com_list xt_xmdd_cycl_stripe_get_next_bucket(void *gen_state_, int type)
int(* Xt_xmdd_bucket_gen_init_state_internal)(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_ *gen)

This is the default implementation

Examples
test_exchanger_parallel.c.

Definition at line 90 of file xt_xmap_dist_dir_bucket_gen_cycl_stripe.c.