2026 HPCA: Athena: Synergizing Data Prefetching and Off-Chip Prediction via Online Reinforcement Learning
背景问题
这篇论文研究的是:如何在处理器里同时协调 data prefetching(数据预取)和 off-chip prediction(片外访问预测,OCP)
作者的核心观察是三点:
- 预取器和 OCP 往往是互补的
- 预取器擅长“提前把未来会访问的数据拉到缓存里”,如果预测准、时机也对,收益很高;
- OCP 是对“当前这个已知地址的 load 会不会一路 miss 到内存”做二分类预测,然后尽早向内存发起请求,所以它通常更容易做准,但时效性不如预取器
- 简单把两者同时打开并不一定好,尤其是在带宽紧张时,预取器可能因为错误预取带来带宽浪费和缓存污染,反而把 OCP 本来能带来的收益掩盖掉
- 已有控制策略要么不够灵活,要么性能上还有明显缺口
论文用一个实验说明这种互补性:
- 在 100 个 memory-intensive workload 上,L2 预取器 Pythia 对大多数 workload 有益,但对 40/100 的 workload 反而伤害性能
- 在这些“prefetcher-adverse” workload 中,POPET 这样的 OCP 还能平均提升 1.4%,而 Pythia 平均退化 11.6%
- 在“prefetcher-friendly” workload 中,Pythia 的平均收益达到 16.0%,高于 POPET 的 5.9%
作者因此认为,两者不是简单替代关系,而是适合不同阶段、不同资源条件下的不同工具
简单组合 存在的问题
- 构造了一个 baseline:
Naive<POPET, Pythia>,OCP 和预取器始终同时开启 - 一个离线最优上界
StaticBest: 事后知道整个 workload 的端到端结果,可以在“只开 OCP / 只开预取器 / 两者都开 / 两者都关”之间选最好那个
结果表明:
- Naive 虽然在全部 workload 上平均还能提升 4.7%
- 但在 prefetcher-adverse workload 上却平均退化 11.2%
StaticBest比 Naive 平均高 6.5%
结论:问题不在于“这两个机制不能一起存在”,而在于缺乏一个合适的管理策略
已有工作
1. Two Level Perceptron, TLP
TLP 显式考虑 OCP,关键思想是:
如果一个预取会从 off-chip 填到 L1D,这类预取往往不准,所以用 OCP 信息去过滤这类 L1D 预取
但在 lower cache 中不一定成立
一个统计:L1D 的 off-chip prefetch fill 有 50.6% 不准确,而 L2C 上只有 28.1% 不准确
结论:TLP 的前提不适用于 L2 场景,不适合“多个 cache level 上不同 prefetcher”的情形
2. Hierarchical Prefetcher Aggressiveness Control, HPAC
HPAC 属于启发式控制,靠静态阈值比较准确率、带宽等特征来控制预取
问题:阈值是按平均情况调节得到的,不能随 workload/phase 自适应
- 在 prefetching 友好的 phase ,会偏保守
- 在 prefetching 不友好的阶段,也可能不够激进
3. Micro-Armed Bandit, MAB
MAB 用 multi-armed bandit 做决策,比固定阈值灵活
问题: 不感知系统状态,更多是根据历史 reward 对“哪个 arm 好”做统计。
这会导致它无法理解“当前为什么应该选这个动作”,尤其不能利用准确率、带宽、污染这类系统信号做出动作
Athena 核心思想
Athena:把“是否开启预取器/OCP、如何调节预取激进度”建模成一个在线强化学习问题
Athena 每隔一个固定 epoch 观察系统状态,选择一个动作,然后根据得到的奖励更新策略。
作者强调:不能把 IPC 变化当成唯一 reward
- IPC 的变化既可能来自 Athena 的动作,也可能只是 workload 自身 phase 变化引起的。
- 如果 reward 把这两种因素混在一起,RL 学到的策略就可能被噪声误导
Athena 设计了一个composite reward,把“与动作相关的系统变化”和“主要由 workload 自身变化引起的变化”分开,再做差来近似抽取动作的真实因果影响
Athena 设计
Athena 采用的 RL 算法是 SARSA:
SARSA 是经典的 时序差分(TD)控制算法,名字来自更新时用到的五元组:
$$S_t, A_t, R_{t+1}, S_{t+1}, A_{t+1}$$
更新公式是:
$$
Q(s_t,a_t)\leftarrow Q(s_t,a_t)+\alpha\Big[r_{t+1}+\gamma Q(s_{t+1},a_{t+1})-Q(s_t,a_t)\Big]
$$
特点是:
- 直接学习 Q 值
- 下一步用的 $A_{t+1}$ 是按照当前行为策略真正选出来的动作
SARSA 与 Deep RL 的区别:
SARSA 通常是表格型(tabular):
- 每个状态-动作对维护一个 $Q(s,a)$
- 适合状态空间很小的场景
而 Deep RL 通常用神经网络近似函数:
- 不需要显式存整张 Q 表
- 可以处理高维状态,如图像、连续特征、大规模状态空间
- 硬件代价大
二者适用问题规模不同:
SARSA
- 适合小型、离散状态动作空间
- 便于教学和理论分析
- 收敛性质相对清楚
Deep RL
- 适合复杂环境
- 可处理高维输入
- 工程能力强,但训练更复杂、更不稳定
Q-value 存储结构叫 QVStore
- 不是一个巨大的完整状态表,而是拆成多个 plane
- 对同一个 state vector 用多个 hash 映射到不同 plane
- 每个 plane 存一个 partial Q-value
- 最后把这些 partial Q-value 求和得到总 Q-value
两个好处:
- 类似 state aliasing/generalization:相似状态会在部分 plane 上共享信息;
- 每个 plane 很小,访问延迟和功耗都更容易控制
SARSA 的超参数通过离线学习得到:
| Hyperparameters | Final value |
|---|---|
| Learning Rate $\alpha$ | 0.6 |
| Discount Factor $\gamma$ | 0.6 |
| Rxploration Rate $\epsilon$ | 0.0 |
| Epoch Length | 2K instructions |
1. 状态(State)
Athena 把状态定义成一个系统级特征向量。候选特征一开始有 7 个,包括:
- prefetcher accuracy
- OCP accuracy
- bandwidth usage
- cache pollution
- prefetch bandwidth share
- OCP bandwidth share
- demand bandwidth share
但考虑到状态维度越大,Q-value 存储越贵,作者做了离线 feature selection,最后保留了 4 个特征:
- prefetcher accuracy
- OCP accuracy
- bandwidth usage
- prefetch-induced cache pollution
这四个特征其实很合理,正好对应四个核心判断:
- 预取器是不是准;
- OCP 是不是准;
- 系统是否带宽紧;
- 预取器是不是在污染缓存。
从体系结构直觉看,这四个量已经能覆盖大部分“到底该不该开预取”的关键因素。
2. 动作(Action)
Athena 的动作空间很简洁,只有四种粗粒度协调动作:
- 只开 prefetcher
- 只开 OCP
- 两者都开
- 两者都关
只要动作中包含 prefetcher,Athena 还会进一步根据 Q-value 的相对大小来调节prefetch degree
具体做法是:看当前最佳动作的 Q-value 比其余动作平均 Q-value 的差距 ΔQ 大多少?
- 差距大,说明打开预取对性能很有益,于是把预取 degree 提高
- 差距小,就更保守
相当于把coordination + throttling合并
这里针对 $\Delta Q$ 的超参数也通过离线学习得到:
| Hyperparameters | Final value |
|---|---|
| $\tau$ | 0.12 |
3. 奖励(Reward)
作者指出,很多以前的 RL 预取控制工作直接用 IPC change 当 reward。但 IPC 会随着程序 phase 波动,例如分支预测行为变化、load 指令比例变化等,未必是当前控制动作造成的。于是 Athena 设计了:
$$
R_t = R^{corr}_t - R^{uncorr}_t
$$
其中:
- $R^{corr}t = \sum{i}{\lambda_i \cdot \Delta M_{i,t}^{corr}}$ 表示和 Athena 动作强相关的指标变化
- $R^{uncorr}t = \sum{j}{\lambda_j \cdot \Delta M_{j,t}^{uncorr}}$ 表示主要来自 workload 内在行为变化的指标变化
最终,论文通过离线学习选出:
- correlated 指标:
| Metrics | Final Value |
|---|---|
| Cycles $\lambda_{cycle}$ | 1.6 |
| LLC misses $\lambda_{LLC_m}$ | 0.0 |
| LLC miss latency $\lambda_{LLC_t}$ | 0.0 |
- uncorrelated 指标:
| Metrics | Final Value |
|---|---|
| Load instructions $\lambda_{load}$ | 0.6 |
| Mispredicted branches $\lambda_{MBr}$ | 1.0 |
避免 reward 被 phase behavior 污染
(这个 composite reward 可以推广到别的控制问题,不只限于 prefetch/OCP 管理)
实验
Setup
Platform: ChampSim
- 模拟类似 Intel Golden Cove 的核心,包括较大的 ROB、三级 cache、DDR4 主存等
- 默认单核内存带宽是 3.2 GB/s per core,作者认为这接近一些数据中心 CPU 的每核可分摊带宽
workload: 共 100 个 memory-intensive 单核 trace,来自:
- SPEC CPU 2006
- SPEC CPU 2017
- PARSEC
- Ligra
- CVP 商业类 workload
配置:
- 多种 cache design(CD1–CD4)
- 多种 L1/L2 预取器
- 多种 OCP
- 多种主存带宽
- 4 核 / 8 核 mix
硬件开销
Athena 每核的额外开销是 3 KB:
| Structure | Description | Size |
|---|---|---|
| QVStore | planes = 8, rows = 64, columns = 4, entry_size = 8 bits | 2 KB |
| Prefetch Accuracy Tracker | 4096-bit Bloom filter with 2 hashes | 0.5 KB |
| Cache Pollution Tracker | 4096-bit Bloom filter with 2 hashes | 0.5 KB |
面积对比:
- HPAC:0.5 KB
- MAB:0.1 KB
- TLP:6.98 KB
- Athena:3 KB
1. 默认单核配置的结果(CD1:一个 L2 预取器 + OCP)
在默认配置中,Athena 协调 POPET 和 Pythia,整体上分别比:
- Naive 高 5.7%
- HPAC 高 7.9%
- MAB 高 5.0%
在两类 workload 上都表现稳定:
- 对 prefetcher-adverse,Athena 能识别“Pythia 在损失性能”,转而偏向 POPET
- 对 prefetcher-friendly,Athena 又能识别“两者全部打开更有利于提高性能”,接近 Naive 的收益
论文还将 Athena 和离线 StaticBest 比,结果是:(基本接近)
- Athena:1.103
- StaticBest:1.111
Athena 甚至还能在某些 phase 上超过按 workload 粗粒度选择的 StaticBest,因为 Athena 是phase级动态切换
2. 不同 cache design 的结果
Athena 可以适配多个 cache level 上的多个 prefetcher
- CD2(OCP + 1 个 L1D prefetcher):
- Athena 比 TLP 平均高 8.7%,比 MAB 高 5.2%
- TLP 在 adverse workload 上能过滤一些 bad prefetch,但在 friendly workload 上会错误遏制有效预取
- CD3(OCP + 2 个 L2C prefetcher):
- Athena 比 Naive/HPAC/MAB 分别高 10.1% / 10.4% / 6.4%
- CD4(OCP + L1D prefetcher + L2C prefetcher):
- Naive 在 adverse workload 上会退化 26.8%
- TLP 因为无法管理 L2C prefetcher,仍退化 16.7%
- Athena 平均比 TLP 高 9.9%,比 MAB 高 7.0%
3. 对不同预取器 / 不同 OCP 的泛化能力
在固定 CD1 时:
- 换 L2 预取器为 Pythia / SPP+PPF / MLOP / SMS,Athena 都优于 prior methods;相对 next-best MAB 的提升分别是 5.0% / 5.4% / 3.6% / 5.0%。
- 换 OCP 为 POPET / HMP / TTP,Athena 相对 MAB 的提升分别是 5.0% / 4.7% / 8.2%。
4. 对带宽变化的适应能力
论文还专门研究了不同主存带宽。Athena 在 1.6 / 3.2 / 6.4 / 12.8 GB/s 下的 geomean speedup 分别是:
- 1.0250
- 1.1224
- 1.2469
- 1.3554
作者解释:
- 在带宽很紧张时,静态组合很难始终保持较好的效果
- 在带宽很充足时,Naive 组合往往已经能表现较好
- Athena 能随着带宽条件变化自动更频繁地选择更合适的组合
5. 多核实验
作者还做了 90 个四核 mix 和 90 个八核 mix
四核结果里,Athena 在全部 mix 上比:
- Naive 高 5.3%
- HPAC 高 7.7%
- MAB 高 3.0%
这些收益是在完全沿用单核调出来的超参数下得到的,没有专门为多核再调整参数。说明 Athena 的泛化性不错
6. ablation study
从一个无状态、只用 IPC reward 的 Stateless Athena开始,逐步加入:
- prefetcher accuracy
- OCP accuracy
- bandwidth usage
- cache pollution
- uncorrelated reward
结论:
- 没有状态信息的 Athena 甚至比 MAB 略差
- 说明: RL 本身并不自动带来好结果,关键在于状态设计
- 加入各个状态特征后性能逐步提升,表明作者选的四个特征都有增量价值
- 最后加入 uncorrelated reward 后还能进一步提升
- 说明:reward 去除混淆 workload phase 的噪声,确实有用。
Limits
1. 本质上还是“离线调参、在线学习”
Athena 的特征选择、reward 权重、超参数都是通过离线 DSE/grid search 得到
说明:
- 虽然 Athena 在线学习,但设计者其实已经在离线投入了不少训练/调优工作
- 如果平台、缓存结构、NoC 延迟模型变化更大,这套配置不一定依旧能起作用
2. 部分超参数为 0
exploration rate $\epsilon$ 是 0.0
- 意味着运行时几乎不做显式探索
- 要么状态划分和初始化足够好,几乎不需要探索
- 要么 trace-driven 场景下,探索代价太高,作者更偏向 exploitation
- 问题:当系统进入没见过的新状态时,不一定依旧能起作用
部分 reward 权重为 0.0? :$\lambda_{LLC_m}$, $\lambda_{LLC_t}$
3. reward 不是严格的因果推断
composite reward 是严格的因果推断。比如:
- mispredicted branches 被归为 uncorrelated
- load instruction 数量也被归为 uncorrelated
在大多数情况下合理,但未必严格
某些动作可能通过改变 memory stall 进而影响分支行为、执行窗口和 load retirement
4. 动作空间较粗糙
Athena 的动作空间只有 “开/关 OCP、开/关 prefetcher、调 prefetch degree”
不能:
- 选择不同 prefetcher 内部配置
- 分流不同类型请求
- 更细粒度控制 OCP 的优先级或发射策略