Windows 7中的NUMA内存区域分配

时间:2010-09-17 16:34:35

标签: c++ visual-studio-2008 windows-7 numa

我们的申请是:

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

1 个答案:

答案 0 :(得分:1)

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

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