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 + -
显示快捷键?