首页 > 解决方案 > 物理上更靠近 CPU 的内存会比物理上更远的内存执行得更快吗?

问题描述

我知道考虑到计算机的工作速度,这听起来可能是一个愚蠢的问题,但是说 RAM 中的某个地址在物理上更靠近主板上的 CPU,与位于 CPU 最远的内存地址相比,将与最远的内存地址相比,这会影响访问更近的内存地址的速度吗?

标签: performancememorycpucpu-architectureram

解决方案


如果您正在谈论 NUMA 访问连接到此套接字的 RAM 与通过互连访问连接到另一个套接字的 RAM,那么是的,这是一个众所周知的效果。 例子。否则,没有。

另请注意,外部存储器总线上的信号传输时间只是 CPU 内核总延迟缓存未命中延迟成本的一小部分。CPU 内部的排队,检查 L3 缓存的时间,以及内核和内存控制器之间的内部总线,都加起来了。将 DDR4 CAS 延迟缩短 1 个整个内存周期只会对整体内存性能产生很小(但可测量的)差异(请参阅硬件评论网站对内存超频进行基准测试),其他时间甚至更小。


不,DDR4(及更早版本)内存总线与时钟同步,并期望在命令后特定数量的内存时钟周期1处做出响应(因此控制器可以流水线化请求而不会导致重叠)。看看每个程序员都应该知道什么关于内存的知识?有关 DDR 内存命令和内存时序(以及 CAS 延迟与其他时序)的更多信息。

(维基百科对 SDRAM 的介绍提到早期的 DRAM 标准是异步的,所以是的,他们可能会在数据准备好后立即回复。如果这恰好是一个完整的时钟周期,那么加速可能是可能的。)

因此,内存延迟是离散的,而不是连续的,并且距离更近 1 毫米不能让它快几分之一纳秒。 唯一可能的效果是,如果您将所有内存插入 DIMM 插槽,以使您能够运行比其他安排更紧凑的时序和/或更快的内存时钟。如果您想与试图将系统推向稳定性极限的人一起体验真实世界的体验,请阅读有关内存超频的内容。最好的可能取决于主板;走线的物理长度不是唯一的考虑因素。

AFAIK,所有现实世界的主板固件都坚持对所有内存通道上的所有 DIMM使用相同的时序2

因此,即使一个 DIMM 理论上可以支持比另一个更严格的时序,您实际上也无法配置系统来实现这一点。 例如,由于走线较短或噪声较小,信号反射较少,因为它位于某些走线的末端而不是中间,或其他任何原因。物理上的接近并不是唯一可以提供帮助的东西。

(这可能是件好事;跨多个 DRAM 通道交错物理地址空间允许顺序读/写从所有通道的总带宽中受益。但如果它们以不同的速度运行,您可能会在控制器和控制器之间有更多的共享总线争用核心,还有更多时间未使用。)

内存频率和时序通常由固件在读取每个 DIMM(内存模块)上的SPD ROM后选择,以了解安装的内存以及每个 DIMM 在什么频率下的额定时序。

脚注 1 :当内存控制器和 DIMM 同意在 DIMM 开始将数据放在总线上之前的读取命令之后应该有多少个周期时,我不确定如何解释内存迹线上的传输线传播延迟。

CAS 延迟是内存控制器编程到每个 DIMM 的“模式寄存器”中的时序数。

大概 DIMM 看到的数字是它使用的实际数字,并且内存控制器必须考虑往返传播延迟才能知道何时真正预期读取突发开始到达。其他命令延迟只是发送不同命令之间的时间,因此传播延迟无关紧要:发送端的间隙等于接收端的间隙。

但是内存控制器看到的 CAS 延迟包括信号通过电线到达 DIMM 并返回的往返传播延迟。采用 DDR4-4000 的现代系统有一个时钟频率为 2GHz,周期时间为半纳秒(并在上升沿和下降沿传输数据)。

在光速下,0.5ns“仅”约为 15 厘米,是Grace Hopper 纳秒之一的一半,并且传输线效应可能会更短一些(可能是 2/3)。在大型服务器主板上,某些 DIMM 离 CPU 足够远,以至于走线有那么长,这当然是合理的。

内存 DIMM 的额定速度有些保守,因此即使在 DDR4 标准允许的范围内,它们仍然应该以该速度工作。我不知道细节,但我认为 JEDEC 在开发 DDR SDRAM 标准时会考虑这一点。

如果 DIMM 在读取突发开始时断言有一个“数据有效”引脚,那将解决问题,但我在 Wikipedia 上没有看到提及。


计时是像 9-9-9-24 这样的数字,第一个是 CAS 延迟,CL。如果您想从性能调整 PoV 中了解更多信息,https://www.hardwaresecrets.com/understanding-ram-timings/是早期的谷歌热门。在前面链接的 Ulrich Drepper 的“What Every Programmer Should Know about Memory”中也进行了描述,来自一个如何工作的 PoV。请注意,内存时钟速度越高,给定周期数的实时时间(以纳秒为单位)就越少。因此,随着时钟频率的增加甚至下降,CAS 延迟和其他时间几乎保持不变,以纳秒为单位。 https://www.crucial.com/articles/about-memory/difference-between-speed-and-latency显示了一个表格。


脚注 2:除非我们谈论的是特殊的更快的内存,用作较大主内存的暂存器或缓存,但仍然在芯片外。例如,至强融核卡上的 16GB MCDRAM,与 384GB 的常规 DDR4 分开。但是更快的内存通常是焊接下来的,所以时间是固定的,而不是插槽式的 DIMM。所以我认为可以公平地说系统中的所有DIMM将以相同的时序运行。


其他随机笔记:

https://www.overclock.net/threads/ram-4x-sr-or-2x-dr-for-ryzen-3000.1729606/包含一些关于“T 拓扑”与“菊花链”主板的讨论他们的 DIMM 插槽的布局。这似乎是不言自明的术语:T 表示通道上的 2 个 DIMM 中的每一个都位于 CPU 的相对两侧,与引脚的距离大约相等。与“菊花链”相比,同一通道的两个 DIMM 位于 CPU 的同一侧,一个比另一个远。

我不确定使用更近或更远的插座的推荐做法是什么。信号反射可能更关心近插座,因为它不是走线的末端。


如果您通过“芯片启用”引脚在同一内存通道上有多个 DIMM,则 DDR4 协议可能要求它们都以相同的时间运行。(这样的 DIMM 可以看到彼此的命令,除了内存控制器可以独立控制每个 DIMM 以控制命令用于哪一个的“芯片选择”引脚。

但从理论上讲,CPU 可以设计为以不同的频率运行其不同的内存通道,或者如果内存控制器都共享一个时钟,则至少可以在相同的频率下运行不同的时序。当然,在多插槽系统中,您不会期望为不同的插槽编程不同的时序没有物理/电气障碍。

(我已经多年没有在多插槽系统上玩过 BIOS,自从我在 AMD K8 / K10 时代担任集群系统管理员以来就没有)。所以 IDK,一些 BIOS 可能有选项来控制不同插槽的不同时序,或者如果您在一个插槽中使用比其他插槽慢的 RAM,则只是允许不同的自动检测。但是考虑到服务器的价格以及很少有人将它们作为爱好机器运行,供应商不太可能会费心支持或验证这样的配置。


推荐阅读