这篇论文提出的是 Micro-Armed Bandit(MICRO 2023)

TLDR:

  1. 发现微架构决策问题中动作空间具有时间同质性(temporal homogeneity)——在较长时间窗口内,最优动作基本不变
  2. 基于这一性质,用最简单的 RL 形式——Multi-Armed Bandit (MAB) 替代复杂的 MDP-RL,大幅降低复杂度和存储开销
  3. 采用 Discounted Upper Confidence Bound (DUCB) 算法,存储开销仅约 100 字节
  4. 在 data prefetching 和 SMT instruction fetch 两个用例上验证了有效性和可复用性

背景和动机

背景: 在线强化学习(Online RL)因其高适应性和无需离线训练的特点,被广泛用于微架构决策,如 prefetching、cache replacement、资源管理等。

现有问题:

  1. 复杂度和存储开销高: 现有硬件 RL agent(如 Pythia 基于 SARSA)将环境建模为 MDP,需要维护大量状态-动作值,存储开销大(Pythia 需 24KB)
  2. 不可复用: 大多数 RL agent 为特定问题定制,每个新用例都需要重新设计和验证

相关工作

  • Pythia: Bera et al., “Pythia: A Customizable Hardware Prefetching Framework Using Online Reinforcement Learning,” MICRO 2021
  • MLOP: Shi et al., “A Hierarchical Neural Model of Data Prefetching,” ASPLOS 2021
  • Bingo: Bakshalipour et al., “Bingo Spatial Data Prefetcher,” HPCA 2019
  • Ipek et al.: “Self-Optimizing Memory Controllers: A Reinforcement Learning Approach,” ISCA 2008
  • Cohmeleon: Zuckerman et al., “Cohmeleon: Learning-Based Orchestration of Accelerator Coherence in Heterogeneous SoCs,” MICRO 2021
  • Choi & Yeung: “Learning-Based SMT Processor Resource Distribution via Hill-Climbing,” ISCA 2006

Insight: Temporal Homogeneity

微架构决策问题的动作空间具有时间同质性(temporal homogeneity):在给定时间窗口内,最优动作基本保持不变

论文将 RL 问题分为 3 类:

  • MDP-RL:状态多, 复杂度最高
  • Contextual Bandit:比 MDP 简化,但保留上下文状态
  • Multi-Armed Bandit:直接把环境压成单状态,只学“哪个动作总体最好”

通常认为 MAB 不适合复杂硬件控制,但作者发现:在一些微体系结构问题里,某一段时间窗口内真正“有用”的动作只占很小一部分,而且最优动作在该时间段内相对稳定。

  • 这意味着不一定非要精确建模状态转移,只要动作空间在时间上有“局部稳定性”,就可以把问题粗略建模为单状态 RL,用 MAB 来逼近最优决策
  • 而且可以直接把 RL 的硬件复杂度从“状态数 × 动作数”降到了“动作数”

在预取场景中,如果直接把动作定义成“offset + degree”的组合,那么不同 degree/offset 在不同程序阶段确实有不同效果。

论文通过观察一个强 RL 预取器 Pythia 的动作分布,发现:

  • Pythia 支持 16 个 offset × 4 个 degree = 64 个动作;
  • 在 SPEC 的 1B 指令轨迹上,平均最常选动作占 60%;
  • 第二常选动作再占 15%;
  • 即:整个动作空间的约 3% 就覆盖了 75% 的动作选择

这说明预取动作空间具有明显的时间同质性。

但论文也指出 MAB 无法区分 cache line 地址, PC 等细粒度状态,因此不能直接用来给“每一次访问”决定统一的最佳 offset/degree;否则会过度粗化

但是对于多预取器的管理而言,不存在上述问题,MAB 非常适合此类粗粒度动作:

  • 细粒度模式识别仍由传统预取器完成
  • Bandit 只做预取器的管理

核心设计

Micro-Armed Bandit(简称 Bandit)是一个轻量级硬件 RL agent,基于 DUCB 算法:

  1. DUCB 算法替代简单的 UCB/ε-Greedy,通过折扣因子 γ 适应非平稳环境(程序阶段变化)
  2. 两个微架构适配修改:奖励归一化 + 随机重启机制,解决跨 benchmark IPC 差异和多核干扰问题
  3. 两个应用场景:prefetching coordinator(协调多个轻量级预取器的 degree/type)和 SMT fetch PG policy(同时控制 fetch priority 和 fetch gating)

1. DUCB 算法

三种 MAB 算法对比:

  • ε-Greedy:
    • 以概率 1−ϵ 选当前平均 reward 最高的动作,以概率 ϵ 随机探索
    • 探索是随机的
    • 探索不随时间自然衰减
    • 探索效率较低
  • UCB(Upper Confidence Bound):
    • 选择公式:平均 reward + 探索边界 $r_i + c\sqrt{\frac{\ln(n_{total})}{n_i}}$
    • 如果某个动作很少被选过,它的 $n_i$ 小,探索项就大,因此更容易再次被尝试
    • 随着时间推移,探索项自然衰减
    • 不遗忘历史,无法适应阶段变化
  • DUCB(Discounted Upper Confidence Bound):
    • 在 UCB 基础上引入折扣因子 γ(<1)
    • 在 updSels 中对所有 arm 的选择次数 $n_i$ 乘以 γ 进行衰减,使得 agent 能”遗忘”旧行为,适应程序阶段变化

论文认为微体系结构场景中 workload 行为随时间变化,DUCB 比 UCB 更合适,也更不容易长期困在次优动作。

ε-Greedy Upper Confidence Bound Discounted Upper Confidence Bound
nextArm $arm \leftarrow \begin{cases} \arg\max{r_i} & \text{with prob. } 1-\epsilon \ \text{random arm} & \text{with prob. } \epsilon \end{cases}$ $arm \leftarrow \arg\max\left{r_i + c\sqrt{\frac{\ln(n_{total})}{n_i}}\right}$ $arm \leftarrow \arg\max\left{r_i + c\sqrt{\frac{\ln(n_{total})}{n_i}}\right}$
updSels $n_{arm} \leftarrow n_{arm}+1$
$n_{total} \leftarrow n_{total}+1$
$n_{arm} \leftarrow n_{arm}+1$
$n_{total} \leftarrow n_{total}+1$
$n_i \leftarrow \gamma \times n_i,\ \forall i \in [1,M]$
$n_{arm} \leftarrow n_{arm}+1$
$n_{total} \leftarrow \gamma \times n_{total}+1$
updRew $r_{arm} \leftarrow \dfrac{r_{arm} \ast (n_{arm}-1) + r_{step}}{n_{arm}}$ $r_{arm} \leftarrow \dfrac{r_{arm} \ast (n_{arm}-1) + r_{step}}{n_{arm}}$ $r_{arm} \leftarrow \dfrac{r_{arm} \ast (n_{arm}-1) + r_{step}}{n_{arm}}$

MAB 算法框架:

  • Input: M arms
  • Variables:
    • $r_i$ : arm i 的平均 reward
    • $n_i$ : arm i 被选过的次数
  1. Initial Round Robin Phase
    • ntotal ← 0
    • 依次对所有的 arm:
      • $n_i += 1$
      • $n_{total} += 1$
      • 接收到 reward 反馈后 $r_i = r_{step}$
  2. Main Loop
    • arm = nextArm()
    • updSels(arm)
    • 接收到 reward 反馈后 $r_{arm}$ = updRew($r_{step}$)

2. 微架构环境适配

Reward 归一化

问题:如果统一使用 IPC 作为 reward,不同 benchmark 的 IPC 量级差异很大,那么同一个探索常数 c 对低 IPC 程序会显得过强,对高 IPC 程序会显得过弱。
结果导致低 IPC 程序被过度探索。

解决方案:在初始 round-robin 试完所有动作后,计算一个初始平均奖励 $r_{avg}$,用它去归一化后续 reward,这样不同 benchmark 上的探索强度更一致

多核随机重启

问题:多个核都在跑 MAB 时,核间干扰会污染 reward。比如某个核选了非常激进的预取动作,把 DRAM 带宽抢走,其他核 IPC 下降,这些核可能误以为“自己当前在尝试的动作不好”,从而错误学习

解决方案:加入一个小概率 $rr_restart_prob$ 的重新执行 initial round-robin phase 机制,但不清空已有统计($r_i$ 和 $n_i$)。这样每个核有机会在更稳定的环境中重新评估所有动作
(但这并不是完美解法,只是一种缓解手段)

Bandit 在多核场景下的根本问题:独立代理 + 局部 reward 会导致竞争与误归因

2025 MICRO µMama 正是顺着这条线继续做的

3. 硬件结构

Bandit 的硬件主要由三部分构成:

  • nTable:记录每个 arm 被选过多少次 $n_i$
  • rTable:记录每个 arm 当前平均奖励 $r_i$
  • 算术单元 + 控制逻辑:计算 potential, 更新计数和 reward, 把所选动作通知子预取器

Bandit 的工作流程:

  1. 顺序读出所有 arm 的 $n_i$ 和 $r_i$
  2. 计算出每个 arm 的 potential
  3. 选出最大的 arm
  4. 把该 arm 配置发给预取器或 SMT fetch 控制逻辑
  5. bandit step 结束后,根据硬件计数器算出此次 step reward
  6. 更新 rTable/nTable

4. 两个应用场景

多预取器管理

Bandit 作为 coordinator 控制一组轻量预取器(next-line、stream、stride)的开关和 degree

  • 共 11 个 arm
  • 每个 arm 编码:
    • next-line 开/关
    • stream prefetcher 的 degree
    • stride prefetcher 的 degree
  • Bandit step 定义:1000 次 L2 demand access

SMT Instruction Fetch

Bandit 控制 fetch Priority & Gating (PG) policy:

  • fetch priority policy:优先从哪个线程 fetch
  • fetch gating policy:是否因为某个线程过度占用 IQ/ROB/IRF/LSQ 而暂时停止 fetch instruction

论文将这两个决策合成 fetch Priority & Gating (PG) policy,扩展了 Choi & Yeung 的 Hill Climbing 方案:

  • 4 种 fetch priority policy(BrC, IC, LSQC, RR)× 16 种 fetch gating 配置 = 64 种 PG policy
  • 从中裁剪出 6 个高效 arm
  • Bandit step = 32 个 Hill Climbing epoch(每 epoch = 64k cycles)
  • Hill Climbing 在 Bandit 选定的 arm 下运行,负责调优 occupancy threshold

利用 temporal homogeneity:一段时间内,某种 PG policy 往往持续有效

5. 硬件开销

  • Bandit 的开销随 arm 数线性增长;
  • 若 r 用 float, n 用 unsigned int,每个 arm 只要 8B
  • 预取场景中 11 个 arm 时总存储 < 100 字节,面积 0.00044 mm²,功耗 0.11 mW(10nm),相对 server 级 CPU 开销 < 0.003%

关键路径延迟: < 500 cycle,小于 bandit step 持续时间(128k cycle for prefetching)

在 step 切换的 500 个 cycle 内存在滞后


实验 Setup

Prefetching:

  • 实验平台:ChampSim(trace-driven)
  • workload:SPEC06, SPEC17, PARSEC, Ligra, CloudSuite, DPC-3 traces
  • 系统设置:类 Intel Skylake 核,L2=256KB 8-way,LLC=2MB 16-way;也测试了 L2=1MB, LLC=1.5MB 配置
  • 单核跑 1B instructions,4 核跑 250M/core

SMT Instruction Fetch:

  • 实验平台:Gem5 v20 + SecSMT(支持 2-thread SMT)
  • workload:22 个 SPEC17 应用,226 个 2-thread mix
  • 系统设置:类 Intel Skylake 核,ROB=224, IQ=97, 16B fetch width
  1. Prefetch 场景:
参数
Bandit Algorithm DUCB
γ 0.999
c 0.04
# Arms 11
Bandit Step 1000 L2 acc
# Trackers in Streamer 64
# Trackers in Stride 64
rr_restart_prob (4 cores) 0.001
  1. SMT 场景:
参数
Bandit Algorithm DUCB
γ 0.975
c 0.01
# Arms 6
Bandit Step-RR 32 HillClimb Epochs
Bandit Step 2 HillClimb Epochs
Hill Climbing Epoch 64k cycles
Hill Climbing δ 2

实验结果

实验 1: MAB 算法对比(Tune Set)

设计:在 tune set 上比较 Best Static arm、Single(探索后固定)、Periodic、ε-Greedy、UCB、DUCB。

结果(prefetching,相对 best static arm 的 IPC 百分比):

  • DUCB gmean = 99.1%,最佳
  • UCB gmean = 98.8%
  • Pythia gmean = 98.4%
  • DUCB max = 101.6%(超越 best static,因能适应阶段变化)

结论:DUCB 是最优 MAB 算法,其折扣机制使其能捕捉程序阶段变化,甚至超越静态最优 arm。

实验 2: Prefetching 单核性能

设计:比较 Stride、Bingo、MLOP、Pythia、Bandit 在所有 trace 上的 geomean IPC。

结果(Figure 8,IPC normalized to no-L2-prefetcher):

  • Bandit 超过 Stride 9%、Bingo 2.6%、MLOP 2.3%
  • Bandit 与 Pythia 仅差 0.2%(Pythia 存储 24KB vs Bandit < 100B)

结论:Bandit 以极低存储实现了接近 SOTA 的预取性能。

实验 3: 带宽受限场景

设计:扫描 DRAM 带宽从 150 MTPS 到 9600 MTPS,对比 Bandit 和 Pythia。

结果:在最受限配置(150 MTPS)下,Bandit 超过 Pythia 2.5%。因为 Bandit 直接以 IPC 为奖励,能自动学会在带宽受限时选择保守配置。

结论:Bandit 在带宽受限场景下优于 Pythia,无需显式带宽感知。

实验 4: 4 核多核性能

设计:4 核各跑相同或不同应用,对比各预取器。

结果:Bandit 超过 Stride 6%、MLOP 2.4%、Bingo 4.0%,但略低于 Pythia 1.0%(因多核并行探索时奖励更噪声)。

结论:多核性能良好,但核间干扰导致的噪声奖励是未来改进方向。

实验 5: SMT Fetch Policy

设计:226 个 2-thread mix,比较 Bandit 相对 Choi policy 的 IPC。

结果:

  • Bandit 在 36 个 mix 中超过 Choi 4% 以上(最高 36%),仅 6 个 mix 中 Choi 更好
  • 总体 geomean speedup = 2.2% over Choi,7% over plain ICount
  • Bandit 减少 rename stall,增加 rename running cycle 2.6%(因能感知 SQ 等结构,减少保守的 fetch gating)

结论:Bandit 作为通用 RL agent 可以有效替代手工设计的 SMT 资源管理策略。


Limits

  1. 时间同质性是前提假设:对于动作空间变化极快的问题(temporal heterogeneous),MAB 将无法有效工作
  2. 无法区分环境状态:Bandit 将所有状态坍缩为单状态,无法为不同 PC 或 cache line 选择不同动作
  3. 多核干扰:多核并行探索时,一个核的激进选择导致其他核的奖励噪声化。随机重启只是部分缓解,不是根本解决方案
  4. 超参数需要 tune set 调优:γ、c、bandit step 等参数对不同用例需要不同取值,且最优值因应用而异
  5. 延迟较长: 在 step 切换的 500 个 cycle 内存在滞后