bml.h

来自「MPI stands for the Message Passing Inter」· C头文件 代码 · 共 653 行 · 第 1/2 页

H
653
字号
static inline void mca_bml_base_prepare_dst(mca_bml_base_btl_t* bml_btl,                                             mca_mpool_base_registration_t* reg,                                             struct ompi_convertor_t* conv,                                             size_t reserve,                                             size_t *size,                                             mca_btl_base_descriptor_t** des) {     *des = bml_btl->btl_prepare_dst(                                   bml_btl->btl,                                    bml_btl->btl_endpoint,                                    reg,                                    conv,                                   reserve,                                   size                                   );    if((*des) != NULL) {         (*des)->des_context = (void*) bml_btl;      }}#if OMPI_HAVE_THREAD_SUPPORT#define MCA_BML_BASE_BTL_DES_ALLOC(bml_btl, des, alloc_size, seg_size)  \    do {                                                                \        if( NULL != (des = bml_btl->btl_cache) ) {                      \            /* atomically acquire the cached descriptor */              \            if(opal_atomic_cmpset_ptr(&bml_btl->btl_cache,              \                                      des, NULL) == 0) {                \                des = bml_btl->btl_alloc(bml_btl->btl, alloc_size);     \            }                                                           \        } else {                                                        \            des = bml_btl->btl_alloc(bml_btl->btl, alloc_size);         \        }                                                               \        if(des != NULL) {                                               \            des->des_src->seg_len = seg_size;                           \            des->des_context = (void*) bml_btl;                         \        }                                                               \    } while(0)#else#define MCA_BML_BASE_BTL_DES_ALLOC(bml_btl, des, alloc_size, seg_size)  \    do {                                                                \        if( NULL != (des = bml_btl->btl_cache) ) {                      \            bml_btl->btl_cache = NULL;                                  \        } else {                                                        \            des = bml_btl->btl_alloc(bml_btl->btl, alloc_size);         \        }                                                               \        if(des != NULL) {                                               \            des->des_src->seg_len = seg_size;                           \            des->des_context = (void*) bml_btl;                         \        }                                                               \    } while(0)#endif  /* OMPI_HAVE_THREAD_SUPPORT *//** * Return a descriptor */#if OMPI_HAVE_THREAD_SUPPORT#define MCA_BML_BASE_BTL_DES_RETURN( bml_btl, descriptor )              \    do {                                                                \        if( opal_atomic_cmpset_ptr(&bml_btl->btl_cache,                 \                                   NULL,descriptor) == 0 ) {            \            bml_btl->btl_free( bml_btl->btl, descriptor );              \        }                                                               \    } while (0)#else#define MCA_BML_BASE_BTL_DES_RETURN( bml_btl, descriptor ) \    do {                                                   \        if( NULL == bml_btl->btl_cache ) {                 \            bml_btl->btl_cache = descriptor;               \        } else {                                           \            bml_btl->btl_free( bml_btl->btl, descriptor ); \        }                                                  \    } while(0)#endif  /* OMPI_HAVE_THREAD_SUPPORT *//* *  BML component interface functions and datatype. *//** * MCA->BML Initializes the BML component and creates specific BML * module(s). * * @param num_bmls (OUT) Returns the number of bml modules created, or 0 *                       if the transport is not available. * * @param enable_progress_threads (IN) Whether this component is * allowed to run a hidden/progress thread or not. * * @param enable_mpi_threads (IN) Whether support for multiple MPI * threads is enabled or not (i.e., MPI_THREAD_MULTIPLE), which * indicates whether multiple threads may invoke this component * simultaneously or not. * * @return Array of pointers to BML modules, or NULL if the transport   *         is not available. * * During component initialization, the BML component should discover * the physical devices that are available for the given transport, * and create a BML module to represent each device. Any addressing  * information required by peers to reach the device should be published  * during this function via the mca_base_modex_send() interface.  * */typedef struct mca_bml_base_module_t* (*mca_bml_base_component_init_fn_t)(                                                                          int* priority,                                                                          bool enable_progress_threads,                                                                          bool enable_mpi_threads                                                                          );/** * MCA->BML Called to progress outstanding requests for * non-threaded polling environments. * * @param tstamp     Current time. * @return           OMPI_SUCCESS or error code on failure. */typedef int (*mca_bml_base_module_progress_fn_t)(void);/** *  BML component descriptor. Contains component version information *  and component open/close/init functions. */struct mca_bml_base_component_1_0_0_t {  mca_base_component_t bml_version;  mca_base_component_data_1_0_0_t bml_data;  mca_bml_base_component_init_fn_t bml_init;    };typedef struct mca_bml_base_component_1_0_0_t mca_bml_base_component_1_0_0_t;typedef struct mca_bml_base_component_1_0_0_t mca_bml_base_component_t;/* * BML module interface functions and datatype. *//** * MCA->BML Clean up any resources held by BML module  * before the module is unloaded. *   * @param bml (IN)   BML module. * * Prior to unloading a BML module, the MCA framework will call  * the BML finalize method of the module. Any resources held by  * the BML should be released and if required the memory corresponding * to the BML module freed. *  */typedef int (*mca_bml_base_module_finalize_fn_t)( void );                                                                                                         /** * PML->BML notification of change in the process list.  * * @param nprocs (IN)         Number of processes * @param procs (IN)          Set of processes * @param endpoint (OUT)      Set of (optional) mca_bml_base_endpoint_t structures by BML. * @param reachable (OUT)     Bitmask indicating set of peer processes that are reachable by this BML. * @return                    OMPI_SUCCESS or error status on failure. * * The mca_bml_base_module_add_procs_fn_t() is called by the PML to  * determine the set of BMLs that should be used to reach each process. * Any addressing information exported by the peer via the mca_base_modex_send() * function should be available during this call via the corresponding  * mca_base_modex_recv() function. The BML may utilize this information to  * determine reachability of each peer process.  * * For each process that is reachable by the BML, the bit corresponding to the index  * into the proc array (nprocs) should be set in the reachable bitmask. The PML * provides the BML the option to return a pointer to a data structure defined * by the BML that is returned to the BML on subsequent calls to the BML data * transfer functions (e.g bml_send). This may be used by the BML to cache any addressing  * or connection information (e.g. TCP socket, IP queue pair). * * \note This function will return OMPI_ERR_UNREACH if one or more * processes can not be reached by the currently active BTLs.  This is * not a fatal error, and the calling layer is free to continue using * the BML interface. */typedef int (*mca_bml_base_module_add_procs_fn_t)(                                                  size_t nprocs,                                                  struct ompi_proc_t** procs,                                                   struct mca_bml_base_endpoint_t** endpoints,                                                  struct ompi_bitmap_t* reachable                                                  );/** * Notification of change to the process list. * * @param nprocs (IN)  Number of processes * @param proc (IN)    Set of processes * @return             Status indicating if cleanup was successful * * When the process list changes, the PML notifies the BML of the * change, to provide the opportunity to cleanup or release any * resources associated with the peer. */typedef int (*mca_bml_base_module_del_procs_fn_t)(                                                  size_t nprocs,                                                  struct ompi_proc_t** procs                                                  );/** * Notification of change to the btl list. * * @param bml (IN)     BTL module * @return             Status indicating if cleanup was successful * * On recovery of a btl, add it to the set of forwarding * entries used by the BML. */typedef int (*mca_bml_base_module_add_btl_fn_t)( struct mca_btl_base_module_t* );/** * Notification of change to the btl list. * * @param bml (IN)     BTL module * @return             Status indicating if cleanup was successful * * On failure of a btl, remove it from the set of forwarding * entries used by the BML. */typedef int (*mca_bml_base_module_del_btl_fn_t)( struct mca_btl_base_module_t* );/** * Notification of change to the btl list. * * @param bml (IN)     BTL module * @return             Status indicating if cleanup was successful * * On failure of a btl, remove it from the set of forwarding * entries used by the BML. */typedef int (*mca_bml_base_module_del_proc_btl_fn_t)(     struct ompi_proc_t*,    struct mca_btl_base_module_t* );/** * Callback function that is called asynchronously on receipt * of data by the transport layer. */typedef void (*mca_bml_base_module_recv_cb_fn_t)(                                                 mca_btl_base_module_t* bml_btl,                                                  mca_btl_base_tag_t tag,                                                 mca_btl_base_descriptor_t* descriptor,                                                 void* cbdata                                                 );/** * Register a callback function that is called on receipt * of a fragment. * * @param bml (IN)     BML module * @return             Status indicating if cleanup was successful * * When the process list changes, the PML notifies the BML of the * change, to provide the opportunity to cleanup or release any * resources associated with the peer. */typedef int (*mca_bml_base_module_register_fn_t)(                                                 mca_btl_base_tag_t tag,                                                 mca_bml_base_module_recv_cb_fn_t cbfunc,                                                 void* cbdata                                                 );/** * Register a callback function that is called of error. * * @param bml (IN)     BML module * @return             Status indicating if cleanup was successful * */typedef int (*mca_bml_base_module_register_error_cb_fn_t)(        mca_btl_base_module_error_cb_fn_t cbfunc);/** * BML module interface functions and attributes. */struct mca_bml_base_module_t {    /* BML common attributes */    mca_bml_base_component_t* bml_component; /**< pointer back to the BML component structure */    size_t      bml_eager_limit;      /**< maximum size of first fragment -- eager send */    size_t      bml_min_send_size;    /**< threshold below which the BML should not fragment */    size_t      bml_max_send_size;    /**< maximum send fragment size supported by the BML */    size_t      bml_min_rdma_size;    /**< threshold below which the BML should not fragment */    size_t      bml_max_rdma_size;    /**< maximum rdma fragment size supported by the BML */        /* BML function table */    mca_bml_base_module_add_procs_fn_t     bml_add_procs;    mca_bml_base_module_del_procs_fn_t     bml_del_procs;    mca_bml_base_module_add_btl_fn_t       bml_add_btl;    mca_bml_base_module_del_btl_fn_t       bml_del_btl;    mca_bml_base_module_del_proc_btl_fn_t  bml_del_proc_btl;    mca_bml_base_module_register_fn_t      bml_register;    mca_bml_base_module_register_error_cb_fn_t bml_register_error;    mca_bml_base_module_finalize_fn_t      bml_finalize;    mca_bml_base_module_progress_fn_t bml_progress;};typedef struct mca_bml_base_module_t mca_bml_base_module_t;/* * Macro for use in modules that are of type bml v1.0.0 */#define MCA_BML_BASE_VERSION_1_0_0 \  /*  v1.0 is chained to MCA v1.0 */ \  MCA_BASE_VERSION_1_0_0, \  /* bml v1.0 */ \  "bml", 1, 0, 0#endif /* OMPI_MCA_BML_H */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?