当发生高速缓存未命中时,CPU将整个高速缓存行从主内存中提取到高速缓存层次结构中。 (在x86_64上通常为64个字节)
这是通过数据总线完成的,在现代64位系统上,数据总线的宽度仅为8字节。 (因为字长为8字节)
编辑:在这种情况下,“数据总线”是指CPU芯片与DRAM模块之间的总线。该数据总线宽度不一定与字长相关。
根据策略,首先获取实际请求的地址,然后依次获取其余缓存行。
如果总线宽度为64字节,这似乎会快得多,这将允许一次提取整个缓存行。 (这将是单词大小的八倍)
也许会有两种不同的数据总线宽度,一种用于标准高速缓存行提取,另一种用于仅与字长存储器访问配合使用的外部硬件(DMA)。
有哪些限制数据总线大小的限制?
最佳答案
我认为DRAM总线宽度在AMD64之前已扩展到当前的64位。它是与单词大小匹配的一个巧合。 (P5 Pentium已经guaranteed atomicity of 64-bit aligned transfers了,因为它可以轻松地使用其64位数据总线来实现。当然,这仅适用于x87(及更高版本的MMX)在该32位微体系结构上进行加载/存储。)
参见下文:High Bandwidth Memory确实使用了更宽的总线,因为时钟的时钟频率是有限制的,并且在某些时候使其大规模并行化确实是有利的。
突发传输大小不必与总线宽度相关。进/出DRAM的传输确实发生在高速缓存行大小的突发中。 CPU不必为每个64位发送单独的命令,只需设置整个高速缓存行的突发传输(读或写)即可。如果要少一些,它实际上必须发送an abort-burst command;没有“单字节”或“单字”传输命令。 (是的,SDRAM Wiki文章仍然适用于DDR3/DDR4。)
您是否认为必须使用更宽的总线以减少命令开销?他们不是。 (SDRAM命令是通过与数据分开的引脚发送的,因此可以对命令进行流水线处理,在当前突发传输期间设置下一个突发。或者更早地在另一存储体或芯片上打开新行(dram页)开始。 DDR4 Wiki页面上有一个nice chart of commands,显示了地址引脚对于某些命令的其他含义。)
高速并行总线很难设计。主板上CPU插槽和每个DRAM插槽之间的所有走线必须在小于1个时钟周期内具有相同的传播延迟。这意味着它们具有几乎相同的长度,并控制对其他走线的电感和电容,因为在足够高的频率下,传输线效应至关重要。
极宽的总线会阻止您将其计时为,因为您无法达到相同的容差。 SATA和PCIe都用高速串行总线代替了并行总线(IDE和PCI)。 (PCIe使用并行的多个 channel ,但是每个 channel 是其自己的独立链接,而不仅仅是并行总线的一部分)。
从CPU插槽到DRAM插槽的每个 channel 使用512条数据线是完全不切实际的。典型的台式机/笔记本电脑CPU使用双 channel 内存 Controller (因此,两个DIMM可以同时执行不同的操作),因此主板上将有1024条迹线,而CPU插槽上将有引脚。 (这是在固定数量的控制行(如RAS,CAS等)的顶部。)
以非常高的时钟速度运行外部总线确实会出现问题,因此需要在宽度和时钟速度之间进行权衡。
有关DRAM的更多信息,请参见Ulrich Drepper的What Every Programmer Should Know About Memory。关于DRAM模块,地址线和多路复用器/多路分配器的硬件设计,它的技术令人惊讶。
请注意,RDRAM (RAMBUS)使用高速16位总线,并且具有比PC-133 SDRAM更高的带宽(1600MB/s与1066MB/s)。 (它具有更差的延迟并运行得更热,并且由于某些技术和某些非技术原因而在市场上失败了)。
我猜想,在一个周期内使用更宽的总线以达到从物理DRAM芯片读取的宽度是有帮助的,因此您不需要太多的缓冲(较低的延迟)。
Ulrich Drepper的论文(在上面链接)证实了这一点:
在CPU内部,总线的宽度更大。 Core2到IvyBridge的使用是在不同级别的缓存之间以及从执行单元到L1的128位数据路径。 Haswell widened that to 256b (32B), with a 64B path between L1 and L2
High Bandwidth Memory 被设计为与控制它的对象更紧密地耦合,并为每个 channel 使用128位总线,具有8个 channel 。 (总带宽为128GB/s)。 HBM2的速度是相同宽度的两倍。
拥有8条128b channel 而不是一条1024b总线,是在拥有一条很难保持同步的极宽总线与将每个位放在单独的 channel (如PCIe)上所产生的过多开销之间的权衡。如果您需要鲁棒的信号和连接器,那么在单独的 channel 上的每个位都很好,但是当您可以更好地控制事物时(例如,当内存未插入插槽时),您可以使用宽快速总线。
已经是这样了。 DRAM Controller 集成到CPU中,因此来自SATA Controller 和网卡等系统设备的通信必须通过一条总线(PCIe)从它们到CPU,再到RAM(DDR3/DDR4)。
从CPU内部存储器体系结构到系统其余部分的桥梁称为系统代理程序(它基本上取代了以前没有集成存储器 Controller 的系统中主板上单独的北桥芯片)。南桥芯片组通过其提供的某些PCIe channel 与之通信。
在多套接字系统上,套接字之间也必须发生高速缓存一致性流量和非本地内存访问。 AMD可能仍会使用超传输(64位总线)。英特尔硬件在连接Xeon内部内核的环形总线上有一个额外的站,这个额外的连接是其他套接字的数据进出的地方。 IDK物理总线的宽度。
关于caching - 为什么没有像高速缓存行大小一样宽的数据总线?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39182060/