Yet Another eXchange Tool 0.11.3
Loading...
Searching...
No Matches
xt_xmap_dist_dir_intercomm.c File Reference
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <limits.h>
#include <mpi.h>
#include "xt/xt_idxlist.h"
#include "xt/xt_idxlist_collection.h"
#include "xt/xt_idxvec.h"
#include "xt/xt_idxstripes.h"
#include "xt/xt_idxempty.h"
#include "xt/xt_xmap.h"
#include "xt/xt_xmap_dist_dir.h"
#include "xt/xt_xmap_dist_dir_intercomm.h"
#include "xt/xt_mpi.h"
#include "xt_arithmetic_util.h"
#include "xt_idxstripes_internal.h"
#include "xt_mpi_internal.h"
#include "core/core.h"
#include "core/ppm_xfuncs.h"
#include "xt/xt_xmap_intersection.h"
#include "xt_idxlist_internal.h"
#include "xt_xmap_dist_dir_common.h"
#include "xt_config_internal.h"
#include "instr.h"
#include "xt/xt_sort.h"
#include "xt_xmap_dist_dir_bucket_gen_internal.h"
Include dependency graph for xt_xmap_dist_dir_intercomm.c:

Go to the source code of this file.

Classes

struct  mmsg_buf
 
struct  dd_result
 

Typedefs

typedef int(* tx_fp) (void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *)
 

Enumerations

enum  { SEND_SIZE = 0 , SEND_NUM = 1 , SEND_SIZE_ASIZE }
 

Functions

static void rank_no_send (size_t rank, int(*restrict send_size)[SEND_SIZE_ASIZE])
 
static struct mmsg_buf compute_and_pack_bucket_intersections (void *bucket_gen_state, int bucket_type, Xt_idxlist idxlist, int(*send_size)[SEND_SIZE_ASIZE], MPI_Comm comm, int comm_size, Xt_config config)
 
static void compress_sizes (int(*restrict sizes)[SEND_SIZE_ASIZE], int comm_size, struct Xt_xmdd_txstat *tx_stat, int *counts)
 
static void * create_intersections (void *bucket_gen_state, int bucket_type, struct Xt_xmdd_txstat tx_stat[2], int recv_size[][SEND_SIZE_ASIZE], int send_size[][SEND_SIZE_ASIZE], Xt_idxlist idxlist, MPI_Comm comm, int comm_size, Xt_config config)
 
static void tx_intersections (size_t num_msg, const int(*sizes)[SEND_SIZE_ASIZE], unsigned char *buffer, MPI_Request *requests, int tag, MPI_Comm comm, tx_fp tx_op)
 
static void irecv_intersections (size_t num_msg, const int(*recv_size)[SEND_SIZE_ASIZE], void *recv_buffer, MPI_Request *requests, int tag, MPI_Comm comm)
 
static void isend_intersections (size_t num_msg, const int(*send_size)[SEND_SIZE_ASIZE], void *send_buffer, MPI_Request *requests, int tag, MPI_Comm comm)
 
static struct dist_dirunpack_dist_dir (struct Xt_xmdd_txstat tx_stat, const int(*sizes)[SEND_SIZE_ASIZE], void *buffer, MPI_Comm comm)
 
static struct dd_result generate_distributed_directories (Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, const struct Xt_xmdd_bucket_gen_comms *comms, int remote_size, int comm_size, Xt_config config)
 
static size_t send_size_from_intersections (size_t num_intersections, const struct isect *restrict src_dst_intersections, enum xt_xmdd_direction target, MPI_Comm comm, int comm_size, int(*restrict send_size_target)[SEND_SIZE_ASIZE])
 
static struct mmsg_buf pack_dist_dirs (size_t num_intersections, struct isect *restrict src_dst_intersections, int(*send_size)[SEND_SIZE_ASIZE], enum xt_xmdd_direction target, bool isect_idxlist_delete, MPI_Comm comm, int comm_size)
 
static struct dist_dirunpack_dist_dir_results (struct Xt_xmdd_txstat tx_stat, void *restrict recv_buffer, int *restrict entry_counts, MPI_Comm comm)
 
static struct dd_result exchange_idxlists (Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, const struct Xt_xmdd_bucket_gen_comms *comms, Xt_config config)
 
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_dist_dir_intercomm_new (Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm inter_comm, MPI_Comm intra_comm)
 

Detailed Description

Typedef Documentation

◆ tx_fp

typedef int(* tx_fp) (void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *)

Definition at line 216 of file xt_xmap_dist_dir_intercomm.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
SEND_SIZE 
SEND_NUM 
SEND_SIZE_ASIZE 

Definition at line 81 of file xt_xmap_dist_dir_intercomm.c.

Function Documentation

◆ compress_sizes()

static void compress_sizes ( int(*) sizes[SEND_SIZE_ASIZE],
int comm_size,
struct Xt_xmdd_txstat * tx_stat,
int * counts )
static

Definition at line 178 of file xt_xmap_dist_dir_intercomm.c.

Here is the caller graph for this function:

◆ compute_and_pack_bucket_intersections()

static struct mmsg_buf compute_and_pack_bucket_intersections ( void * bucket_gen_state,
int bucket_type,
Xt_idxlist idxlist,
int(*) send_size[SEND_SIZE_ASIZE],
MPI_Comm comm,
int comm_size,
Xt_config config )
static

Definition at line 102 of file xt_xmap_dist_dir_intercomm.c.

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

◆ create_intersections()

static void * create_intersections ( void * bucket_gen_state,
int bucket_type,
struct Xt_xmdd_txstat tx_stat[2],
int recv_size[][SEND_SIZE_ASIZE],
int send_size[][SEND_SIZE_ASIZE],
Xt_idxlist idxlist,
MPI_Comm comm,
int comm_size,
Xt_config config )
static

Definition at line 195 of file xt_xmap_dist_dir_intercomm.c.

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

◆ exchange_idxlists()

static struct dd_result exchange_idxlists ( Xt_idxlist src_idxlist,
Xt_idxlist dst_idxlist,
const struct Xt_xmdd_bucket_gen_comms * comms,
Xt_config config )
static

Definition at line 467 of file xt_xmap_dist_dir_intercomm.c.

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

◆ generate_distributed_directories()

static struct dd_result generate_distributed_directories ( Xt_idxlist src_idxlist,
Xt_idxlist dst_idxlist,
const struct Xt_xmdd_bucket_gen_comms * comms,
int remote_size,
int comm_size,
Xt_config config )
static

Definition at line 290 of file xt_xmap_dist_dir_intercomm.c.

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

◆ irecv_intersections()

static void irecv_intersections ( size_t num_msg,
const int(*) recv_size[SEND_SIZE_ASIZE],
void * recv_buffer,
MPI_Request * requests,
int tag,
MPI_Comm comm )
static

Definition at line 235 of file xt_xmap_dist_dir_intercomm.c.

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

◆ isend_intersections()

static void isend_intersections ( size_t num_msg,
const int(*) send_size[SEND_SIZE_ASIZE],
void * send_buffer,
MPI_Request * requests,
int tag,
MPI_Comm comm )
static

Definition at line 245 of file xt_xmap_dist_dir_intercomm.c.

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

◆ pack_dist_dirs()

static struct mmsg_buf pack_dist_dirs ( size_t num_intersections,
struct isect *restrict src_dst_intersections,
int(*) send_size[SEND_SIZE_ASIZE],
enum xt_xmdd_direction target,
bool isect_idxlist_delete,
MPI_Comm comm,
int comm_size )
static

Definition at line 402 of file xt_xmap_dist_dir_intercomm.c.

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

◆ rank_no_send()

static void rank_no_send ( size_t rank,
int(*) send_size[SEND_SIZE_ASIZE] )
inlinestatic

Definition at line 88 of file xt_xmap_dist_dir_intercomm.c.

Here is the caller graph for this function:

◆ send_size_from_intersections()

static size_t send_size_from_intersections ( size_t num_intersections,
const struct isect *restrict src_dst_intersections,
enum xt_xmdd_direction target,
MPI_Comm comm,
int comm_size,
int(*) send_size_target[SEND_SIZE_ASIZE] )
static

Definition at line 374 of file xt_xmap_dist_dir_intercomm.c.

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

◆ tx_intersections()

static void tx_intersections ( size_t num_msg,
const int(*) sizes[SEND_SIZE_ASIZE],
unsigned char * buffer,
MPI_Request * requests,
int tag,
MPI_Comm comm,
tx_fp tx_op )
static

Definition at line 219 of file xt_xmap_dist_dir_intercomm.c.

Here is the caller graph for this function:

◆ unpack_dist_dir()

static struct dist_dir * unpack_dist_dir ( struct Xt_xmdd_txstat tx_stat,
const int(*) sizes[SEND_SIZE_ASIZE],
void * buffer,
MPI_Comm comm )
static

Definition at line 256 of file xt_xmap_dist_dir_intercomm.c.

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

◆ unpack_dist_dir_results()

static struct dist_dir * unpack_dist_dir_results ( struct Xt_xmdd_txstat tx_stat,
void *restrict recv_buffer,
int *restrict entry_counts,
MPI_Comm comm )
static

Definition at line 431 of file xt_xmap_dist_dir_intercomm.c.

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

◆ xt_xmap_dist_dir_intercomm_custom_new()

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 )

Construct an exchange map over an intercommunicator with custom parameters
This operation is collective over all processes in comm.
It uses a distributed directory for the initialisation

Parameters
[in]src_idxlistsource index list
[in]dst_idxlistdestination index list
[in]inter_commMPI intercommunicator that contains all processes that part in the exchange (xt_xmap_dist_dir_icomm_new will make its own copy of comm)
[in]intra_commMPI intracommunicator corresponding to the group of inter_comm that the calling rank belongs to
[in]configcustom parameter object

Definition at line 582 of file xt_xmap_dist_dir_intercomm.c.

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

◆ xt_xmap_dist_dir_intercomm_new()

Xt_xmap xt_xmap_dist_dir_intercomm_new ( Xt_idxlist src_idxlist,
Xt_idxlist dst_idxlist,
MPI_Comm inter_comm,
MPI_Comm intra_comm )

Construct an exchange map over an intercommunicator
This operation is collective over all processes in comm.
It uses a distributed directory for the initialisation

Parameters
[in]src_idxlistsource index list
[in]dst_idxlistdestination index list
[in]inter_commMPI intercommunicator that contains all processes that part in the exchange (xt_xmap_dist_dir_icomm_new will make its own copy of comm)
[in]intra_commMPI intracommunicator corresponding to the group of inter_comm that the calling rank belongs to

Definition at line 630 of file xt_xmap_dist_dir_intercomm.c.

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