Jul*_*les 3 memory cpu performance ram cpu-architecture
我知道考虑到计算机的工作速度,这听起来可能是一个愚蠢的问题,但是说 RAM 中的某个地址在物理上更靠近主板上的 CPU,与位于尽可能远离 CPU 的内存地址相比,与最远的内存地址相比,这对访问较近的内存地址的速度有影响吗?
如果您正在谈论 NUMA 访问连接到此套接字的 RAM,而不是通过互连访问连接到另一个套接字的 RAM,那么是的,这是一个众所周知的效果。 例子。否则,没有。
另请注意,外部存储器总线上的信号传输时间仅占 CPU 内核总延迟缓存未命中延迟成本的一小部分。在 CPU 内排队、检查 L3 cahce 的时间以及内核和内存控制器之间的内部总线,所有这些都加在一起。将 DDR4 CAS 延迟缩短 1 个整个内存周期只会对整体内存性能产生很小(但可测量)的差异(请参阅硬件评论网站对内存超频进行基准测试),其他时间更是如此。
不,DDR4(及更早版本)内存总线与时钟同步,并期望在命令后特定数量的内存时钟周期1处做出响应(因此控制器可以流水线化请求而不会引起重叠)。看看每个程序员应该知道什么关于内存?有关 DDR 内存命令和内存时序(以及 CAS 延迟与其他时序)的更多信息。
(维基百科对 SDRAM的介绍提到早期的 DRAM 标准是异步的,所以是的,他们可能会在数据准备好后立即回复。如果这恰好是一个完整的时钟周期提前,那么加速可能是可能的。)
因此,内存延迟是离散的,而不是连续的,距离近 1 毫米不能使其快几分之一纳秒。 唯一可能的效果是,如果您将所有内存插入 DIMM 插槽,那么与其他安排相比,您可以运行更严格的时序和/或更快的内存时钟。如果您想与试图将系统推向稳定性极限的人一起获得真实体验,请阅读有关内存超频的信息。最好的可能取决于主板;走线的物理长度并不是唯一的考虑因素。
AFAIK,所有真实世界的主板固件都坚持对所有内存通道2上的所有 DIMM使用相同的时序。
因此,即使一个 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 在读取突发开始时断言,这将解决问题,但我在维基百科上没有看到提到这一点。
时间是像 9-9-9-24 这样的数字,第一个是 CAS 延迟,CL。https://www.hardwaresecrets.com/understanding-ram-timings/如果您想从性能调优 PoV 中阅读更多信息,它是早期的谷歌热门。前面链接的 Ulrich Drepper 的“每个程序员应该了解的内存知识”中也有描述,来自工作原理 PoV。请注意,内存时钟速度越高,给定周期数的实时性(以纳秒为单位)越低。因此,随着时钟频率的增加甚至下降,CAS 延迟和其他时间几乎保持在纳秒级不变。 https://www.crucial.com/articles/about-memory/difference-between-speed-and-latency显示了一个表格。
脚注 2:除非我们谈论的是特殊的更快的内存,用作更大主内存的暂存器或缓存,但仍然是片外的。例如,Xeon Phi卡上的 16GB MCDRAM,与 384 GB 的常规 DDR4 分开。但是更快的内存通常是焊接下来的,所以时间是固定的,而不是插槽的 DIMM。所以我认为可以公平地说系统中的所有DIMM都将以相同的时序运行。
其他随机笔记:
https://www.overclock.net/threads/ram-4x-sr-or-2x-dr-for-ryzen-3000.1729606/包含一些关于具有“T 型拓扑”与“菊花链”的主板的讨论DIMM 插槽的布局。这似乎是不言自明的术语:当一个通道上的 2 个 DIMM 中的每一个都位于 CPU 的两侧,与引脚的距离大约相等时,T 将是一个。与“菊花链”相比,当同一通道的两个 DIMM 位于 CPU 的同一侧时,一个比另一个更远。
我不确定使用更近或更远的套接字的推荐做法是什么。信号反射可能是近插座的一个问题,因为它不是走线的末端。
如果通过“芯片启用”引脚在同一内存通道上有多个 DIMM,则 DDR4 协议可能要求它们都以相同的时序运行。(这样的 DIMM 可以看到彼此的命令,除了有一个“芯片选择”引脚,内存控制器可以独立控制每个 DIMM 以控制命令用于哪个。
但理论上,CPU 可以设计为以不同的频率运行其不同的内存通道,或者如果内存控制器都共享一个时钟,则至少可以在相同的频率下运行不同的时序。当然,在多插槽系统中,您希望为不同的插槽编程不同的时序不会有物理/电气障碍。
(我多年来一直没有在多插槽系统上的 BIOS 中玩过,因为我在 AMD K8 / K10 时代是集群系统管理员)。因此,IDK,有可能某些 BIOS 可能具有控制不同插槽的不同时序的选项,或者如果您在一个插槽中使用的 RAM 速度比其他插槽慢,则仅允许不同的自动检测。但是考虑到服务器的价格以及很少有人将它们作为业余爱好机器运行,供应商不太可能费心支持或验证这样的配置。