【问题标题】:How long does it take to fill a cache line?填充缓存行需要多长时间?
【发布时间】:2022-08-14 13:44:48
【问题描述】:

假设一个高速缓存行是 64 字节,

100 纳秒是主内存访问经常引用的数字,这个数字是一次 1 个字节还是一次 64 个字节?

    标签: caching cpu-architecture latency cpu-cache


    【解决方案1】:

    当然,这是针对整个缓存行的。

    沿途的总线/数据路径在每个点上至少有 8 字节宽,外部 DDR 总线最窄。 (也可能是多核系统上插槽之间的互连。)

    在某些 CPU 上,高速缓存行的“关键字”可能比其余部分早一两个周期到达,在古老的 Pentium-M 上甚至可能是 8 个周期,但在许多最近的 CPU 上,L2 和 L1d 之间的最后一步是完整的 64字节宽。例如,为了充分利用该链接(对于数据流向任一方向),我假设 L2 超级队列等待从 Intel CPU 上的 32 字节环形总线接收完整的高速缓存行。

    Skylake 例如有 12 个行填充缓冲区,因此 L1d 缓存可以同时跟踪多达 12 行的缓存未命中,加载+存储。 L2 超级队列的条目比这多一些,因此它可以跟踪由硬件预取创建的一些额外请求。内存级并行性(以及预取)对于缓解高速缓存未命中的高延迟非常重要,尤其是在 L3 中未命中并且必须一直传输到 DRAM 的需求负载。


    对于一些实际测量,请参阅https://www.7-cpu.com/cpu/Skylake.html,例如 Skylake-client i7-6700 与双通道 DDR4-2400 CL15。

    英特尔“服务器”芯片,大型 Xeon,内存延迟明显更高,足以严重降低单个内核可用的内存(和 L3)带宽,即使其他内核处于空闲状态。Why is Skylake so much better than Broadwell-E for single-threaded memory throughput?

    虽然我还没有听说过 Ice Lake-server 或 Sapphire Rapids 是否有很大改善;当他们第一次切换到 Skylake-server 中的网状互连(和非包含 L3)时,情况非常糟糕。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      • 2014-06-24
      • 2023-03-23
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多