다른 정책을 기반으로 메모리를 할당하는 여러 가지 방법을 제공하는 여러 가지 맞춤 할당 기가 있습니다. 그 중 하나는 정의 된 NUMA 노드에 메모리를 할당합니다. 할당 자에 대한 인터페이스는 직선적이다NUMA 시스템에서 HWLOC를 사용하는 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()
을 어떻게 구현해야하는지 궁금합니다.
두 가지 가능한 솔루션 :
- 는 노드 집합의 메모리 할당/바인딩 정책을 설정하는 새로운 메모리 영역과
memcpy()
데이터 - 사용
hwloc_set_membind_nodeset()
을 할당하고 일반malloc()
/posix_memalign()
및realloc()
를 사용합니다.
누구든지이 권리를 얻을 수 있습니까?
업데이트 :
내가 질문을 더 구체적인 만들려고 : 새 메모리를 할당하고 주위 페이지를 이동하지 않고 realloc()
가 hwloc
를 사용하여 수행 할 가능성이 있습니까?
libnuma를 직접 사용하는 방법은 무엇입니까? http://linux.die.net/man/3/numa – osgx
libnuma는 잘못된 결과 (numa 노드에 대한 잘못된 CPU 바인딩 표시 등)를 생성 할 수 있기 때문에'hwloc'을 대신 사용하려고합니다. https://gist.github.com/1125022 – grundprinzip
흠 .. 메모리 바인딩 설정은 노드마다 다릅니 까? 따라서, 노드 5가 노드 5가 소유 한 메모리에서 realloc을 호출하면 libc의 realloc은 같은 노드의 메모리 할당을 수행합니까? – osgx