我有一个问题,就是内存带宽有限--我需要顺序从RAM读取大量数据(很多GB),进行一些快速处理,然后顺序地将其写入RAM中的不同位置。内存延迟不是一个问题。
在不同的NUMA区域中将工作划分为两个或多个核有什么好处吗?同样地,跨区域工作会减少可用带宽吗?
发布于 2020-05-22 16:37:58
对于带宽受限的多线程代码,NUMA系统中的行为将主要取决于“本地”每个线程的数据访问是如何的,其次将取决于远程访问的细节。
在典型的2套接字服务器系统中,两个NUMA节点可用的本地内存带宽是单个节点可用的两倍。(但请记住,可能需要在多个内核上运行多个线程,才能达到每个套接字的渐近带宽。)
例如,流基准通常在允许每个线程的几乎所有访问都是“本地”的配置中运行。这是通过假设“第一次触摸”NUMA位置来实现的--当第一次写入分配的内存时,操作系统必须创建从进程虚拟地址空间到物理地址的映射,并且(默认情况下) OS选择位于执行存储指令的核心NUMA节点中的物理地址。
在大多数系统中,“本地”带宽(到DRAM)大约是对称的(用于读写),并且相对容易理解。“远程”带宽对于读写来说要不对称得多,在芯片之间的读/写命令和在芯片之间移动的数据之间通常存在显著的争用。本地带宽与远程带宽的总体比例在不同处理器代之间也有很大差异。对于某些处理器(例如,Xeon E5 v3和可能的v4)来说,互连相对较快,因此局部性较差的作业通常可以在两个套接字之间交错的所有内存中运行。自那时以来,本地带宽显著增加,最近的处理器普遍强烈支持本地访问。
来自Intel Xeon白金8160的例子(芯片之间的两个UPI链接):
由于从节点0到节点1的读通信量与从节点1到节点0的写通信量等竞争,使得套接字之间的读写业务更加复杂。
当然,本地访问与远程访问的不同比例将改变缩放。定时也可能是一个问题--如果线程同时进行本地访问,那么远程访问同时进行,则远程访问部分中会出现更多争用(与线程在不同时间进行远程访问相比)。
https://stackoverflow.com/questions/61521821
复制相似问题