首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NUMA会影响内存带宽,还是只影响延迟?

NUMA会影响内存带宽,还是只影响延迟?
EN

Stack Overflow用户
提问于 2020-04-30 10:57:29
回答 1查看 1.3K关注 0票数 3

我有一个问题,就是内存带宽有限--我需要顺序从RAM读取大量数据(很多GB),进行一些快速处理,然后顺序地将其写入RAM中的不同位置。内存延迟不是一个问题。

在不同的NUMA区域中将工作划分为两个或多个核有什么好处吗?同样地,跨区域工作会减少可用带宽吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-22 16:37:58

对于带宽受限的多线程代码,NUMA系统中的行为将主要取决于“本地”每个线程的数据访问是如何的,其次将取决于远程访问的细节。

在典型的2套接字服务器系统中,两个NUMA节点可用的本地内存带宽是单个节点可用的两倍。(但请记住,可能需要在多个内核上运行多个线程,才能达到每个套接字的渐近带宽。)

例如,流基准通常在允许每个线程的几乎所有访问都是“本地”的配置中运行。这是通过假设“第一次触摸”NUMA位置来实现的--当第一次写入分配的内存时,操作系统必须创建从进程虚拟地址空间到物理地址的映射,并且(默认情况下) OS选择位于执行存储指令的核心NUMA节点中的物理地址。

在大多数系统中,“本地”带宽(到DRAM)大约是对称的(用于读写),并且相对容易理解。“远程”带宽对于读写来说要不对称得多,在芯片之间的读/写命令和在芯片之间移动的数据之间通常存在显著的争用。本地带宽与远程带宽的总体比例在不同处理器代之间也有很大差异。对于某些处理器(例如,Xeon E5 v3和可能的v4)来说,互连相对较快,因此局部性较差的作业通常可以在两个套接字之间交错的所有内存中运行。自那时以来,本地带宽显著增加,最近的处理器普遍强烈支持本地访问。

来自Intel Xeon白金8160的例子(芯片之间的两个UPI链接):

  • 读取的本地带宽(每个套接字) ~112 GB/s
  • 远程读取带宽(每次一个方向) ~34 GB/s
  • 本地带宽在两个套接字系统中很好地扩展,而当使用两个套接字(每个套接字从另一个套接字读取数据)时,远程带宽也很好地扩展。

由于从节点0到节点1的读通信量与从节点1到节点0的写通信量等竞争,使得套接字之间的读写业务更加复杂。

  • 1R:1W (每个套接字) ~101 GB/s的本地带宽(由于读写调度开销而减少)
  • 1R:1W (每次运行一个套接字) ~50 GB/s的远程带宽-更多的带宽是可用的,因为两个方向都在使用,但这也意味着如果两个套接字都在做相同的事情,就会发生冲突。当两个套接字同时运行1R:1W远程时,我看到的聚合不到60 GB/s。

当然,本地访问与远程访问的不同比例将改变缩放。定时也可能是一个问题--如果线程同时进行本地访问,那么远程访问同时进行,则远程访问部分中会出现更多争用(与线程在不同时间进行远程访问相比)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61521821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档