Skip to content
Snippets Groups Projects
Commit 98ae37a7 authored by Moritz Hanke's avatar Moritz Hanke Committed by Thomas Jahns
Browse files

xt_config: Adds exch_send_comm_mode to xt_config

parent bb4ae07f
No related branches found
No related tags found
1 merge request!31Draft: Attempt at fuller exchanger interface
......@@ -258,6 +258,42 @@ int
xt_config_get_xmap_stripe_align(Xt_config config);
enum Xt_exch_send_comm_mode {
/** use default, standard send mode */
xt_exch_send_standard,
/** use buffered send */
xt_exch_send_buffered,
/** use synchronous send */
xt_exch_send_synchronous,
/** number of available send modes (has to be last entry) */
xt_exch_send_comm_mode_count,
};
/**
* Set exchanger send communication mode parameter.
*
* @param[in,out] config configuration object to modify
* @param[in] exch_send_comm_mode
* 0: standard send,\n
* 1: buffered send,\n
* 2: synchronous send
*
* The send communication mode is a recommendation for the
* exchanger. Not every exchanger will support all modes and may fall
* back to its default.
*/
void
xt_config_set_exchange_send_comm_mode(Xt_config config,
int exch_send_comm_mode);
/**
* Get send communication mode parameter.
* @param[in] config configuration object to query
*/
int
xt_config_get_exchange_send_comm_mode(Xt_config config);
#endif
/*
......
......@@ -401,6 +401,24 @@ xt_config_get_xmap_stripe_align(Xt_config config)
return XT_CONFIG_GET_XMAP_STRIPING(config);
}
void
xt_config_set_exchange_send_comm_mode(Xt_config config,
int exch_send_comm_mode)
{
if (exch_send_comm_mode < 0
|| exch_send_comm_mode >= xt_exch_send_comm_mode_count)
Xt_abort(Xt_default_comm,
"error: invalid value passed to "
"xt_config_set_exchange_send_comm_mode.\n", filename, __LINE__);
XT_CONFIG_SET_EXCH_SEND_COMM_MODE(config, exch_send_comm_mode);
}
int
xt_config_get_exchange_send_comm_mode(Xt_config config)
{
return XT_CONFIG_GET_EXCH_SEND_COMM_MODE(config);
}
/**
* \page defaults Customizable defaults
*
......
......@@ -101,6 +101,12 @@ MODULE xt_config_f
xt_quicksort = 0, &
xt_mergesort = 1
INTEGER, PUBLIC, PARAMETER :: &
xt_exch_send_standard = 0, &
xt_exch_send_buffered = 1, &
xt_exch_send_synchronous = 2
PUBLIC :: xt_config_set_exchange_send_comm_mode, &
xt_config_get_exchange_send_comm_mode
PUBLIC :: xt_config_get_xmdd_bucket_gen, &
xt_config_set_xmdd_bucket_gen
......@@ -403,6 +409,40 @@ CONTAINS
preference = INT(xt_config_get_xmap_stripe_align_c(config%cptr))
END FUNCTION xt_config_get_xmap_stripe_align
SUBROUTINE xt_config_set_exchange_send_comm_mode(config, &
exch_send_comm_mode)
TYPE(xt_config), INTENT(inout) :: config
INTEGER, INTENT(in) :: exch_send_comm_mode
INTEGER(c_int) :: exch_send_comm_mode_c
INTERFACE
SUBROUTINE xt_config_set_exchange_send_comm_mode_c(config, &
exch_send_comm_mode) &
BIND(c, name='xt_config_set_exchange_send_comm_mode')
IMPORT :: c_ptr, c_int
TYPE(c_ptr), VALUE :: config
INTEGER(c_int), VALUE :: exch_send_comm_mode
END SUBROUTINE xt_config_set_exchange_send_comm_mode_c
END INTERFACE
exch_send_comm_mode_c = INT(exch_send_comm_mode, c_int)
CALL xt_config_set_exchange_send_comm_mode_c(config%cptr, &
exch_send_comm_mode_c)
END SUBROUTINE xt_config_set_exchange_send_comm_mode
FUNCTION xt_config_get_exchange_send_comm_mode(config) RESULT(send_mode)
TYPE(xt_config), INTENT(in) :: config
INTEGER :: send_mode
INTERFACE
FUNCTION xt_config_get_exchange_send_comm_mode_c(config) &
RESULT(send_mode) &
BIND(c, name='xt_config_get_exchange_send_comm_mode')
IMPORT :: c_int, c_ptr
TYPE(c_ptr), VALUE :: config
INTEGER(c_int) :: send_mode
END FUNCTION xt_config_get_exchange_send_comm_mode_c
END INTERFACE
send_mode = INT(xt_config_get_exchange_send_comm_mode_c(config%cptr))
END FUNCTION xt_config_get_exchange_send_comm_mode
END MODULE xt_config_f
!
! Local Variables:
......
......@@ -73,6 +73,10 @@ enum xt_config_flags {
xt_force_xmap_striping_bit_ofs = xt_force_nosort_bit_ofs + 1,
xt_force_xmap_striping_num_bits = 2,
xt_force_xmap_striping_mask = 3 << xt_force_xmap_striping_bit_ofs,
xt_exch_send_comm_mode_bit_ofs =
xt_force_xmap_striping_bit_ofs + xt_force_xmap_striping_num_bits,
xt_exch_send_comm_mode_num_bits = 2,
xt_exch_send_comm_mode_mask = 3 << xt_exch_send_comm_mode_bit_ofs,
};
struct Xt_sort_algo_funcptr
......@@ -155,12 +159,21 @@ xt_config_get_exchange_new_by_comm(Xt_config config, MPI_Comm comm);
#define XT_CONFIG_GET_XMAP_STRIPING(config) \
(((config)->flags >> xt_force_xmap_striping_bit_ofs) & 3U)
#define XT_CONFIG_SET_XMAP_STRIPING(config, v) \
do { (config)->flags \
do { (config)->flags \
= ((config)->flags & ~(uint32_t)xt_force_xmap_striping_mask) \
| (uint32_t)((v&3) << xt_force_xmap_striping_bit_ofs); } \
while (0)
#define XT_CONFIG_BUCKET_DESTROY(config, bucket_gen_state) \
#define XT_CONFIG_GET_EXCH_SEND_COMM_MODE(config) \
((enum Xt_exch_send_comm_mode) \
(((config)->flags >> xt_exch_send_comm_mode_bit_ofs) & 3U))
#define XT_CONFIG_SET_EXCH_SEND_COMM_MODE(config, v) \
do { (config)->flags \
= ((config)->flags & ~(uint32_t)xt_exch_send_comm_mode_mask) \
| (uint32_t)((v&3) << xt_exch_send_comm_mode_bit_ofs); } \
while (0)
#define XT_CONFIG_BUCKET_DESTROY(config, bucket_gen_state) \
do { if ((config)->xmdd_bucket_gen->destroy) \
(config)->xmdd_bucket_gen->destroy((bucket_gen_state)); \
} while (0)
......
......@@ -76,6 +76,11 @@ MODULE yaxt
xt_config_get_xmdd_bucket_gen, &
xt_config_get_xmap_stripe_align, &
xt_config_set_xmap_stripe_align, &
xt_exch_send_standard, &
xt_exch_send_buffered, &
xt_exch_send_synchronous, &
xt_config_set_exchange_send_comm_mode, &
xt_config_get_exchange_send_comm_mode, &
xt_exchanger_irecv_isend_ddt_packed
USE xt_sort, ONLY: xt_sort_int, xt_sort_index, xt_sort_idxpos, &
xt_sort_permutation, xt_assign_id_map
......@@ -260,6 +265,11 @@ MODULE yaxt
xt_config_get_xmdd_bucket_gen, &
xt_config_get_xmap_stripe_align, &
xt_config_set_xmap_stripe_align, &
xt_exch_send_standard, &
xt_exch_send_buffered, &
xt_exch_send_synchronous, &
xt_config_set_exchange_send_comm_mode, &
xt_config_get_exchange_send_comm_mode, &
xt_exchanger_irecv_isend_ddt_packed
PUBLIC :: xt_redist_p2p_new, xt_redist_p2p_custom_new
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment