物理上更靠近CPU的内存的性能是否会比物理上更远的内存的性能更快?

问题描述

考虑到计算机的运行速度,我知道这听起来像是一个愚蠢的问题,但与位于内存中最远的内存地址相比,RAM中的某个地址实际上更接近主板上的cpucpu,这会影响与最远内存地址相比访问更近内存地址的速度吗?

解决方法

如果您是在谈论NUMA访问连接到此插槽的RAM而不是通过互连访问访问连接到另一个插槽的RAM,那么是的,这是众所周知的效果。 example。否则,不会。

还请注意,信号在外部存储器总线上的传播时间仅占CPU内核总延迟缓存丢失延迟成本的一小部分。 CPU内部排队,检查L3 cahce的时间以及内核与内存控制器之间的内部总线都加起来了。将DDR4 CAS延迟缩短1个完整内存周期,只会对整体内存性能造成很小的(但可测量的)差异(请参阅硬件评测网站对内存超频进行基准测试),其他时间更是如此。


否,DDR4(及更早版本)的内存总线已同步到时钟,并且在命令后需要特定数量的内存时钟周期 1 的响应(因此控制器可以流水线请求而不会造成重叠)。有关DDR内存命令和内存时序(以及CAS延迟与其他时序)的更多信息,请参见What Every Programmer Should Know About Memory?

(Wikipedia的introduction to SDRAM提到较早的DRAM标准是异步的,因此,是的,它们可以在数据准备就绪后立即回复。如果恰好是整个时钟周期的提早,则可能可以提速)

因此,内存延迟是离散的,不是连续的,并且距离缩短1毫米不能使它快几分之一秒。 唯一可能的效果是,如果您将所有内存插入DIMM插槽中,并且该方式可以使您比其他安排更紧凑地运行时序和/或更快的内存时钟 。如果您想与试图将系统推向稳定极限的人们有真实的体验,请阅读有关内存超频的信息。最好取决于主板。痕迹的物理长度不是唯一的考虑因素。

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

因此,即使一个DIMM理论上可以比另一个DIMM支持更严格的时序,您实际上也无法配置系统来实现这一目标。因为走线较短或更小,因此信号反射更少,因为它在末端而不是某些走线的中间。物理上的接近并不是唯一可以帮助的事情。

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

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

脚注1 :我不确定在存储器控制器和DIMM同意读取命令后应该有多少个周期时,如何计算transmission-line在存储器跟踪上的传播延迟在DIMM开始在总线上放数据之前。

CAS延迟是每个DIMM的内存控制器programs into the "mode register"的计时号。

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

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

在光速下,0.5ns仅“大约”为15厘米,是Grace Hopper's nanoseconds之一的一半,而transmission-line effects可能会更短(可能是其中的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/是google上的热门单曲。在前面提到的如何工作的PoV中,Ulrich Drepper的“每个程序员应该了解的内存”中也有介绍。请注意,内存时钟速度越高,给定周期数的实时时间(以纳秒为单位)就越短。因此,随着时钟频率增加甚至下降,CAS延迟和其他计时几乎保持在十亿分之一秒的常数。 https://www.crucial.com/articles/about-memory/difference-between-speed-and-latency显示一个表格。


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


其他随机注释:

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

我不确定使用更近或更远的插座的建议做法。靠近插座的信号反射可能更值得关注,因为它不是跟踪的结束。


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

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

(多年来,我一直没有在多插槽系统的BIOS中玩耍,因为我在AMD K8 / K10天内是集群系统管理员)。因此,IDK可能会发现,某些BIOS可能具有控制不同插槽的不同时序的选项,或者如果您在一个插槽中使用的RAM比其他插槽中使用的RAM慢,则可以简单地允许不同的自动检测。但是,鉴于服务器的价格以及将其作为业余计算机运行的人数很少,供应商不太可能会费心去支持或验证这种配置。