/* * numaalloc.h * * Created on: Jan 6, 2015 * Author: gregor */ #ifndef GLTB_NUMAMEMORY_H_ #define GLTB_NUMAMEMORY_H_ namespace gltb { void *numAllocLocal(unsigned long long size); void *numaAllocOnNode(unsigned int node, unsigned long long size); void numaFree(void *pointer, unsigned long long size); template class NumaArray { public: NumaArray() : node(-1), size(0), array(nullptr) { } NumaArray(unsigned int node, unsigned long long size) : node(node), size(size) { array = (T*) numaAllocOnNode(node, size * sizeof(T)); } ~NumaArray() { if(array != nullptr) { numaFree(array, size * sizeof(T)); } } void allocate(unsigned int node, unsigned long long size) { if(array != nullptr) { numaFree(array, this->size * sizeof(T)); } array = (T*) numaAllocOnNode(node, size * sizeof(T)); this->node = node; this->size = size; } T &operator[] (unsigned long long index) { return array[index]; } private: unsigned int node; unsigned long long size; T *array; }; } #endif /* GLTB_NUMAMEMORY_H_ */