【问题标题】:How to instantiate C++ objects on specific NUMA memory nodes?如何在特定的 NUMA 内存节点上实例化 C++ 对象?
【发布时间】:2014-04-17 20:20:16
【问题描述】:

简单的 C 代码可以使用libnuma 库在 NUMA 系统中的特定内存节点中分配内存。例如,可以使用以下函数来完成:

void *numa_alloc_onnode(size_t size, int node)

如何在某个内存节点中实例化一个类?我能想到的一种方法是:

numa_set_membind(<nodemask>);
o = new Object();
numa_set_localalloc();

这行得通吗?

【问题讨论】:

    标签: c++ numa


    【解决方案1】:

    Placement new 是您正在寻找的。示例:

    void *blob = numa_alloc_onnode(sizeof(Object), ...);
    Object *object = new(blob) Object;
    

    【讨论】:

    • 虽然请注意对齐要求。
    • 你如何解除分配?
    • 另外,显然必须免费使用numa_free(),所以要完整:object-&gt;~Object(); numa_free(blob);
    • @BenVoigt:如何正确对齐?
    • @shoban 这是一个stackoverflow 问题,关于如何使用 numa 进行对齐分配
    猜你喜欢
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    相关资源
    最近更新 更多