📄 mpool.h
字号:
/** * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana * University Research and Technology * Corporation. All rights reserved. * Copyright (c) 2004-2005 The University of Tennessee and The University * of Tennessee Research Foundation. All rights * reserved. * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, * University of Stuttgart. All rights reserved. * Copyright (c) 2004-2005 The Regents of the University of California. * All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow * * $HEADER$ *//** * @file * Description of the Memory Pool framework */#ifndef MCA_MPOOL_H#define MCA_MPOOL_H#include "opal/mca/mca.h"#include "ompi/info/info.h"#include "ompi/class/ompi_free_list.h" #include "ompi/class/ompi_pointer_array.h" #define MCA_MPOOL_FLAGS_CACHE_BYPASS 0x1#define MCA_MPOOL_FLAGS_PERSIST 0x2 #define MCA_MPOOL_FLAGS_MPI_ALLOC_MEM 0x4struct mca_mpool_base_resources_t;struct mca_mpool_base_registration_t { ompi_free_list_item_t super; struct mca_mpool_base_module_t *mpool; unsigned char* base; unsigned char* bound; unsigned char* alloc_base; int32_t ref_count; uint32_t flags;}; typedef struct mca_mpool_base_registration_t mca_mpool_base_registration_t; OMPI_DECLSPEC OBJ_CLASS_DECLARATION(mca_mpool_base_registration_t); /** * component initialize */typedef struct mca_mpool_base_module_t* (*mca_mpool_base_component_init_fn_t)( struct mca_mpool_base_resources_t*);/** * allocate function typedef */typedef void* (*mca_mpool_base_module_alloc_fn_t)( struct mca_mpool_base_module_t* mpool, size_t size, size_t align, uint32_t flags, mca_mpool_base_registration_t** registration); /** * realloc function typedef */typedef void* (*mca_mpool_base_module_realloc_fn_t)( struct mca_mpool_base_module_t* mpool, void* addr, size_t size, mca_mpool_base_registration_t** registration); /** * free function typedef */typedef void (*mca_mpool_base_module_free_fn_t)( struct mca_mpool_base_module_t* mpool, void *addr, mca_mpool_base_registration_t* registration); /** * register memory */typedef int (*mca_mpool_base_module_register_fn_t)( struct mca_mpool_base_module_t* mpool, void * addr, size_t size, uint32_t flags, mca_mpool_base_registration_t** registration); /** * deregister memory */typedef int (*mca_mpool_base_module_deregister_fn_t)( struct mca_mpool_base_module_t* mpool, mca_mpool_base_registration_t* registration);/** * find registration in this memory pool */ typedef int (*mca_mpool_base_module_find_fn_t) ( struct mca_mpool_base_module_t* mpool, void* addr, size_t size, mca_mpool_base_registration_t **reg);/** * release registration */ typedef int (*mca_mpool_base_module_release_fn_t) ( struct mca_mpool_base_module_t* mpool, mca_mpool_base_registration_t* registration); /** * release memory region */typedef int (*mca_mpool_base_module_release_memory_fn_t) ( struct mca_mpool_base_module_t* mpool, void *base, size_t size);/** * if appropriate - returns base address of memory pool */typedef void* (*mca_mpool_base_module_address_fn_t)(struct mca_mpool_base_module_t* mpool);/** * finalize */typedef void (*mca_mpool_base_module_finalize_fn_t)(struct mca_mpool_base_module_t*);/** * mpool component descriptor. Contains component version information * and open/close/init functions. */struct mca_mpool_base_component_1_0_0_t { mca_base_component_t mpool_version; /**< version */ mca_base_component_data_1_0_0_t mpool_data;/**< metadata */ mca_mpool_base_component_init_fn_t mpool_init; /**< init function */};/** * Convenience typedef. */typedef struct mca_mpool_base_component_1_0_0_t mca_mpool_base_component_1_0_0_t;/** * Convenience typedef */typedef struct mca_mpool_base_component_1_0_0_t mca_mpool_base_component_t;/** * mpool module descriptor. Contains the interface functions exported * by the component. This does not expose memory management * details. */struct mca_mpool_base_module_t { mca_mpool_base_component_t *mpool_component; /**< component stuct */ mca_mpool_base_module_address_fn_t mpool_base; /**< returns the base address */ mca_mpool_base_module_alloc_fn_t mpool_alloc; /**< allocate function */ mca_mpool_base_module_realloc_fn_t mpool_realloc; /**< reallocate function */ mca_mpool_base_module_free_fn_t mpool_free; /**< free function */ mca_mpool_base_module_register_fn_t mpool_register; /**< register memory */ mca_mpool_base_module_deregister_fn_t mpool_deregister; /**< deregister memory */ mca_mpool_base_module_find_fn_t mpool_find; /**< find regisrations in the cache */ mca_mpool_base_module_release_fn_t mpool_release; /**< release a registration from the cache */ mca_mpool_base_module_release_memory_fn_t mpool_release_memory; /**< release memor region from the cache */ mca_mpool_base_module_finalize_fn_t mpool_finalize; /**< finalize */ struct mca_rcache_base_module_t *rcache; /* the rcache associated with this mpool */ uint32_t flags; /**< mpool flags */};/** * Convenience typedef */typedef struct mca_mpool_base_module_t mca_mpool_base_module_t;/** * Function to allocate special memory according to what the user requests in * the info object. * * If the user passes in a valid info structure then the function will * try to allocate the memory and register it with every mpool that there is a * key for it in the info struct. If it fails at registering the memory with * one of the requested mpools, an error will be returned. Also, if there is a * key in info that does not match any mpool, an error will be returned. * * If the info parameter is MPI_INFO_NULL, then this function will try to allocate * the memory and register it wih as many mpools as possible. However, * if any of the registratons fail the mpool will simply be ignored. * * @param size the size of the memory area to allocate * @param info an info object which tells us what kind of memory to allocate * * @retval pointer to the allocated memory * @retval NULL on failure */OMPI_DECLSPEC void * mca_mpool_base_alloc(size_t size, struct ompi_info_t * info);/** * Function to free memory previously allocated by mca_mpool_base_alloc * * @param base pointer to the memory to free * * @retval OMPI_SUCCESS * @retval OMPI_ERR_BAD_PARAM if the passed base pointer was invalid */OMPI_DECLSPEC int mca_mpool_base_free(void * base); /** * Function for the red black tree to compare 2 keys * * @param key1 a pointer to the 1st key * @param key2 a pointer to the second key * * @retval -1 if key1 is below key2 * @retval 1 if key 1 is above key2 * @retval 0 if the keys are the same */OMPI_DECLSPEC int mca_mpool_base_tree_node_compare(void * key1, void * key2);OMPI_DECLSPEC int mca_mpool_base_insert( void * addr, size_t size, mca_mpool_base_module_t* mpool, void* user_in, mca_mpool_base_registration_t* registration); OMPI_DECLSPEC int mca_mpool_base_remove(void * base); /** * Macro for use in components that are of type mpool v1.0.0 */#define MCA_MPOOL_BASE_VERSION_1_0_0 \ /* mpool v1.0 is chained to MCA v1.0 */ \ MCA_BASE_VERSION_1_0_0, \ /* mpool v1.0 */ \ "mpool", 1, 0, 0#endif /* MCA_MPOOL_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -