我有几个自定义分配器,它们根据不同的策略提供不同的内存分配方式。其中一个分配器在已定义的NUMA节点上分配内存。分配器的接口很直观。
template<typename config>
class NumaNodeStrategy
{
public:
static void *allocate(const size_t sz){}
static void *reallocate(void *old, size_t sz, size_t old_sz){}
static void deallocate(void *p, size_t sz){}
};
使用
hwloc_alloc_membind_nodeset()
方法和相关参数设置分配策略来处理分配本身。然而,hwloc仅提供内存分配和释放方法,我想知道如何实现reallocate()
。两种可能的解决方案:
1.分配新内存区域并使用
memcpy()
复制数据。
2.使用hwloc_set_membind_nodeset()
为节点集设置内存分配/绑定策略,使用普通的malloc()
/posix_memalign()
和realloc()
。有人能帮我正确理解吗?
更新: 我试图让问题更具体:是否有可能使用
hwloc
执行realloc()
而无需分配新内存并移动页面?
libnuma
可能会产生错误的结果(显示错误的NUMA节点CPU绑定等),我希望使用hwloc
代替。https://gist.github.com/1125022 - grundprinzip