整体上,这篇论文不是在发明一个新的 prefetcher,而是在解决一个更“系统级”的问题:多个 prefetcher 同时存在时,怎样动态决定谁该开、谁该关、谁该更激进

背景与问题

现代处理器往往不会只放一个 prefetcher,而是同时放多个不同类型的 prefetcher,因为不同 prefetcher 擅长捕捉不同访问模式。

这样做能扩大 miss coverage,但也会把 useless prefetch 的副作用一起放大,包括:

  • 占用 DRAM 带宽
  • 增加片上/片外共享资源竞争
  • 引发 cache pollution
  • 最终反而拉低 IPC

作者用实验说明:

  1. 不做管理的多-prefetcher 系统,在某些 workload 上最多会比 baseline 差 24.3%
  2. 有效管理后,相对 unmanaged 的系统最多能提升 22.6%

结论是:多 prefetcher 需要被管理


现有工作: 已有的 multi-prefetcher management

1. Static Schemes

例:DOL、IPCP

预先给 prefetcher 固定优先级

问题:

  1. 没有反馈调节机制
    • 如果某个 prefetcher 开始降低性能,也不会自动收敛
  2. prefetcher 选择静态
    • 对于某些 PC 表面上像 stride 模式,但更复杂的 SMS 型 prefetcher 实际上能做得更好;静态优先级仍会强行选 PC-Stride,于是造成次优

2. RL-based Schemes

例:Bandit, Alecto

利用强化学习的方法进行预取器管理(管理粒度是 phase,即每 1000 次访问)

  • phase start: 根据 rewards 评估不同的预取器组合,选择一种
  • phase end: 观测到的 IPC 作为当前预取器组合的 reward

问题:

  1. adjustment lag
    • 当访问模式变化以及 DRAM 带宽变化时,当前最佳 prefetcher 组合也会变化
    • 这种策略不能立刻切换,而是要经过一段奖励重新积累的过程
  2. 状态/动作空间爆炸
    • N 个 prefetcher, 每个 Prefetcher 有 S 个状态,总组合数是 $S^N$
    • 而且每个 phase 还要做带平方根和对数的运算,硬件代价偏高

这篇论文还构造了一个 “phase-level ideal manager”,结果表明 Bandit 和 Alecto 分别比理想方案低 7.7%7.0%

3. Performance-counter-based Schemes

例:Sandbox, Alecto

主要考虑的性能指标:

  • accuracy
  • score
    并基于固定阈值 (Alecto) 或 top-K (Sandbox) 决策方式选择启用哪些预取器

问题:都没有真正度量 prefetch 对 IPC 的净影响

  • 一个 prefetcher 即使 accuracy 不高,也可能仍然对于 IPC 有帮助
  • 反过来 accuracy 很高,也可能因为带宽竞争或污染把系统拖慢

论文统计了这些指标和 IPC 的 Spearman 相关性,结果是:

  • accuracy 平均相关性只有 0.21
  • score 平均相关性只有 0.55
  • 而且在不少 workload 上甚至与 IPC 负相关
  • 同样的 accuracy,在不同 workload 上可能对应性能提升,也可能对应性能下降
  • 同样的 accuracy,在不同 DRAM 带宽下,性能也能差很多

核心思想:提出 Prefetch Effectiveness(PE)

这篇论文提出了一个更接近“性能因果”的 runtime metric:PE

$$
PE = I_{UPF} - I_{POLL} - I_{LAT}
$$

作者认为,一个 prefetcher 对性能的净影响,本质上应该是:收益 - 损失

  • (I_{UPF}):useful prefetch 带来的收益
  • (I_{POLL}):cache pollution 带来的损失
  • (I_{LAT}):共享资源竞争导致 demand latency 增加的损失

1. useful prefetch 的收益 $I_{UPF}$

作者的基本观点是:一个 useful prefetch 的价值,约等于它替 demand miss 节省掉的 miss latency

问题:如果对每个 prefetch 单独精确记账,硬件代价会太大

论文采用近似法,把 useful prefetch 分成两类:

  • 原本会由 LLC 满足的
  • 原本会由 DRAM 满足的

于是:

$$
I_{UPF} = N_{UPF}^{LLC}\cdot L_{LLC} + N_{UPF}^{DRAM}\cdot L_{DRAM}
$$

其中 $N_{UPF}^{LLC}$ 和 $N_{UPF}^{DRAM}$ 是 useful prefetch 数量,$L_{LLC}$、$L_{DRAM}$ 是这两类 miss 的平均访问延迟

给不同层级 miss 按照 latency 加权赋予了不同价值 (latency 越高,prefetch 的价值越高)

2. cache pollution 的损失 $I_{POLL}$

如果 prefetch 把有用数据挤出 cache,之后 demand 因此 miss 了,那么这个额外 miss 也要按延迟成本记录:

$$
I_{POLL} = N_{POLL}^{LLC}\cdot L_{LLC} + N_{POLL}^{DRAM}\cdot L_{DRAM}
$$

论文指出,在它们的评估配置里,pollution 占总负效应的 26.9%,并不小

3. 竞争导致的延迟损失 $I_{LAT}$

作者认为,prefetch 的损害不止是污染,它还会让 demand 请求在共享资源上等更久

问题:没法直接测“如果没有 prefetch,这个 demand 本来会多快”

作者提出了一个近似但硬件友好的方法:
当一个 prefetch 数据返回时,如果系统里还有 in-flight demand request,那么认为这个 prefetch 对 demand 造成了潜在延迟损失

并把损失拆成 3 类资源竞争:

  • 片上互连竞争 $T_{NoC}$
  • DRAM command/data bus 竞争 $T_{Bus}$
  • DRAM bank conflict $T_{Bank}$

最后:
$$
I_{LAT}=N_{Delay}\cdot T_{NoC}+N_{Bus}\cdot T_{Bus}+N_{Bank}\cdot T_{Bank}
$$


论文总结了 PE 相比于 accuracy 的两个优势:

  1. PE 和 IPC 更相关
    • 实验证明,PE 与 IPC speedup 在 99% workload 上是正相关的,平均相关性 0.85
  2. PE 自带决策语义
    • PE > 0:净收益为正,应该保留
    • PE ≤ 0:净收益非正,应该关掉

I-POP 硬件设计

I-POP 由两个大模块构成:

1. Metric Collector

负责收集 PE 所需的信息并按 phase 计算各 prefetcher 的 PE

有两个表:

  • PfHT(Prefetch Holding Table):跟踪 useful prefetch
    • prefetched data fill 到 cache 时,填充对应元数据
    • 后续 demand hit 到这个地址时,记录为 useful prefetch
  • PoHT(Pollution Holding Table):跟踪 pollution
    • 如果某个 demand line 因 prefetch fill 被替换,就记录到 PoHT
    • 之后如果 demand miss 又访问到这个地址,就记作 pollution

同时 MSHR Entry 增加一些 Fields:

  • timestamp:测量 request latency
  • Access-DRAM:区分该 miss 是最低需要访问 LLC 还是 DRAM
  • Prefetch-ID bits:标记这个 miss / prefetch 与哪些 prefetcher 相关

2. Control Engine

根据每个 prefetcher 的 PE 做两件事:

  • on/off 决策
  • aggressiveness 调节

每个 prefetcher 定义了三类状态:

  • $ON_i$:开启,且有不同 aggressiveness level
  • $OFF_j$:关闭,但至少还要再关几个 phase
  • $WA$:等待重新激活

决策逻辑:

  • 如果 PE > 0:保持开启
  • 如果 PE ≤ 0:立即转入关闭
  • 如果 DRAM 竞争较多:降低那个“PE 最低”的可调 prefetcher 的 aggressiveness
  • 如果 DRAM 竞争较少:提高那个“PE 最高”的可调 prefetcher 的 aggressiveness
  • 如果某个 prefetcher 的 aggressiveness 被降低后,如果 DRAM 竞争激烈,可以重新调高

这个设计:

  • 不是简单二值开关,也不是全局搜索所有组合 (RL-based Schemes)
  • 每个 prefetcher 先按自身 PE 决定开关,再用全局 DRAM + 各自 PE 做轻量级协调

实验

Setup

论文用 ChampSim 做评估

单核实验:共 76 个 workload ,来自:

  • SPEC17
  • GAP
  • Ligra

多核实验: 构造了 50 组 heterogeneous SPEC17 workload

系统设置:

  1. 4 个 state-of-the-art prefetcher
    (参考自 AMD Zen3 和 Arm Neoverse V2 的多类型预取器组织方式)
  2. I-POP
  • phase 长度: 1K L2 demand requests
  • PfHT 和 PoHT 都是 512-entry
  • 状态机中 OFF 有 3 级,ON 有 5 级

1. 总体性能

  • 相对 baseline(带基本 throttling 的 PC-Stride),I-POP 平均提升 9.7%
  • 相对 Bandit,单核提升 4.2%
  • 相对 Alecto,单核提升 3.5%
  • 在 16-core 系统中,相对 Bandit / Alecto 分别高 6.6% / 8.6%

2. coverage 与 overprediction

I-POP 的 coverage 最高

3. DRAM Traffic

  • 相比 DOL / Bandit / Sandbox,DRAM traffic 分别少 38.2% / 40.2% / 53.1%
  • 比 Alecto 高 9.2%
    • Alecto 更保守
    • I-POP 额外带来的 traffic,换来了更高 coverage 和更高 IPC

4. 能耗

I-POP 比 DOL、Bandit、Sandbox 稍省能,但比 Alecto 高 2.0%

解释:I-POP 不是极端保守的方案,只要净收益为正就保留。所以在一些 prefetch 普遍有效的 workload 上,它会比 Alecto 更激进,能耗也略高

5. 多级预取场景

  • I-POP 用于管理 L2 prefetcher
  • 在 L1D 为 Next-line、PC-Stride 或 IPCP 时,I-POP 相对于 Alecto 有 2.1%–2.5% 的优势

说明: PE 对“已有上层噪声”的环境仍然稳健

6. 与单体强 prefetcher 比较

  • 比 Berti 高 5.2%
  • 比 PMP 高 8.5%
  • 比 Pythia 高 4.1%
  • 比 SPP+PPF 高 2.6%

结论:
管理好多 prefetcher 的组合,有时比再造一个更强的单 prefetcher 更划算

7. 多种 prefetcher 组合下的泛化性

  • 用 8 个代表性 prefetcher 组成 16 种不同组合
  • I-POP 在所有组合上都持续优于 Bandit 和 Alecto,平均分别高 4.4%2.6%

结论:I-POP 对大部分预取器都具有普适性


局限与可讨论点

  1. PE 仍然是近似,不是真正因果测量
    • 比如 $I_{LAT}$ 的计算,本质是根据资源占用时间来估计 demand 的损失
  2. phase-based 控制仍有粒度限制 (本质还是 phase 级控制,不是 per-access 控制)
    • 每 1K L2 demands 更新一次 (比 RL-based Schemes 更快)
    • 极短 phase 变化下仍可能滞后
  3. wrong-path 的讨论不足
    • 论文基于 ChampSim,是 trace-driven,不包含 wrong-path execution
    • 并没有验证 wrong-path 的影响