2026 HPCA: I-POP: Ignite Positive Prefetchers
整体上,这篇论文不是在发明一个新的 prefetcher,而是在解决一个更“系统级”的问题:多个 prefetcher 同时存在时,怎样动态决定谁该开、谁该关、谁该更激进
背景与问题
现代处理器往往不会只放一个 prefetcher,而是同时放多个不同类型的 prefetcher,因为不同 prefetcher 擅长捕捉不同访问模式。
这样做能扩大 miss coverage,但也会把 useless prefetch 的副作用一起放大,包括:
- 占用 DRAM 带宽
- 增加片上/片外共享资源竞争
- 引发 cache pollution
- 最终反而拉低 IPC
作者用实验说明:
- 不做管理的多-prefetcher 系统,在某些 workload 上最多会比 baseline 差 24.3%
- 有效管理后,相对 unmanaged 的系统最多能提升 22.6%
结论是:多 prefetcher 需要被管理
现有工作: 已有的 multi-prefetcher management
1. Static Schemes
例:DOL、IPCP
预先给 prefetcher 固定优先级
问题:
- 没有反馈调节机制
- 如果某个 prefetcher 开始降低性能,也不会自动收敛
- prefetcher 选择静态
- 对于某些 PC 表面上像 stride 模式,但更复杂的 SMS 型 prefetcher 实际上能做得更好;静态优先级仍会强行选 PC-Stride,于是造成次优
2. RL-based Schemes
例:Bandit, Alecto
利用强化学习的方法进行预取器管理(管理粒度是 phase,即每 1000 次访问)
- phase start: 根据 rewards 评估不同的预取器组合,选择一种
- phase end: 观测到的 IPC 作为当前预取器组合的 reward
问题:
- adjustment lag
- 当访问模式变化以及 DRAM 带宽变化时,当前最佳 prefetcher 组合也会变化
- 这种策略不能立刻切换,而是要经过一段奖励重新积累的过程
- 状态/动作空间爆炸
- 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 的两个优势:
- PE 和 IPC 更相关
- 实验证明,PE 与 IPC speedup 在 99% workload 上是正相关的,平均相关性 0.85
- 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
系统设置:
- 4 个 state-of-the-art prefetcher
(参考自 AMD Zen3 和 Arm Neoverse V2 的多类型预取器组织方式) - 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 对大部分预取器都具有普适性
局限与可讨论点
- PE 仍然是近似,不是真正因果测量
- 比如 $I_{LAT}$ 的计算,本质是根据资源占用时间来估计 demand 的损失
- phase-based 控制仍有粒度限制 (本质还是 phase 级控制,不是 per-access 控制)
- 每 1K L2 demands 更新一次 (比 RL-based Schemes 更快)
- 极短 phase 变化下仍可能滞后
- wrong-path 的讨论不足
- 论文基于 ChampSim,是 trace-driven,不包含 wrong-path execution
- 并没有验证 wrong-path 的影响