cpu 缓存和 cpu 之间的总线宽度

Width of bus betwen cpu cache and cpu

我无法计算出现代 PC 中 cpu 和 cpu 缓存之间的总线宽度。我没有在互联网上找到任何可靠的东西。我所拥有的只是一个 block diagram for Zen (AMD) 微体系结构,它表示 L1 和 L2 缓存每个周期可以传输 32B(256b)。我猜总线宽度是 256 线(假设单一数据速率)。但是,存在双倍数据速率传输,例如内存控制器和 DDR 内存之间。

总结:

  1. cpu和cpu缓存之间的总线宽度是256行吗?
  2. 如果是,是否意味着从 L1 读取整个缓存行需要两个 cpu 周期?

这种信息可以在Intel和AMD的优化手册中找到,但通常是端口带宽,而不是确切的宽度,因为这是大多数人关心的。

Zen微架构中的L1D缓存有16个bank和3个128位端口,其中两个可以处理load-type个请求,一个可以处理store-type个请求。因此,最大核心 L1D 带宽为每个周期 128*3 位。在 Zen 2 中,每个端口扩展到 256 bits/c,而库的数量减少了一半。所以 Zen 2 的最大 core-L1D bandwdith 是 256*3 bits per cycle,但是达到最大 bandwdith 的几率较低。

以英特尔处理器的 Ice Lake 为例。 L1D 缓存有 4 个端口,两个 512 位加载和两个 256 位存储。存储端口可以每两个周期处理一个 512 位存储请求,或者每个周期处理两个 256 位存储请求,但前提是这两个存储完全包含在同一缓存行中并且具有相同的内存类型。在我看来,这两个存储端口实际上是作为一个具有双存储合并功能的 256 位宽存储端口实现的。所以核心端的真实端口总数似乎是3.