【问题标题】:Is the L1-Dcache the ultimate data cache and is DSB also a cache that can be simulated by gem5?L1-Dcache是​​终极数据缓存,DSB也是gem5可以模拟的缓存吗?
【发布时间】:2021-07-04 18:26:00
【问题描述】:
  1. 我想知道 L1-Dcache 是否是数据来源的最终缓存。因为我知道i-cache,有一个更接近CPU的DSB,可以看作是L0-icache。

  2. 另外,我对哪些硬件更改会影响 DSB 的性能感兴趣?我的意思是缓存,有诸如缓存大小、缓存关联性之类的东西。但 DSB 是否也只是一个会受这些因素影响的缓存?

  3. 如果是的话,我可以使用 gem5 模拟结果吗?我知道使用 gem5,我可以配置 L1 指令缓存并观察 L1 指令缓存性能。如何在 gem 上为 DSB 做同样的事情?

【问题讨论】:

    标签: cpu intel cpu-architecture cpu-cache gem5


    【解决方案1】:

    我想知道 L1-Dcache 是否是数据来自的终极缓存

    是的,或者存储缓冲区。 Globally Invisible load instructions 解释了部分存储转发如何让核心加载一个从不全局可见的 dword 值,因此没有其他核心可以加载。


    DSB(uop 缓存)缓存,但它不缓存机器代码。它将x86机器码解码的结果缓存到微指令中。

    它有各种限制,例如不能对来自同一个 32 字节 x86 机器代码块的微指令使用超过 3 个“行”,因此建模不像像大小/关联性那么简单。例如每种方式(又名线路)最多可以容纳 6 个微指令,但以无条件(或预测采用)分支微指令结束。并且来自多微指令指令的所有微指令都必须在同一行中。

    来自每条 x86 指令的融合域微指令的数量取决于它是什么指令;请参阅https://uops.info/,但请注意un-lamination 将意味着某些指令在发布/重命名阶段和 ROB 中比解码器和 uop-cache 占用更多的微指令。 (Micro fusion and addressing modes)

    Agner Fog 的微架构指南有一些详细的测试结果 (https://agner.org/optimize/),另请参阅 https://www.realworldtech.com/sandy-bridge/4/

    Intel uop 缓存的基本参数,如 Sandybridge 部分 Agner 的微架构指南中所述:

    µop 缓存被组织为 32 组 x 8 路 x 6 µops,总计最大容量为 1536 微操作。它可以为每个对齐和分配最多 3 行,每行 6 µops 连续的 32 字节代码块。

    AFAIK,从 SnB 到 Skylake 和 Ice Lake,这种几何形状一直保持不变。

    L1i 缓存包含 uop 缓存。 uop 缓存是虚拟寻址的,因此不需要 TLB 查找。但我猜它也必须在 TLB 失效时被驱逐。 (这不是一个大问题,因为旧版解码器非常好;Sandybridge 系列避免了 P4 解码速度慢的问题,并尝试使用它的跟踪缓存而不是普通的 L1i。)

    请注意,AMD 的 Zen 微架构系列也使用 uop 缓存。他们不称它为 DSB,而且它可能与 Intel 的有所不同。


    另外,我对哪些硬件变化会影响 DSB 的性能感兴趣?

    Skylake 将 uop-cache -> IDQ 的带宽从每周期 4 微秒增加到 6 微秒。因此,即使在高吞吐量代码中,uop-cache 也可以在气泡部分耗尽 IDQ 后“赶上”。

    尽管如此,它仍然每个周期只能读取 1 个 uop 缓存行,因此例如在 Skylake 上,微码更新禁用了循环缓冲区 (LSD),通常每次迭代运行 1 个周期的微小循环可能会减慢到如果循环跨 32 字节边界分割,则为 2 个周期,因为这意味着它的 uop 将位于 2 个单独的 uop-cache 行中。 (例如每行 1 或 2 个。)

    但 Haswell 可以在理想条件下从 uop 缓存维持每个时钟 4 uops,即使指令将 uop 缓存行完全打包为每行 6 个 uops。因此,在 uop 缓存行获取和添加到 IDQ 之间显然存在一些缓冲,否则如果添加到 IDQ 的所有 uops 必须来自同一行,这将是 4 : 2 模式。

    【讨论】:

    • 关于数据源(尚未在此答案中处理),存储缓冲区可以是源。 µop/L1 缓存包含属性可能值得一提。
    • @PaulA.Clayton:指令获取可以从存储缓冲区转发吗?所以自修改代码机器清除不必耗尽存储缓冲区?感谢您提醒我们提及其他基本属性,例如 L1i 的包含、虚拟处理以及它的实际几何形状。
    • 问题的第一部分包括“我想知道 L1-Dcache 是否是数据来自的最终缓存”。 — 即,它关注的是负载而不是指令获取。
    • @PaulA.Clayton:啊,谢谢,我错过了问题的那一部分。多部分问题有问题:/
    猜你喜欢
    • 1970-01-01
    • 2018-12-25
    • 2011-12-18
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 2019-01-16
    相关资源
    最近更新 更多