Yet Another eXchange Tool  0.9.0
Classes | Macros | Enumerations | Functions
xt_xmap_dist_dir_common.h File Reference

Uitlity functions for creation of distributed directories. More...

#include <stdbool.h>
#include "xt/xt_idxlist.h"
#include "xt/xt_xmap_intersection.h"
Include dependency graph for xt_xmap_dist_dir_common.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  dist_dir
 
struct  bucket_params
 
struct  Xt_xmdd_txstat
 
struct  isect
 

Macros

#define MIN(a, b)   (((a)<(b))?(a):(b))
 
#define MAX(a, b)   (((a)>(b))?(a):(b))
 

Enumerations

enum  xt_xmdd_direction { xt_xmdd_direction_src = 0 , xt_xmdd_direction_dst = 1 }
 

Functions

void xt_xmdd_free_dist_dir (struct dist_dir *dist_dir)
 
int xt_com_list_rank_cmp (const void *a_, const void *b_)
 
Xt_idxlist xt_xmap_dist_dir_get_bucket (const struct bucket_params *bucket_params, struct Xt_stripe **stripes_, size_t *stripes_array_size, int dist_dir_rank)
 generates the buckets of the distributed directory More...
 
struct Xt_xmdd_txstat xt_xmap_dist_dir_send_intersections (void *restrict send_buffer, size_t send_size_asize, size_t send_size_entry, int tag, MPI_Comm comm, int rank_lim, MPI_Request requests[], const int send_size[rank_lim][send_size_asize])
 initiate sends of packed index lists More...
 
int xt_xmdd_cmp_isect_src_rank (const void *a_, const void *b_)
 
int xt_xmdd_cmp_isect_dst_rank (const void *a_, const void *b_)
 
size_t xt_xmap_dist_dir_match_src_dst (const struct dist_dir *src_dist_dir, const struct dist_dir *dst_dist_dir, struct isect **src_dst_intersections)
 
size_t xt_xmap_dist_dir_pack_intersections (enum xt_xmdd_direction target, size_t num_intersections, const struct isect *restrict src_dst_intersections, bool isect_idxlist_delete, size_t send_size_asize, size_t send_size_idx, int(*send_size)[send_size_asize], unsigned char *buffer, size_t buf_size, size_t *ofs, MPI_Comm comm)
 
void xt_xmap_dist_dir_same_rank_merge (struct dist_dir **dist_dir_results)
 

Detailed Description

Uitlity functions for 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_common.h.

Macro Definition Documentation

◆ MAX

#define MAX (   a,
 
)    (((a)>(b))?(a):(b))

Definition at line 61 of file xt_xmap_dist_dir_common.h.

◆ MIN

#define MIN (   a,
 
)    (((a)<(b))?(a):(b))

Definition at line 60 of file xt_xmap_dist_dir_common.h.

Enumeration Type Documentation

◆ xt_xmdd_direction

Enumerator
xt_xmdd_direction_src 
xt_xmdd_direction_dst 

Definition at line 112 of file xt_xmap_dist_dir_common.h.

Function Documentation

◆ xt_com_list_rank_cmp()

int xt_com_list_rank_cmp ( const void *  a_,
const void *  b_ 
)

Definition at line 358 of file xt_xmap_dist_dir_common.c.

Here is the caller graph for this function:

◆ xt_xmap_dist_dir_get_bucket()

Xt_idxlist xt_xmap_dist_dir_get_bucket ( const struct bucket_params bucket_params,
struct Xt_stripe **  stripes_,
size_t *  stripes_array_size,
int  dist_dir_rank 
)

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
[out]stripes_pointer to pointer of array of the stripes describing the bucket for rank dist_dir_rank. Must point to a pointer allocated by malloc or related and will be resized if necessary.
[in,out]stripes_array_sizenumber of stripes stored in stripes_
[in]dist_dir_rankrank for which to compute bucket
Returns
newly created bucket. The bucket must not be longer lived than the dynamic memory referenced by stripes_ .

Definition at line 116 of file xt_xmap_dist_dir_common.c.

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

◆ xt_xmap_dist_dir_match_src_dst()

size_t xt_xmap_dist_dir_match_src_dst ( const struct dist_dir src_dist_dir,
const struct dist_dir dst_dist_dir,
struct isect **  src_dst_intersections 
)

Definition at line 196 of file xt_xmap_dist_dir_common.c.

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

◆ xt_xmap_dist_dir_pack_intersections()

size_t xt_xmap_dist_dir_pack_intersections ( enum xt_xmdd_direction  target,
size_t  num_intersections,
const struct isect *restrict  src_dst_intersections,
bool  isect_idxlist_delete,
size_t  send_size_asize,
size_t  send_size_idx,
int(*)  send_size[send_size_asize],
unsigned char *  buffer,
size_t  buf_size,
size_t *  ofs,
MPI_Comm  comm 
)

Definition at line 232 of file xt_xmap_dist_dir_common.c.

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

◆ xt_xmap_dist_dir_same_rank_merge()

void xt_xmap_dist_dir_same_rank_merge ( struct dist_dir **  dist_dir_results)

Definition at line 294 of file xt_xmap_dist_dir_common.c.

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

◆ xt_xmap_dist_dir_send_intersections()

struct Xt_xmdd_txstat xt_xmap_dist_dir_send_intersections ( void *restrict  send_buffer,
size_t  send_size_asize,
size_t  send_size_entry,
int  tag,
MPI_Comm  comm,
int  rank_lim,
MPI_Request  requests[],
const int  send_size[rank_lim][send_size_asize] 
)

initiate sends of packed index lists

Parameters
send_bufferpointer to buffer of packed index lists
send_size_asizenumber of per-rank entries in send_size
send_size_entryindex of send_size to act on
tagtag to use in MPI_Isend
commcommunicator to use
rank_limiterate over rank from 0 to rank_lim - 1 when investigating send_size[rank][send_size_entry]
requeststhe resulting MPI requests from the issued MPI_Isend calls are stored here, size must be at least number of greater-than-zero entries in send_size column send_size_entry
send_size2-dimensional array of individual message sizes

◆ xt_xmdd_cmp_isect_dst_rank()

int xt_xmdd_cmp_isect_dst_rank ( const void *  a_,
const void *  b_ 
)

Definition at line 350 of file xt_xmap_dist_dir_common.c.

Here is the caller graph for this function:

◆ xt_xmdd_cmp_isect_src_rank()

int xt_xmdd_cmp_isect_src_rank ( const void *  a_,
const void *  b_ 
)

Definition at line 342 of file xt_xmap_dist_dir_common.c.

Here is the caller graph for this function:

◆ xt_xmdd_free_dist_dir()

void xt_xmdd_free_dist_dir ( struct dist_dir dist_dir)

Definition at line 66 of file xt_xmap_dist_dir_common.c.

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