我已经设置了我的代码,以便在我的NUMA系统上本地小心地加载和处理数据.我认为.也就是说,出于调试目的,我真的希望能够使用在许多其他函数设置的特定函数内访问的指针地址来直接识别内存指向的NUMA节点.正在居住,所以我可以检查一切都在它应该位于的位置.这可能吗?
我在msdn http://social.msdn.microsoft.com/Forums/en-US/parallelcppnative/thread/37a02e17-e160-48d9-8625-871ff6b21f72上找到了同样的请求,但答案是使用QueryWorkingSetEx()似乎是Windows特定的.这可以在Linux上完成吗?确切地说,我正在使用Debian Squeeze.
谢谢.
当我使用 numa_alloc_onnode() 在特定 NUMA 节点上分配内存时,如下所示:
char *ptr;
if ((ptr = (char *) numa_alloc_onnode(1024,1)) == NULL) {
fprintf(stderr,"Problem in %s line %d allocating memory\n",__FILE__,__LINE__);
return(1);
}
Run Code Online (Sandbox Code Playgroud)
然后使用 move_pages() 尝试确认分配的内存确实位于节点 1 上:
printf("ptr is on node %d\n",get_node(ptr));
Run Code Online (Sandbox Code Playgroud)
在哪里
// This function returns the NUMA node that a pointer address resides on.
int get_node(void *p)
{
int status[1];
void *pa;
unsigned long a;
// round p down to the nearest page boundary
a = (unsigned long) p;
a = a - (a % …Run Code Online (Sandbox Code Playgroud)