英特尔处理器中内存控制器和高速缓存之间的数据路径宽度是多少?

What is width of data path between Memory Controller and Cache in Intel Processor?

据我了解,在64位系统中,内存总线是64位的。因此内存控制器 (MC) 和 DRAM 之间的传输是 64 位的。由于缓存块大小为 64 字节,是否存在从 MC 到缓存的缓存块大小数据的一次传输? (即数据路径宽度是缓存块大小)或者是否进行 8 次传输(每次 64 位,考虑到 64 位的数据路径宽度,与内存总线相同?)

通常介于两者之间。例如主流 Intel CPU(在 Skylake Xeon 之前)中的非核心环形总线在每个方向上都是 32 字节 宽,因此从一个互连停止到下一个互连停止的高速缓存行的突发传输需要 2 个周期。英特尔本可以用单向 64 字节环(可能面积较小)取代双向 32 字节数据环,但这会显着增加所有非核心事务的最坏情况延迟,尤其是 L3 命中。随着最坏情况下的延迟变得更高,这种 64 字节设计也无法随内核数量进行扩展。 (). Intel Knights Ferry uses a ring that is 64-byte wide in each direction. This massive interconnect is made possible by having smaller cores, no dedicated L3 cache, and a much larger die compared to processors of the same gen (or even newer). The interconnect width in the more recent Intel processors is probably either 32 bytes or 64 bytes in each direction. (See: What is the data width of the mesh in SKX?)

L2-L3 总线(即连接专用 L2 缓存与其关联的 L3 切片的路径)的带宽低于互连的带宽,因此 L2-L3 总线的宽度可以更小(16字节是合理的)。从 L2 -> L1 数据缓存 的路径在 Skylake 中是 64 字节宽。一些非英特尔来源对这些路径的宽度提出了更强有力的声明,但它们可能准确也可能不准确。

顺便说一句,在 x86-64 成为现实之前,自 SDRAM / DDR1 以来,内存总线一直是 64 位。内存总线本身以 64 字节的突发传输工作。

与内存总线宽度无关,x86 因为 32 位 P5 Pentium 保证 8 字节(64 位)对齐访问是原子的(只能在该 uarch 上使用 x87 或 MMX)。这个事实来自加载/存储执行端口宽度和缓存->缓存传输协议。