1
1
openmpi/ompi/mca/bcol/iboffload/bcol_iboffload_qp_info.h
Pavel Shamis b89f8fabc9 Adding Hierarchical Collectives project to the Open MPI trunk.
The project includes following components and frameworks: 
- ML Collective component
- NETPATTERNS and COMMPATTERNS common components
- BCOL framework
- SBGP framework

Note: By default the ML collective component is disabled. In order to enable
new collectives user should bump up the priority of ml component (coll_ml_priority)

=============================================

Primary Contributors (in alphabetical order):

Ishai Rabinovich (Mellanox)
Joshua S. Ladd (ORNL / Mellanox)
Manjunath Gorentla Venkata (ORNL)
Mike Dubman (Mellanox)
Noam Bloch (Mellanox)
Pavel (Pasha) Shamis (ORNL / Mellanox)
Richard Graham (ORNL / Mellanox)
Vasily Filipov (Mellanox)

This commit was SVN r27078.
2012-08-16 19:11:35 +00:00

128 строки
4.3 KiB
C

/*
* Copyright (c) 2009-2012 Oak Ridge National Laboratory. All rights reserved.
* Copyright (c) 2009-2012 Mellanox Technologies. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
/*
* In order to add a new QP you need to do next steps:
*
* 1) Add new index to enum with list of the all QPs,
* MCA_BCOL_IBOFFLOAD_QP_NEW_QP e.g.
*
* 2) In the setup_qps_fn array init MCA_BCOL_IBOFFLOAD_QP_NEW_QP
* index with your init func for this QP.
*
* 3) In the init func you added init the next func pointers:
* a) config_qp - in this func you need to fill in ibv_qp_init_attr
* structure will be used for this QP creation.
*
* b) prepost_recv - you have to specify this poiner if you want
* automatically executed preposting to your new QP.
*
* c) alloc_resource - will be called during device activation,
* if you need any device resource (list of frags for example)
* for your new QP here the right place to allocate it.
*
* d) dealloc_resource - if any resource was allocated dynamically
* by alloc_resource func destruct it in this func.
*
* e) get_preposted_recv - the function returns preposted recieve for 'wait task'.
*
* d) If you don't need any of these funcs you have to init appropriate pointer with NULL.
*/
#ifndef MCA_BCOL_IBOFFLOAD_QP_INFO_H
#define MCA_BCOL_IBOFFLOAD_QP_INFO_H
#include "ompi_config.h"
BEGIN_C_DECLS
/* forward declarations */
struct mca_bcol_iboffload_device_t;
struct mca_bcol_iboffload_collreq_t;
struct mca_bcol_iboffload_qp_info_t;
struct mca_bcol_iboffload_endpoint_t;
/* The list of the all required QPs */
enum {
MCA_BCOL_IBOFFLOAD_QP_BARRIER,
MCA_BCOL_IBOFFLOAD_QP_REGULAR,
MCA_BCOL_IBOFFLOAD_QP_SYNC,
MCA_BCOL_IBOFFLOAD_QP_CREDIT,
MCA_BCOL_IBOFFLOAD_QP_LARGE_BUFF,
MCA_BCOL_IBOFFLOAD_QP_LAST
};
typedef enum {
MCA_BCOL_IBOFFLOAD_PP_QP,
MCA_BCOL_IBOFFLOAD_SRQ_QP,
MCA_BCOL_IBOFFLOAD_XRC_QP
} mca_bcol_iboffload_qp_type_t;
struct mca_bcol_iboffload_pp_qp_info_t {
int32_t rd_win;
int32_t rd_rsv;
}; typedef struct mca_bcol_iboffload_pp_qp_info_t mca_bcol_iboffload_pp_qp_info_t;
struct mca_bcol_iboffload_srq_qp_info_t {
int32_t sd_max;
}; typedef struct mca_bcol_iboffload_srq_qp_info_t mca_bcol_iboffload_srq_qp_info_t;
typedef int (*mca_bcol_iboffload_setup_qps_fn_t) (struct mca_bcol_iboffload_qp_info_t*);
typedef int (*mca_bcol_iboffload_prepost_qps_fn_t)
(struct mca_bcol_iboffload_endpoint_t *endpoint,
int qp_index, int num_to_prepost);
typedef void (*mca_bcol_iboffload_config_qps_fn_t)
(int qp_index,
struct mca_bcol_iboffload_endpoint_t *ep,
ompi_common_ofacm_base_qp_config_t *qp_config);
typedef int (*mca_bcol_iboffload_alloc_qps_resource_fn_t)
(int qp_index,
struct mca_bcol_iboffload_device_t *device);
typedef int (*mca_bcol_iboffload_dealloc_qps_resource_fn_t)
(int qp_index,
struct mca_bcol_iboffload_device_t *device);
typedef struct mca_bcol_iboffload_frag_t* (*mca_bcol_iboffload_get_preposted_recv_fn_t)
(struct mca_bcol_iboffload_endpoint_t *ep, int qp_index);
struct mca_bcol_iboffload_qp_info_t {
size_t size;
int32_t rd_num;
int32_t rd_low;
int32_t rd_pp_win; /* prepost window = rd_num - rd_low */
int qp_index;
mca_bcol_iboffload_qp_type_t type;
mca_bcol_iboffload_config_qps_fn_t config_qp;
mca_bcol_iboffload_prepost_qps_fn_t prepost_recv;
mca_bcol_iboffload_alloc_qps_resource_fn_t alloc_resource;
mca_bcol_iboffload_dealloc_qps_resource_fn_t dealloc_resource;
mca_bcol_iboffload_get_preposted_recv_fn_t get_preposted_recv;
union {
mca_bcol_iboffload_pp_qp_info_t pp_qp;
mca_bcol_iboffload_srq_qp_info_t srq_qp;
} u;
}; typedef struct mca_bcol_iboffload_qp_info_t mca_bcol_iboffload_qp_info_t;
extern mca_bcol_iboffload_setup_qps_fn_t setup_qps_fn[MCA_BCOL_IBOFFLOAD_QP_LAST];
END_C_DECLS
#endif /* MCA_BCOL_IBOFFLOAD_QP_INFO_H */