さまざまなポリシーに基づいてメモリを割り当てるさまざまな手段を提供するカスタム アロケータがいくつかあります。それらの 1 つは、定義された 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()
ました。
考えられる解決策は次の 2 つです。
memcpy()
新しいメモリ領域とデータを割り当てます- ノードセットのメモリ割り当て/バインディング ポリシーを設定するために使用
hwloc_set_membind_nodeset()
し、plainmalloc()
/posix_memalign()
andを使用しrealloc()
ます。
誰かがこれを正しくするのを手伝ってくれますか?
アップデート:
質問をより具体的にしようとしています。新しいメモリを割り当てたり、ページを移動したりせずに、realloc()
使用を実行する可能性はありますか?hwloc