1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 
  23 
  24 
  25 
  26 #ifndef MCA_MPOOL_MEMKIND_H
  27 #define MCA_MPOOL_MEMKIND_H
  28 
  29 #include "opal_config.h"
  30 
  31 #include "opal/mca/event/event.h"
  32 #include "opal/mca/mpool/mpool.h"
  33 
  34 #include "opal/mca/allocator/allocator.h"
  35 #include <memkind.h>
  36 
  37 BEGIN_C_DECLS
  38 
  39 static const int mca_mpool_memkind_default_pagesize = 4096;
  40 
  41 
  42 struct mca_mpool_memkind_module_t {
  43     mca_mpool_base_module_t super;
  44     memkind_t kind;
  45     memkind_memtype_t type;
  46     memkind_policy_t  policy;
  47     memkind_bits_t    memkind_bits;
  48     int page_size;
  49 };
  50 
  51 typedef struct mca_mpool_memkind_module_t mca_mpool_memkind_module_t;
  52 
  53 struct mca_mpool_memkind_module_le_t {
  54     opal_list_item_t super;
  55     mca_mpool_memkind_module_t module;
  56 };
  57 typedef struct mca_mpool_memkind_module_le_t mca_mpool_memkind_module_le_t;
  58 
  59 OBJ_CLASS_DECLARATION(mca_mpool_memkind_module_le_t);
  60 
  61 struct mca_mpool_memkind_component_t {
  62     mca_mpool_base_component_t super;
  63     int  hbw;
  64     int  pagesize;
  65     int  bind;
  66     memkind_memtype_t default_type;
  67     memkind_policy_t  default_policy;
  68     memkind_bits_t    default_memkind_bits;
  69     memkind_t         default_kind;
  70     int  priority;
  71     int  output;
  72     opal_list_t module_list;
  73 };
  74 
  75 typedef struct mca_mpool_memkind_component_t mca_mpool_memkind_component_t;
  76 OPAL_MODULE_DECLSPEC extern mca_mpool_memkind_component_t mca_mpool_memkind_component;
  77 
  78 
  79 
  80 
  81 
  82 void mca_mpool_memkind_module_init(mca_mpool_memkind_module_t *mpool);
  83 
  84 
  85 
  86 
  87 
  88 void* mca_mpool_memkind_alloc(
  89     mca_mpool_base_module_t* mpool,
  90     size_t size,
  91     size_t align,
  92     uint32_t flags);
  93 
  94 
  95 
  96 
  97 void* mca_mpool_memkind_realloc(
  98     mca_mpool_base_module_t* mpool,
  99     void* addr,
 100     size_t size);
 101 
 102 
 103 
 104 
 105 void mca_mpool_memkind_free(
 106     mca_mpool_base_module_t* mpool,
 107     void * addr);
 108 
 109 END_C_DECLS
 110 
 111 #endif