【发布时间】:2013-11-06 13:42:29
【问题描述】:
我有一台有 2 个 CPU 和 64GB 内存的服务器,每个 CPU 32GB。
我知道每个 CPU 都有自己的 RAM 部分,我们称它们为 RAM1 和 RAM2。我想让我的程序知道它在哪个 RAM(RAM1 或 RAM2)上分配它的数据。
我试图检查指针值:
// put the thread at i-th CPU, using pthread_setaffinity_np
TData *a = new TData[N];
...
cout << "CPU = " << i << " adress = " << a << endl;
但输出看起来是随机的。我想那是因为地址是虚拟的。虚拟内存地址和部分RAM有对应关系吗?
如何检查我的数组“a”分配到了哪个 RAM?
【问题讨论】:
-
可能的重复项看起来很相关,可能会解决@klm123 的问题。然而,问题是不同的。这个问题是关于如何在分配内存之后检查,这个问题是关于预先指定内存应该分配到哪里。
-
@perreal,我看到了这个问题并回答了它。它如何回答我的问题?
-
@klm123,据我从答案中了解到,您尝试做的已经是默认行为。但是,如果您真的想验证本地分配,那么很抱歉投票结束。
-
@perreal,是的,我想知道一种方法来验证这一点,因为看起来我的内存分配有问题。我的 CPU 随机完全或部分加载。可能是原因不同,我想确定一下。
标签: c++ multithreading virtual-memory numa