Yet Another eXchange Tool
0.9.0
|
Implementation of uitlity functions for creation of distributed directories. More...
#include <string.h>
#include <assert.h>
#include "core/ppm_xfuncs.h"
#include "xt/xt_idxstripes.h"
#include "xt/xt_mpi.h"
#include "xt/xt_xmap_dist_dir.h"
#include "xt/xt_xmap_dist_dir_intercomm.h"
#include "xt_arithmetic_util.h"
#include "xt_xmap_dist_dir_common.h"
#include "ensure_array_size.h"
#include "xt_idxstripes_internal.h"
Go to the source code of this file.
Functions | |
void | xt_xmdd_free_dist_dir (struct dist_dir *dist_dir) |
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 *restrict requests, const int(*send_size)[send_size_asize]) |
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) |
static int | stripe_cmp (const void *a, const void *b) |
void | xt_xmap_dist_dir_same_rank_merge (struct dist_dir **dist_dir_results) |
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_) |
int | xt_com_list_rank_cmp (const void *a_, const void *b_) |
Xt_xmap | xt_xmap_dist_dir_new (Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm) |
Implementation of uitlity functions for creation of distributed directories.
Definition in file xt_xmap_dist_dir_common.c.
|
static |
Definition at line 278 of file xt_xmap_dist_dir_common.c.
int xt_com_list_rank_cmp | ( | const void * | a_, |
const void * | b_ | ||
) |
Definition at line 358 of file xt_xmap_dist_dir_common.c.
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:
[in] | bucket_params | the 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_size | number of stripes stored in stripes_ |
[in] | dist_dir_rank | rank for which to compute bucket |
Definition at line 116 of file xt_xmap_dist_dir_common.c.
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.
Xt_xmap xt_xmap_dist_dir_new | ( | Xt_idxlist | src_idxlist, |
Xt_idxlist | dst_idxlist, | ||
MPI_Comm | comm | ||
) |
Construct an exchange map.
This operation is collective over all processes in comm.
It uses a distributed directory to reduce communication and computation during the initialisation at the cost of some extra latency because more network transfers than for xt_xmap_all2all_new are required.
[in] | src_idxlist | source index list |
[in] | dst_idxlist | destination index list |
[in] | comm | MPI communicator that contains all processes that take part in the exchange (xt_xmap_dist_dir_new will make its own copy of comm) |
Definition at line 366 of file xt_xmap_dist_dir_common.c.
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.
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.
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 *restrict | requests, | ||
const int(*) | send_size[send_size_asize] | ||
) |
Definition at line 116 of file xt_xmap_dist_dir_common.c.
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.
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.
void xt_xmdd_free_dist_dir | ( | struct dist_dir * | dist_dir | ) |
Definition at line 66 of file xt_xmap_dist_dir_common.c.