[英]Why isn't there a data bus which is as wide as the cache line size?
当发生高速缓存未命中时,CPU 从主内存中取出整个高速缓存行到高速缓存层次结构中。 (在 x86_64 上通常为 64 字节)
这是通过数据总线完成的,在现代 64 位系统上只有 8 字节宽。 (因为字长是 8 字节)
编辑:在这种情况下,“数据总线”是指 CPU 芯片和 DRAM 模块之间的总线。 该数据总线宽度不一定与字长相关。
根据策略,首先获取实际请求的地址,然后依次获取缓存行的其余部分。
如果有一个 64 字节宽度的总线,它会更快,这将允许一次获取整个缓存行。 (这将是字大小的八倍)
也许可能有两种不同的数据总线宽度,一种用于标准缓存线获取,另一种用于仅适用于字大小内存访问的外部硬件 (DMA)。
限制数据总线大小的限制是什么?
我认为 DRAM 总线宽度扩展到 AMD64 之前的当前 64 位。 巧合的是它与字号匹配。 (P5 Pentium 已经保证了 64 位对齐传输的原子性,因为它可以使用 64 位数据总线轻松做到这一点。当然,这仅适用于 32 位微体系结构上的 x87(以及后来的 MMX)加载/存储。)
见下文:高带宽内存确实使用更宽的总线,因为您可以为事物提供多高的时钟是有限制的,并且在某些时候让它大规模并行确实变得有利。
如果有一个 64 字节宽度的总线,它会更快,这将允许一次获取整个缓存行。
突发传输大小不必与总线宽度相关。 与 DRAM 之间的传输确实发生在缓存行大小的突发中。 CPU 不必为每个 64 位发送单独的命令,只需设置整个缓存行的突发传输(读或写)。 如果它想要更少,它实际上必须发送一个 abort-burst 命令; 没有“单字节”或“单字”传输命令。 (是的,SDRAM wiki 文章仍然适用于 DDR3/DDR4。)
您是否认为需要更宽的总线来减少命令开销? 他们不是。 (SDRAM 命令通过与数据分开的引脚发送,因此可以对命令进行流水线处理,在当前突发传输期间设置下一个突发。或者在打开另一组或芯片上的新行(dram 页)时更早开始。 DDR4 wiki 页面有一个很好的命令图表,显示地址引脚对某些命令有其他含义。)
高速并行总线很难设计。 主板上 CPU 插槽和每个 DRAM 插槽之间的所有走线必须在小于 1 个时钟周期内具有相同的传播延迟。 这意味着它们的长度几乎相同,并控制其他迹线的电感和电容,因为传输线效应在足够高的频率下非常有用。
极宽的总线会阻止您将其计时为高,因为您无法达到相同的容差。 SATA 和 PCIe 都用高速串行总线取代了并行总线(IDE 和 PCI)。 (PCIe 并行使用多个通道,但每个通道都是自己独立的链路,而不仅仅是并行总线的一部分)。
从 CPU 插槽到 DRAM 插槽的每个通道使用 512 条数据线是完全不切实际的。 典型的台式机/笔记本电脑 CPU 使用双通道内存控制器(因此两个 DIMM 可以同时做不同的事情),因此这将是主板上的 1024 条迹线和 CPU 插槽上的引脚。 (这是在固定数量的控制线之上,如 RAS、CAS 等。)
以非常高的时钟速度运行外部总线确实会出现问题,因此需要在宽度和时钟速度之间进行权衡。
有关 DRAM 的更多信息,请参阅 Ulrich Drepper 的《每个程序员应该了解的内存知识》 。 它在 DRAM 模块、地址线和复用器/解复用器的硬件设计方面获得了令人惊讶的技术。
请注意, RDRAM (RAMBUS)使用高速 16 位总线,并且具有比 PC-133 SDRAM 更高的带宽(1600MB/s 与 1066MB/s)。 (它有更糟糕的延迟和运行更热,并且由于一些技术和一些非技术原因在市场上失败了)。
我想这有助于使用更宽的总线,达到您可以在单个周期内从物理 DRAM 芯片读取的内容的宽度,因此您不需要那么多缓冲(更低的延迟)。
Ulrich Drepper 的论文(上面链接)证实了这一点:
根据地址线a2和a3 ,一列的内容可用于 DRAM 芯片的数据引脚。 这在多个 DRAM 芯片上并行发生多次,以产生与数据总线宽度相对应的总位数。
在 CPU 内部,总线要宽得多。 Core2 到 IvyBridge 在不同级别的缓存之间使用 128 位数据路径,从执行单元到 L1。 Haswell 将其扩大到 256b (32B),在 L1 和 L2 之间有 64B 路径
高带宽内存被设计成与控制它的任何东西更紧密地耦合,并为每个通道使用 128 位总线,有 8 个通道。 (总带宽为 128GB/s)。 HBM2 速度快两倍,宽度相同。
8 个 128b 通道不是一个 1024b 总线,而是在拥有一个难以保持同步的极宽总线与每个位在单独通道(如 PCIe)上的开销过多之间进行权衡。 如果您需要强大的信号和连接器,单独通道上的每一位都很好,但是当您可以更好地控制事物时(例如,当内存未插入时),您可以使用宽快速总线。
也许可能有两种不同的数据总线宽度,一种用于标准缓存线获取,另一种用于仅适用于字大小内存访问的外部硬件 (DMA)。
情况已经如此。 DRAM 控制器集成到 CPU 中,因此来自 SATA 控制器和网卡等系统设备的通信必须通过一条总线 (PCIe) 从它们到达 CPU,然后到达 RAM (DDR3/DDR4)。
从 CPU 内存架构到系统其余部分的桥接称为系统代理(这基本上取代了过去在没有集成内存控制器的系统中主板上的独立北桥芯片)。 芯片组南桥通过它提供的一些 PCIe 通道与其通信。
在多插槽系统上,缓存一致性流量和非本地内存访问也必须发生在插槽之间。 AMD 可能仍会使用超传输(64 位总线)。 英特尔硬件在连接至强内部内核的环形总线上有一个额外的停靠点,这个额外的连接是其他套接字的数据进出的地方。 IDK 物理总线的宽度。
我认为存在物理/成本问题。 除了数据线 (64) 之外还有地址线 (15+) 和bank_select
线 (3)。 加上其他线路(CS、CAS、RAS...)。 例如,请参阅第 6 代智能英特尔® 酷睿™ 处理器家族数据表。 一般来说,一辆巴士大约90条线路,两辆巴士大约180条线路。 还有其他线路(PCIe,Dysplay...)接下来是突发读取。 使用bank_select
我们可以选择 8 个银行之一。 在突发模式下,在所有库中写入一次地址,我们每个周期从所有库读取数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.