Go to the source code of this file.
|
#define | MSG_DIR(msg) ((msg).rank < 0) |
|
#define | XT_SORTFUNC_DECL static |
|
#define | SORT_TYPE struct Xt_redist_msg |
|
#define | SORT_TYPE_SUFFIX redist_msg_mix |
|
#define | SORT_TYPE_CMP_LT(u, v, i, j) |
|
#define | SORT_TYPE_CMP_LE(u, v, i, j) |
|
#define | SORT_TYPE_CMP_EQ(u, v, i, j) (((u).rank & INT_MAX) == ((v).rank & INT_MAX)) |
|
#define | XT_SORT_EXTRA_ARGS_DECL , int comm_rank, int comm_size |
|
#define | XT_SORT_EXTRA_ARGS_PASS , comm_rank, comm_size |
|
#define | XT_SORT_VECSWAP_EXTRA_ARGS_DECL |
|
#define | XT_SORT_VECSWAP_EXTRA_ARGS_PASS |
|
|
static Xt_exchanger | xt_exchanger_mix_isend_irecv_copy (Xt_exchanger exchanger, MPI_Comm newComm, int new_tag_offset) |
|
static void | xt_exchanger_mix_isend_irecv_delete (Xt_exchanger exchanger) |
|
static void | xt_exchanger_mix_isend_irecv_s_exchange (Xt_exchanger exchanger, const void *src_data, void *dst_data) |
|
static void | xt_exchanger_mix_isend_irecv_a_exchange (Xt_exchanger exchanger, const void *src_data, void *dst_data, Xt_request *request) |
|
static Xt_exchanger_omp_share | xt_exchanger_mix_isend_irecv_create_omp_share (Xt_exchanger exchanger) |
|
static int | xt_exchanger_mix_isend_irecv_get_msg_ranks (Xt_exchanger exchanger, enum xt_msg_direction direction, int *restrict *ranks) |
|
static MPI_Datatype | xt_exchanger_mix_isend_irecv_get_MPI_Datatype (Xt_exchanger exchanger, int rank, enum xt_msg_direction direction, bool do_dup) |
|
static Xt_exchanger_mix_isend_irecv | xt_exchanger_mix_isend_irecv_alloc (size_t nmsg, Xt_config config) |
|
static int | adjusted_rank (int r, int comm_rank, int comm_size) |
|
Xt_exchanger | xt_exchanger_mix_isend_irecv_new (int nsend, int nrecv, const struct Xt_redist_msg *send_msgs, const struct Xt_redist_msg *recv_msgs, MPI_Comm comm, int tag_offset, Xt_config config) |
|
static void | redist_msgs_to_req (size_t nmsg, const struct Xt_redist_msg *restrict msgs, const void *src_data, void *dst_data, MPI_Request *requests, MPI_Comm comm, int tag_offset) |
|
◆ MSG_DIR
#define MSG_DIR |
( |
| msg | ) |
((msg).rank < 0) |
◆ SORT_TYPE
◆ SORT_TYPE_CMP_EQ
#define SORT_TYPE_CMP_EQ |
( |
| u, |
|
|
| v, |
|
|
| i, |
|
|
| j ) (((u).rank & INT_MAX) == ((v).rank & INT_MAX)) |
◆ SORT_TYPE_CMP_LE
#define SORT_TYPE_CMP_LE |
( |
| u, |
|
|
| v, |
|
|
| i, |
|
|
| j ) |
◆ SORT_TYPE_CMP_LT
#define SORT_TYPE_CMP_LT |
( |
| u, |
|
|
| v, |
|
|
| i, |
|
|
| j ) |
◆ SORT_TYPE_SUFFIX
#define SORT_TYPE_SUFFIX redist_msg_mix |
◆ XT_SORT_EXTRA_ARGS_DECL
#define XT_SORT_EXTRA_ARGS_DECL , int comm_rank, int comm_size |
◆ XT_SORT_EXTRA_ARGS_PASS
#define XT_SORT_EXTRA_ARGS_PASS , comm_rank, comm_size |
◆ XT_SORT_VECSWAP_EXTRA_ARGS_DECL
#define XT_SORT_VECSWAP_EXTRA_ARGS_DECL |
◆ XT_SORT_VECSWAP_EXTRA_ARGS_PASS
#define XT_SORT_VECSWAP_EXTRA_ARGS_PASS |
◆ XT_SORTFUNC_DECL
#define XT_SORTFUNC_DECL static |
◆ Xt_exchanger_mix_isend_irecv
◆ anonymous enum
◆ adjusted_rank()
static int adjusted_rank |
( |
int | r, |
|
|
int | comm_rank, |
|
|
int | comm_size ) |
|
inlinestatic |
◆ redist_msgs_to_req()
static void redist_msgs_to_req |
( |
size_t | nmsg, |
|
|
const struct Xt_redist_msg *restrict | msgs, |
|
|
const void * | src_data, |
|
|
void * | dst_data, |
|
|
MPI_Request * | requests, |
|
|
MPI_Comm | comm, |
|
|
int | tag_offset ) |
|
inlinestatic |
◆ xt_exchanger_mix_isend_irecv_a_exchange()
static void xt_exchanger_mix_isend_irecv_a_exchange |
( |
Xt_exchanger | exchanger, |
|
|
const void * | src_data, |
|
|
void * | dst_data, |
|
|
Xt_request * | request ) |
|
static |
◆ xt_exchanger_mix_isend_irecv_alloc()
◆ xt_exchanger_mix_isend_irecv_copy()
◆ xt_exchanger_mix_isend_irecv_create_omp_share()
◆ xt_exchanger_mix_isend_irecv_delete()
static void xt_exchanger_mix_isend_irecv_delete |
( |
Xt_exchanger | exchanger | ) |
|
|
static |
◆ xt_exchanger_mix_isend_irecv_get_MPI_Datatype()
static MPI_Datatype xt_exchanger_mix_isend_irecv_get_MPI_Datatype |
( |
Xt_exchanger | exchanger, |
|
|
int | rank, |
|
|
enum xt_msg_direction | direction, |
|
|
bool | do_dup ) |
|
static |
◆ xt_exchanger_mix_isend_irecv_get_msg_ranks()
◆ xt_exchanger_mix_isend_irecv_new()
Constructor for an exchanger using asynchronous send and recv. The order in which the send's and recv's are called are optimised to reduce network congestion and improve performance.
- Parameters
-
[in] | nsend | number of send messages |
[in] | nrecv | number of receive messages |
[in] | send_msgs | array with send messages |
[in] | recv_msgs | array with receive messages |
[in] | comm | MPI communicator that is to be used for the communication |
[in] | tag_offset | tag |
[in] | config | optional customization parameters |
note: tag_offset + xt_mpi_tag_exchange_msg must not be used on comm by any other part of the program during the lifetime of the created exchanger object
- Examples
- test_exchanger_parallel.c.
Definition at line 197 of file xt_exchanger_mix_isend_irecv.c.
◆ xt_exchanger_mix_isend_irecv_s_exchange()
static void xt_exchanger_mix_isend_irecv_s_exchange |
( |
Xt_exchanger | exchanger, |
|
|
const void * | src_data, |
|
|
void * | dst_data ) |
|
static |
◆ xt_exchanger_mix_isend_irecv_vtable
Initial value:= {
}
static MPI_Datatype xt_exchanger_mix_isend_irecv_get_MPI_Datatype(Xt_exchanger exchanger, int rank, enum xt_msg_direction direction, bool do_dup)
static void xt_exchanger_mix_isend_irecv_a_exchange(Xt_exchanger exchanger, const void *src_data, void *dst_data, Xt_request *request)
static void xt_exchanger_mix_isend_irecv_delete(Xt_exchanger exchanger)
static int xt_exchanger_mix_isend_irecv_get_msg_ranks(Xt_exchanger exchanger, enum xt_msg_direction direction, int *restrict *ranks)
static void xt_exchanger_mix_isend_irecv_s_exchange(Xt_exchanger exchanger, const void *src_data, void *dst_data)
static Xt_exchanger xt_exchanger_mix_isend_irecv_copy(Xt_exchanger exchanger, MPI_Comm newComm, int new_tag_offset)
static Xt_exchanger_omp_share xt_exchanger_mix_isend_irecv_create_omp_share(Xt_exchanger exchanger)
Definition at line 114 of file xt_exchanger_mix_isend_irecv.c.