私は、さまざまなポリシーに基づいてメモリを割り当てるためのさまざまな手段を提供するカスタムアロケータをいくつか持っています。そのうちの1人は、定義されたNUMAノードにメモリを割り当てます。アロケータへのインタフェースは、ストレートフォワードであるHWLOCを使用するNUMAシステム用のrealloc()
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){}
};
割り当て自体が割り当てポリシー等Howver、hwlocのみ割り当てとfree'ingメモリおよびIのための方法を提供するために設定によるパラメータでhwloc_alloc_membind_nodeset()
方法を用いて処理されreallocate()
をどのように実装すればよいか不思議に思っていました。
2つの解決策:
- ノードセットのメモリ割り当て/バインディングポリシーを設定し、無地
malloc()
/posix_memalign()
とrealloc()
を使用するために、データ - 使用
hwloc_set_membind_nodeset()
を新しいメモリ領域を確保してmemcpy()
。
誰でもこの権利を得るのを助けることができますか?
更新:
私は質問をより具体的にするために試してみてください。新しいメモリを割り当て、周りにページを移動せずにhwloc
を使用してrealloc()
を実行する可能性はありますか?
libnumaを直接使うのはどうですか? http://linux.die.net/man/3/numa – osgx
'libnuma'は間違った結果を出すかもしれないので(numaノードの間違ったcpuバインディングを表示するなど)、代わりに' hwloc'を使うことを望んでいました。 https://gist.github.com/1125022 – grundprinzip
Hmm ..メモリバインディングの設定はノード固有ですか?したがって、ノード5が所有するメモリ上のreallocを呼び出した場合、libcのreallocは同じノードのメモリ割り当てを行いますか? – osgx