gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:36:59 29 4
gpt4 key购买 nike

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

在不同 NUMA 区域中的两个或多个内核之间分配工作有什么好处吗?同样,跨区域工作是否会减少可用带宽?

最佳答案

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

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

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

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

来自 Intel Xeon Platinum 8160 的示例(芯片之间有 2 个 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。

当然,本地访问与远程访问的不同比例会改变比例。时间也可能是一个问题——如果线程同时进行本地访问,然后同时进行远程访问,那么远程访问部分将会有更多的争用(与线程进行它们的情况相比)不同时间的远程访问)。

关于numa - NUMA 会影响内存带宽,还是只会影响延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61521821/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com