9c19dd4e5b
v1.10 is now in the same compatibility level as v1.7/v1.8 (there is/will be no v1.9 series). v2.0 now takes over for what used to be called v1.9.
317 строки
11 KiB
C
317 строки
11 KiB
C
/*
|
|
* Copyright (c) 2013-2015 Cisco Systems, Inc. All rights reserved.
|
|
* $COPYRIGHT$
|
|
*
|
|
* Additional copyrights may follow
|
|
*
|
|
* $HEADER$
|
|
*/
|
|
|
|
/* This header contains macros to help minimize usnic BTL differences
|
|
* between v1.7/v1.8 and v1.9/v2.0. */
|
|
|
|
#ifndef BTL_USNIC_COMPAT_H
|
|
#define BTL_USNIC_COMPAT_H
|
|
|
|
/************************************************************************/
|
|
|
|
/* v2.0 and beyond */
|
|
|
|
#if (OPAL_MAJOR_VERSION >= 2)
|
|
|
|
/* OMPI_ERROR_LOG and friends */
|
|
# include "opal/util/error.h"
|
|
|
|
/* PMIX / modex stuff */
|
|
# include "opal/mca/pmix/pmix.h"
|
|
|
|
/* Proc stuff */
|
|
# include "opal/util/proc.h"
|
|
|
|
/* Free lists are unified into OPAL free lists */
|
|
# include "opal/class/opal_free_list.h"
|
|
|
|
# define USNIC_OUT opal_btl_base_framework.framework_output
|
|
/* JMS Really want to be able to get the job size somehow... But for
|
|
now, so that we can compile, just set it to a constant :-( */
|
|
# define USNIC_MCW_SIZE 2
|
|
#if OPAL_HAVE_HWLOC
|
|
# define proc_bound() (NULL != opal_process_info.cpuset ? 1 : 0)
|
|
#else
|
|
# define proc_bound() 0
|
|
#endif
|
|
# define USNIC_BTL_DEFAULT_VERSION(name) MCA_BTL_DEFAULT_VERSION(name)
|
|
|
|
# define USNIC_SEND_LOCAL des_segments
|
|
# define USNIC_SEND_LOCAL_COUNT des_segment_count
|
|
# define USNIC_SEND_REMOTE des_segments
|
|
# define USNIC_SEND_REMOTE_COUNT des_segment_count
|
|
|
|
# define USNIC_RECV_LOCAL des_segments
|
|
# define USNIC_RECV_LOCAL_COUNT des_segment_count
|
|
# define USNIC_RECV_REMOTE des_segments
|
|
# define USNIC_RECV_REMOTE_COUNT des_segment_count
|
|
|
|
# define USNIC_PUT_LOCAL des_segments
|
|
# define USNIC_PUT_LOCAL_COUNT des_segment_count
|
|
# define USNIC_PUT_REMOTE des_segments
|
|
# define USNIC_PUT_REMOTE_COUNT des_segments_count
|
|
|
|
# define BTL_VERSION 30
|
|
|
|
# define USNIC_COMPAT_FREE_LIST_GET(list, item) \
|
|
(item) = opal_free_list_get((list))
|
|
# define USNIC_COMPAT_FREE_LIST_RETURN(list, item) \
|
|
opal_free_list_return((list), (item))
|
|
|
|
# define usnic_compat_free_list_init opal_free_list_init
|
|
|
|
/*
|
|
* Performance critical; needs to be inline
|
|
*/
|
|
static inline int
|
|
usnic_compat_proc_name_compare(opal_process_name_t a,
|
|
opal_process_name_t b)
|
|
{
|
|
return (bool) (a.jobid == b.jobid && a.vpid == b.vpid);
|
|
}
|
|
|
|
/************************************************************************/
|
|
|
|
/* v1.7, v1.8, and v1.10 (there was no v1.9) */
|
|
|
|
#elif (OPAL_MAJOR_VERSION == 1 && OPAL_MINOR_VERSION >= 7)
|
|
|
|
/* OMPI_ERROR_LOG and friends */
|
|
# include "ompi/mca/rte/rte.h"
|
|
|
|
/* Proc stuff */
|
|
# include "ompi/proc/proc.h"
|
|
|
|
/* Use OMPI free lists in v1.8 */
|
|
# include "ompi/class/ompi_free_list.h"
|
|
|
|
# define USNIC_OUT ompi_btl_base_framework.framework_output
|
|
# define USNIC_MCW_SIZE ompi_process_info.num_procs
|
|
# define proc_bound() (ompi_rte_proc_is_bound)
|
|
# define opal_proc_local_get() ompi_proc_local()
|
|
|
|
# define opal_process_info orte_process_info
|
|
|
|
# define opal_proc_t ompi_proc_t
|
|
# define opal_process_name_t ompi_process_name_t
|
|
|
|
# define opal_btl_usnic_modex_t ompi_btl_usnic_modex_t
|
|
# define opal_btl_usnic_component_t ompi_btl_usnic_component_t
|
|
# define opal_btl_usnic_module_t ompi_btl_usnic_module_t
|
|
# define opal_btl_usnic_endpoint_t ompi_btl_usnic_endpoint_t
|
|
# define opal_btl_usnic_endpoint_t_class ompi_btl_usnic_endpoint_t_class
|
|
# define opal_btl_usnic_frag_t ompi_btl_usnic_frag_t
|
|
# define opal_btl_usnic_frag_t_class ompi_btl_usnic_frag_t_class
|
|
# define opal_btl_usnic_send_frag_t ompi_btl_usnic_send_frag_t
|
|
# define opal_btl_usnic_send_frag_t_class ompi_btl_usnic_send_frag_t_class
|
|
# define opal_btl_usnic_large_send_frag_t ompi_btl_usnic_large_send_frag_t
|
|
# define opal_btl_usnic_large_send_frag_t_class ompi_btl_usnic_large_send_frag_t_class
|
|
# define opal_btl_usnic_small_send_frag_t ompi_btl_usnic_small_send_frag_t
|
|
# define opal_btl_usnic_small_send_frag_t_class ompi_btl_usnic_small_send_frag_t_class
|
|
# define opal_btl_usnic_put_dest_frag_t ompi_btl_usnic_put_dest_frag_t
|
|
# define opal_btl_usnic_put_dest_frag_t_class ompi_btl_usnic_put_dest_frag_t_class
|
|
# define opal_btl_usnic_rx_buf_t ompi_btl_usnic_rx_buf_t
|
|
# define opal_btl_usnic_rx_buf_t_class ompi_btl_usnic_rx_buf_t_class
|
|
# define opal_btl_usnic_segment_t ompi_btl_usnic_segment_t
|
|
# define opal_btl_usnic_segment_t_class ompi_btl_usnic_segment_t_class
|
|
# define opal_btl_usnic_frag_segment_t ompi_btl_usnic_frag_segment_t
|
|
# define opal_btl_usnic_frag_segment_t_class ompi_btl_usnic_frag_segment_t_class
|
|
# define opal_btl_usnic_chunk_segment_t ompi_btl_usnic_chunk_segment_t
|
|
# define opal_btl_usnic_chunk_segment_t_class ompi_btl_usnic_chunk_segment_t_class
|
|
# define opal_btl_usnic_recv_segment_t ompi_btl_usnic_recv_segment_t
|
|
# define opal_btl_usnic_recv_segment_t_class ompi_btl_usnic_recv_segment_t_class
|
|
# define opal_btl_usnic_ack_segment_t ompi_btl_usnic_ack_segment_t
|
|
# define opal_btl_usnic_ack_segment_t_class ompi_btl_usnic_ack_segment_t_class
|
|
|
|
# define opal_btl_usnic_graph_t ompi_btl_usnic_graph_t
|
|
|
|
# define opal_btl_usnic_run_tests ompi_btl_usnic_run_tests
|
|
|
|
# define USNIC_SEND_LOCAL des_src
|
|
# define USNIC_SEND_LOCAL_COUNT des_src_cnt
|
|
# define USNIC_SEND_REMOTE des_dst
|
|
# define USNIC_SEND_REMOTE_COUNT des_dst_cnt
|
|
|
|
# define USNIC_RECV_LOCAL des_dst
|
|
# define USNIC_RECV_LOCAL_COUNT des_dst_cnt
|
|
# define USNIC_RECV_REMOTE des_src
|
|
# define USNIC_RECV_REMOTE_COUNT des_src_cnt
|
|
|
|
# define USNIC_PUT_LOCAL des_dst
|
|
# define USNIC_PUT_LOCAL_COUNT des_dst_cnt
|
|
# define USNIC_PUT_REMOTE des_dst
|
|
# define USNIC_PUT_REMOTE_COUNT des_dst_cnt
|
|
|
|
# define BTL_VERSION 20
|
|
|
|
# define opal_free_list_t ompi_free_list_t
|
|
# define opal_free_list_item_t ompi_free_list_item_t
|
|
# define opal_free_list_item_init_fn_t ompi_free_list_item_init_fn_t
|
|
|
|
# define USNIC_COMPAT_FREE_LIST_GET(list, item) \
|
|
OMPI_FREE_LIST_GET_MT(list, (item))
|
|
# define USNIC_COMPAT_FREE_LIST_RETURN(list, item) \
|
|
OMPI_FREE_LIST_RETURN_MT((list), (item))
|
|
|
|
# define USNIC_COMPAT_BASE_VERSION \
|
|
MCA_BASE_VERSION_2_0_0, \
|
|
.mca_type_name = "btl", \
|
|
.mca_type_major_version = OMPI_MAJOR_VERSION, \
|
|
.mca_type_minor_version = OMPI_MINOR_VERSION, \
|
|
.mca_type_release_version = OMPI_RELEASE_VERSION
|
|
|
|
# define USNIC_BTL_DEFAULT_VERSION(name) \
|
|
USNIC_COMPAT_BASE_VERSION, \
|
|
.mca_component_name = name, \
|
|
.mca_component_major_version = OPAL_MAJOR_VERSION, \
|
|
.mca_component_minor_version = OPAL_MINOR_VERSION, \
|
|
.mca_component_release_version = OPAL_RELEASE_VERSION
|
|
|
|
#define OPAL_BTL_USNIC_UNIT_TESTS OMPI_BTL_USNIC_UNIT_TESTS
|
|
|
|
/*
|
|
* Performance critical; needs to be inline
|
|
*/
|
|
static inline int
|
|
usnic_compat_proc_name_compare(opal_process_name_t a,
|
|
opal_process_name_t b)
|
|
{
|
|
return ompi_rte_compare_name_fields(OMPI_RTE_CMP_ALL, &a, &b);
|
|
}
|
|
|
|
/*
|
|
* Replicate functions that exist on master
|
|
*/
|
|
char* opal_get_proc_hostname(opal_proc_t *proc);
|
|
|
|
/*
|
|
* Wrapper to call ompi_free_list_init
|
|
*/
|
|
int usnic_compat_free_list_init(opal_free_list_t *free_list,
|
|
size_t frag_size,
|
|
size_t frag_alignment,
|
|
opal_class_t* frag_class,
|
|
size_t payload_buffer_size,
|
|
size_t payload_buffer_alignment,
|
|
int num_elements_to_alloc,
|
|
int max_elements_to_alloc,
|
|
int num_elements_per_alloc,
|
|
struct mca_mpool_base_module_t *mpool,
|
|
int mpool_reg_flags,
|
|
void *unused0,
|
|
opal_free_list_item_init_fn_t item_init,
|
|
void *ctx);
|
|
|
|
/************************************************************************/
|
|
|
|
#else
|
|
# error OMPI version too old (< 1.7)
|
|
#endif
|
|
|
|
/************************************************************************
|
|
* Common to all versions
|
|
************************************************************************/
|
|
|
|
/* Forward declare to avoid #include ordering complications */
|
|
struct opal_btl_usnic_modex_t;
|
|
|
|
void usnic_compat_modex_send(int *rc,
|
|
mca_base_component_t *component,
|
|
struct opal_btl_usnic_modex_t *modexes,
|
|
size_t size);
|
|
|
|
void usnic_compat_modex_recv(int *rc,
|
|
mca_base_component_t *component,
|
|
opal_proc_t *proc,
|
|
struct opal_btl_usnic_modex_t **modexes,
|
|
size_t *size);
|
|
|
|
uint64_t usnic_compat_rte_hash_name(opal_process_name_t *pname);
|
|
const char *usnic_compat_proc_name_print(opal_process_name_t *pname);
|
|
|
|
/************************************************************************/
|
|
|
|
/* BTL 2.0 vs 3.0 compatibilty functions (specifically: some BTL API
|
|
functions changed signatures between 2.0 and 3.0) */
|
|
|
|
struct mca_btl_base_module_t;
|
|
struct mca_btl_base_endpoint_t;
|
|
|
|
/* BTL 2.0 (i.e., v1.7/v1.8, but listed separately because these are
|
|
really BTL API issues) */
|
|
|
|
#if BTL_VERSION == 20
|
|
|
|
#include "ompi/mca/btl/btl.h"
|
|
|
|
/* This function changed signature in BTL 3.0 */
|
|
mca_btl_base_descriptor_t*
|
|
opal_btl_usnic_prepare_src(
|
|
struct mca_btl_base_module_t* base_module,
|
|
struct mca_btl_base_endpoint_t* endpoint,
|
|
struct mca_mpool_base_registration_t* registration,
|
|
struct opal_convertor_t* convertor,
|
|
uint8_t order,
|
|
size_t reserve,
|
|
size_t* size,
|
|
uint32_t flags);
|
|
|
|
/* This function no longer exists in BTL 3.0 */
|
|
mca_btl_base_descriptor_t*
|
|
opal_btl_usnic_prepare_dst(
|
|
struct mca_btl_base_module_t* base_module,
|
|
struct mca_btl_base_endpoint_t* endpoint,
|
|
struct mca_mpool_base_registration_t* registration,
|
|
struct opal_convertor_t* convertor,
|
|
uint8_t order,
|
|
size_t reserve,
|
|
size_t* size,
|
|
uint32_t flags);
|
|
|
|
/* This function changed signature in BTL 3.0 */
|
|
int
|
|
opal_btl_usnic_put(
|
|
struct mca_btl_base_module_t *btl,
|
|
struct mca_btl_base_endpoint_t *endpoint,
|
|
struct mca_btl_base_descriptor_t *desc);
|
|
|
|
/************************************************************************/
|
|
|
|
/* BTL 3.0 (i.e., >=v1.9, but listed separately because these are
|
|
really BTL API issues) */
|
|
|
|
#elif BTL_VERSION == 30
|
|
|
|
#include "opal/mca/btl/btl.h"
|
|
|
|
/* This function changed signature compared to BTL 2.0 */
|
|
struct mca_btl_base_descriptor_t *
|
|
opal_btl_usnic_prepare_src(struct mca_btl_base_module_t *base_module,
|
|
struct mca_btl_base_endpoint_t *endpoint,
|
|
struct opal_convertor_t *convertor,
|
|
uint8_t order,
|
|
size_t reserve,
|
|
size_t *size,
|
|
uint32_t flags);
|
|
|
|
/* This function changed signature compared to BTL 2.0 */
|
|
int
|
|
opal_btl_usnic_put(struct mca_btl_base_module_t *base_module,
|
|
struct mca_btl_base_endpoint_t *endpoint,
|
|
void *local_address, uint64_t remote_address,
|
|
struct mca_btl_base_registration_handle_t *local_handle,
|
|
struct mca_btl_base_registration_handle_t *remote_handle,
|
|
size_t size, int flags, int order,
|
|
mca_btl_base_rdma_completion_fn_t cbfunc,
|
|
void *cbcontext, void *cbdata);
|
|
|
|
#endif /* BTL_VERSION */
|
|
|
|
#endif /* BTL_USNIC_COMPAT_H */
|