1
1
openmpi/opal/mca/btl/usnic/btl_usnic_compat.h
Jeff Squyres 9c19dd4e5b usnic: make v1.10 and v2.0 fit in version checking scheme
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.
2015-05-26 18:42:33 -07:00

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 */