2

我们的应用是:

  1. 硬件配置是运行 Windows 7/64 位的双 Xeon 服务器。每个 Xeon 都有自己的 12gb RAM,采用 [NUMA][1] 配置,通过桥接将两个内存区域连接在一起。
  2. 所有软件均使用 VS2008 用 c++ 编写并编译为 64 位应用程序。
  3. Generation 应用程序会创建一个大型共享内存 (4-6gb) 区域,该区域只能由设置为在第一个 Xeon 处理器上运行的处理器亲和性的进程访问。
  4. 接收应用程序会创建一个大型共享内存区域 (2-4gb),该区域主要由具有处理器亲和性的进程使用,以在第二个 Xeon 处理器上运行。但是,当 Generation App 完成构建一组数据(32mb 到 128mb)时,它会将这些信息传输到在此 Xeon 上运行的共享内存区域。
  5. 我们正在使用 Boost Interprocess 库来管理我们的共享内存区域。

我的问题是,当每个创建它的共享内存区域的进程时,Windows 是否在创建它的同一个 Xeon 芯片上分配该内存?或者我应该使用 Numa 内存功能之一将内存明确分配给特定的 Xeon 芯片吗?


编辑 - 帮助澄清 NUMA 是什么,来自维基百科 -

非统一内存访问或非统一内存架构 (NUMA) 是用于多处理器的计算机内存设计,其中内存访问时间取决于相对于处理器的内存位置。在NUMA下,一个处理器可以比非本地内存更快地访问自己的本地内存,即另一个处理器本地的内存或处理器之间共享的内存。处理器之间。

链接是http://en.wikipedia.org/wiki/Non-Uniform_Memory_Access了解更多详情。对我来说,随着多处理变得越来越普遍,这是我们都必须了解更多的事情之一。

[1]: http: //msdn.microsoft.com/en-us/library/aa363804%28VS.85%29.aspx处理器之间。

4

1 回答 1

1

Windows 将为请求线程分配本地内存;但是,本地不是 Microsoft 指定的。本地可能是三个选项之一:线程的理想处理器、线程的处理器关联掩码或线程的当前处理器(我忘记了当前的实现是什么)。

本质上,答案是肯定的;但是,一个常见的问题是从未关联的“控制器线程”分配所有内存,因此内存靠近控制器而不是具有特定关联的线程。

于 2010-09-20T03:34:18.257 回答