乐于分享
好东西不私藏

【AI for Chips】Agent 设计出更强 CPU 预取器:芯片 AI 开始做微架构研究

【AI for Chips】Agent 设计出更强 CPU 预取器:芯片 AI 开始做微架构研究
8 月 13 日,香港科技大学团队在 arXiv 提交论文《Why Do Prefetchers Fail? Let Agents Answer》。团队把多个 AI Agent 接到 CPU 预取器的研究流程中:运行现有设计,收集仍然存在的缓存缺失,沿着程序计数器、硬件日志、源代码和局部 trace 查找原因,再用可运行的小案例复现问题。诊断成立后,Agent 生成专用预取机制,编译并接入 ChampSim,由仿真结果决定是否保留。

CPU 预取器很适合检验 Agent 的工程能力。地址预测、发出时机、缓存污染、内存带宽和队列占用会同时影响结果。一次修改即使提高了命中数量,也可能因到达太晚或占用过多资源拖慢处理器。研究流程必须同时保留程序语义、周期级事件和可重复的性能测量。

最终形成的 Mixture of Prefetchers(MoP)包含 17 个预取引擎。论文在 11 条此前未参与设计的 SPEC CPU2017 访存密集型 trace 上报告:相对无预取,几何平均 IPC 提升 61.1%;相对 Alecto、Berti 和 Pythia,按论文设置,其几何平均 IPC speedup 分别高 14.5、21.6 和 23.6 个百分点。作者还给出了 6nm 库下的 RTL 综合估算:约 110KB 状态、0.0347 mm² 面积。

论文使用 ChampSim 做单核追踪驱动仿真,每条 trace 预热 1000 万条指令,再统计 1 亿条指令。面积数字来自 RTL 综合。当前版本为 arXiv v1,实验未覆盖完整 P&R、签核、硅上运行和多核全系统负载。作者公开了训练与留出数据的划分、仿真配置、综合条件和 Agent 用量,这些信息足以复核论文的实验口径。

我读完后最关心的,是团队怎样把一条性能异常变成可合入的硬件机制。整个流程围绕当前设计留下的 miss 展开,Agent 每次处理一个可定位的问题;解释要在最小案例中复现;新增引擎还要经过编译、仿真、组合测试和留出评估。

图 1|论文首页、作者与摘要。研究由香港科技大学团队完成,于 2026 年 8 月 13 日提交 arXiv v1。图源:Sun 等,arXiv:2608.13027v1,2026-08。

一、预取器的三项约束:准确率、覆盖率、及时性

一条 load 指令到达 L1 数据缓存后,如果目标 cache line 不在缓存中,处理器需要向更下层缓存或主存取数。未完成的缺失由 MSHR 记录,相关指令在数据返回前无法继续。主存访问通常跨越数十到数百个 cycle,乱序执行只能遮住其中一部分延迟。关键 load 长时间等待时,IPC 会直接下降。IPC 表示处理器每个时钟周期完成的指令数,在相同仿真配置下,IPC 越高,通常说明内存停顿越少。

硬件预取器观察地址变化、程序计数器和历史访问,在需求指令到达前发出内存请求。数据按时进入缓存,原本的 demand miss 就会变成 cache hit。预取发得太晚,需求仍要等待;发得太早或方向错误,又会占用缓存、带宽、预取队列和 MSHR。

预取器通常同时看三个指标。准确率衡量发出的请求有多少会被使用;覆盖率衡量多少 demand miss 被消除;及时性衡量数据能否赶在需求前到达。三者互相牵制:前视深度太小会迟到,前视太远容易制造无效流量,过度保守则会留下大量可预测的缺失。

程序的访存行为很少只属于一种模式。数组遍历常见固定步长,图算法和数据库包含指针追踪,多个数据流会交错,跨页访问会打断连续性,分支历史还会改变后续地址。stride、stream、spatial、temporal 等机制各自覆盖一类规律,同一程序中往往同时出现多类规律。

架构师通常先做性能剖析,找到 miss 集中的指令,再对照源代码和 trace 提出假设,随后实现、仿真和集成。真实软件会产生数以千万计的 miss 事件,人工分析只能聚焦少数热点。论文把这些尚未解决的事件交给 Agent,并保留仿真器作为统一评价器。

二、residual miss 决定下一轮研究任务

许多芯片 Agent 系统接收人类已经定义好的任务、设计空间和目标函数,然后生成 RTL、调整参数并运行评估器。这类方法擅长在给定问题中搜索。论文进一步让运行结果产生下一轮问题:当前预取器还有哪些 miss,分别由哪条指令触发,失败来自未发请求、地址错误,还是请求到得太晚。

论文中的 residual miss 指现有预取器运行后仍未消除的 demand miss。系统按照触发 miss 的程序计数器 PC 归并事件。PC 对应一条机器指令的地址,同一 PC 反复产生缺失,通常说明这条指令背后存在稳定的数据访问行为。作者先从训练 trace 中筛出 44 个高影响 hot PC,再为每个 PC 建立独立分析任务。

每轮加入新引擎后,系统重新运行 MoP。已经被覆盖的 miss 不再进入下一轮,剩余 hot PC 会重新排序。Agent 看到的证据、待处理问题和已部署设计随仿真结果更新,模型参数保持不变。作者将这条设计轨迹称为 performance-anomaly-driven autoresearch,并用 in-context reinforcement learning 描述上一轮证据和实验判定如何进入下一轮上下文。

每个研究任务都沿着同一条证据链推进:残差 miss -> hot PC -> 硬件日志/源代码/局部 trace -> 最小复现实验 -> 模式族 -> 专用引擎 -> 仿真结果。诊断、代码和性能变化都有对应的可检查对象。

图 2|论文比较三种组织方式:人类串行研究、既有 Agent 围绕候选方案优化,以及本文围绕部署后残差持续提出新问题。图源:论文 Fig. 1,Sun 等,2026-08。

三、一轮微架构研究包含四个动作:定位、复现、生成、验收

论文把流程编号为 S1 到 S6。S1 运行当前 MoP,记录 demand access、预取发出时间、填充时间和最终命中情况,再把残留 miss 归到对应 PC。全局 miss rate 由此变成一组可以逐项处理的 hot PC。

S2 负责诊断。每个 PC 由一个独立 Agent 分析,输入包括硬件日志、相关源代码和切片后的局部 trace。工作区按 PC 隔离,其他路径只读。Agent 需要同时提交诊断结论和可运行的最小案例。小案例复现不了原始现象,诊断就在这一阶段结束。

S3 和 S4 负责形成硬件机制。系统根据 delta 分布、主导步长、多流混叠、ROB/MSHR/预取队列占用等证据,把多个 PC 归入迟到 stride、交错 stream、固定 delta fan-out、时间相关等模式族。每个模式族形成一份设计规格,写明触发条件、预测规则和集成接口。演化式代码生成 Agent 提出候选实现,编译到 ChampSim,在训练 trace 上运行并评分。

S5 负责集成。候选引擎接到 residual gate 后,只能处理前序引擎没有发出请求的访问。共享 sandbox 去除重复地址,准确率 throttle 在精度下降时限制扩展层。新引擎需要覆盖目标模式,并保持其他训练负载不退化。通过后,更新后的 MoP 回到 S1,继续处理剩余 miss。

S6 只做一次留出评估。前五个阶段使用 30 条训练 trace。全部机制冻结后,系统才读取 11 条 SPEC CPU2017 访存密集型留出 trace。作者还删除了与留出负载同名的 CPU2006 项,避免 benchmark 身份进入设计过程。61.1% 的几何平均 IPC 提升来自这组留出测试。

图 3|S1-S5 只使用训练 trace,残差持续反馈到下一轮;设计收敛后,S6 在此前未参与研究的 trace 上进行最终测量。图源:论文 Fig. 3,Sun 等,2026-08。

四、pop2 案例:86.2% 的预取晚于需求到达

论文用 pop2 的 PC 0x872bd4 展示了一次完整迭代。PC 0x872bd4 对应触发这类内存访问的机器指令地址。硬件日志显示,+16B delta 占 74.0%;源代码正在顺序处理连续的 16 字节元素;局部 trace 显示,需求大约每 32 个 cycle 跨过一条 cache line,内存填充需要 49 到 74 个 cycle。日志中 86.2% 的预取在需求访问之后才到达。

现有 stride 引擎需要观察两次跨线访问后才确认步长。时间轴上,程序在 cycle 0、32、64 依次访问 N、N+1、N+2;引擎约在 cycle 65 发出 N+3 的预取。需求在 cycle 96 到达 N+3,数据最早在 cycle 113 填充完成。地址方向已经判断正确,发出时间仍晚了至少 17 个 cycle。

S2 Agent 将故障归因为 insufficient lookahead,并用最小案例复现 demand-before-fill。S3 把 pop2 与两个 libquantum 热点归入“stride 已确认、预取到达过晚”这一模式族。S4 随后生成 K1_ROBUST_STRIDE:置信阈值保持为 3,检测到迟到后把预取深度从 3 自适应提高到 8;确认率下降时,准确率 throttle 会缩短前视距离。

另外两个 libquantum 热点提供了相同方向的证据。PC 0x401442 的 64B line delta 占 62.5%,共发出 910546 次预取,其中 69.9% 迟到,只有 12 条最终被无用驱逐;PC 0x4011ae 的 64B stride 占 77.1%,运行时 ROB 占用达到 97%,MSHR 也处于饱和状态,71.4% 的预取迟到。三处热点的访问规律都很清楚,修复重点落在前视深度。

新引擎加入后,论文记录 pop2 的 IPC 从 3.483 上升到 3.555,增幅 2.07%。设计冻结后,K1 在留出集上又贡献 1.10% 的相对基础引擎 IPC 增益,11 个留出 workload 均未退化。fotonik3d、bwaves、lbm 和 cam4 的 IPC speedup 分别增加 8.66、0.93、0.78 和 0.66 个百分点。同一机制在未参与设计的程序上继续有效。

图 4|pop2 的一个 hot PC 从三类证据、迟到诊断、最小复现走到 K1_ROBUST_STRIDE,并由仿真确认 IPC 变化。图源:论文 Fig. 2,Sun 等,2026-08。

五、17 个引擎如何共同工作:残差门控解决互相干扰

研究从 Alecto 的三个基础引擎开始,随后加入 14 个专用引擎,覆盖深度顺序流、区域流、交错流、跨页延续、邻近空间访问、字节进位步长、时间相关、长距离步长和分支历史选择等模式。论文把最终结构称为 Mixture of Prefetchers。

引擎数量增加会带来现实问题。不同预取器可能同时预测同一地址,争抢缓存容量、内存带宽、预取队列和 MSHR;某个激进机制还可能冲掉已经有用的数据。作者选择保留已经工作的引擎,让新增机制只接管尚未覆盖的访问,避免反复重写一个越来越复杂的单体预取器。

残差门控规定:所有引擎可以观察访问并训练自己的状态,但只有当前序引擎都没有发出请求时,后序引擎才有资格 issue。共享去重 sandbox 会抑制重复地址,准确率 throttle 负责限制失控的扩展层。

每个新增引擎保持独立的状态表、触发条件和发出逻辑。某个引擎验证失败时,可以单独移除或调整;已经通过的机制继续保留。研究团队也能追溯每一段性能增益由哪个引擎、哪类访问模式和哪组 trace 产生。

图 5|MoP 的 3 个基础引擎与 14 个新增专用引擎。每个引擎面向一类明确的访问模式。图源:论文子预取器表,Sun 等,2026-08。

六、留出测试结果:61.1% IPC 提升、54% miss 覆盖率

论文使用统一 ChampSim 环境评估所有方案。每条 trace 先预热 1000 万条指令,再统计 1 亿条指令;比较对象包括 SPP、Berti、Pythia 和 Alecto。Alecto 还被扩展到与 MoP 相同的 110KB 存储预算,用来区分“多给存储”与“新增残差引擎”带来的差异。

组合曲线从 Alecto 的三个基础引擎起步。14 个新增引擎逐个接入后,留出集相对基础引擎的几何平均 IPC 再提高 13.74%,训练集提高 3.98%。每次集成都保持持平或上升。residual gate 限制新增引擎只处理空缺,因此不会替换前序引擎已经发出的有效请求。

图 6|左图为 14 个专用引擎逐步加入后的累计增益;右图为训练与留出 workload 划分。图源:论文 Fig. 4,Sun 等,2026-08。

最终对比还包含与 MoP 同为 110KB 存储预算的 Alecto,用于排除单纯增加表容量带来的影响。MoP 相对无预取达到 61.1% 的几何平均 IPC 提升;其几何平均 IPC speedup 相对 Alecto、Berti、Pythia 分别高 14.5、21.6、23.6 个百分点。在 demand-miss coverage 上,MoP 平均消除 54% 的 L1D demand miss;Pythia、Alecto、Berti、SPP 分别为 47%、45%、35%、19%。

分 workload 的柱状图解释了平均数的来源。Berti、SPP 在规则流和 stride 负载上表现较强,在 mcf、omnetpp、xalancbmk 这类不规则负载上覆盖有限。MoP 在规则负载上接近最强基线,同时由专用引擎处理不规则访问。11 个留出 workload 中,MoP 没有成为表现最差的预取器。

图 7|11 条留出 workload 的 IPC 提升与 L1D demand-miss coverage。MoP 在论文设置下取得最高几何平均值和平均覆盖率。图源:论文 Fig. 5,Sun 等,2026-08。

硬件开销:110KB 状态与 0.0347 mm²综合面积

完整 17 引擎占用约 110KB 状态,主要由 SRAM 表组成。K5 时间相关表约 19KB,K7 分支历史索引表约 28KB;其余引擎、共享路由和去重状态合计约 63KB。状态开销集中在两类需要长历史的机制中。

作者使用 Synopsys Design Compiler,在 6nm 库 typical corner、0.75V、25℃条件下综合。11 个 OpenRAM 宏合计约 0.0341 mm²;17 个引擎、路由、去重和仲裁控制逻辑约 0.000565 mm²,总面积约 0.0347 mm²,控制逻辑占比约 1.6%。这些数字确认 RTL 可以综合,并给出了状态规模和逻辑面积。

后续工程验证还需覆盖 P&R、频率收敛、动态与漏电功耗、布线拥塞、宏布局、多核带宽竞争、全系统工作负载和硅上行为。论文尚未公开代码或完整 artifact,外部团队当前无法独立复现实验。

七、19.1 亿 Token 的分布:PC 级诊断占七成

论文披露,整轮 autoresearch 使用 DeepSeek V4 Pro,累计消耗 19.1 亿 Token,作者的用量导出记录计费为 41.66 美元。S2 的单 PC 异常分析约占 70%,S4 的演化式机制生成约占 29%,S3 分类低于 1%;S1 与 S5 由仿真器完成,不消耗 Agent Token。

S2 消耗了大部分上下文。Agent 需要读取日志、源代码和切片 trace,为 44 个 hot PC 逐项建立诊断并生成最小复现。S4 才开始搜索硬件实现。论文的用量分布显示,解释失败所需的 Token 约为代码生成阶段的 2.4 倍。

图 8|Agent Token 在各阶段的分布及累计收益曲线。后期残差更难解释,最后两个引擎消耗约 26% Token,带来 0.8 个百分点增益。图源:论文 Token 成本图,Sun 等,2026-08。

边际收益也明显下降。前期 stream 和 stride 类机制以较少 Token 带来大部分提升;最后两个新模式引擎消耗约 26% 的累计 Token,只增加 0.8 个百分点。随着容易解释的残差被消除,剩余问题更稀疏、更不规则,Agent 需要读取更多证据并尝试更多候选。

41.66 美元对应论文采用模型的用量导出记录。完整研发还包含 trace 生成、仿真计算、工程环境、验证脚本和人工审查。团队评估这类系统时,需要统计每个被接受机制的总实验成本、回归时间和最终性能收益。

人的工作也很明确:确定模拟器和评价指标,管理训练与留出数据,规定硬件接口和资源上限,审查候选机制的可解释性。Agent 承担大规模事件筛查、局部诊断和候选搜索,工程师负责实验制度与最终签核。

八、同一套研究方法可以进入 FPGA 工程

论文研究 CPU 预取器,实验环境没有包含 Vivado、Quartus 或 FPGA 板卡。它的任务组织方式可以直接映射到 FPGA 研发:EDA 工具和板级测试持续产生未解决问题,Agent 围绕一个局部问题组织证据、做小改动,再由同一套工具链复验。

在 RTL 验证里,残差可以是 failing test、coverage hole、assertion failure、formal counterexample 或波形差异。Agent 需要定位最小失败路径、构造最小 TestBench、提出局部修复,再跑编译、lint、仿真和回归。失败消失、旧用例保持通过、覆盖率没有下降后,修复才进入主分支。

在时序和 PPA 优化里,残差可以是 WNS/TNS、critical path、拥塞热点、资源异常或功耗报告。Agent 将关键路径压缩成局部逻辑锥,结合 RTL、XDC、网表和布局信息提出一项小改动,再通过综合与实现比较前后报告。目标指标没有改善,或功能回归出现时,系统回滚修改并更新下一轮假设。

在上板 Debug 里,残差可以是 ILA 波形、协议错误、触发窗口、温度/电压条件和现场复现记录。Agent 先缩小触发条件与相关信号,再建议探针、断言或状态记录方案。板上证据回流后,下一轮分析围绕尚未解释的现场异常继续。

FPGA 工程中的每条残差还要带上完整条件。同一条 WNS 需要关联器件型号、工具版本、实现策略、时钟约束和 seed;同一条板级异常需要关联 bitstream、固件版本、触发条件和采样窗口。条件没有对齐,Agent 会把两个不同实验的结果放在一起比较。

我在做 IC Coder 的过程中,也一直按这套可验证流程组织 AI for FPGA:需求、RTL、约束、脚本、日志、波形和 EDA 报告处在同一工程上下文里;修改保持小步、可归因、可回滚;编译、仿真、综合、实现和板级结果共同构成验收记录。预取器论文进一步展示了 Agent 如何参与新硬件机制的发现与验证。

结语:芯片 AI 开始参与微架构研究

在这项研究里,Agent 完成了运行残差筛查、PC 级诊断、最小案例构造、模式归类、硬件机制搜索和组合验证。最终产物包含 17 个可综合预取引擎,性能来自 11 条未参与设计的留出 trace。

现有证据停留在单核 ChampSim 仿真和 6nm RTL 综合。多核、全系统、P&R、功耗、硅上测试与外部复现仍需继续。代码和完整 artifact 若后续公开,研究社区才能进一步检查结果的稳定性和复现成本。

对芯片研发团队而言,这篇论文给出了一套可以讨论、可以拆解的工作方法:用运行失败生成研究任务,用最小实验检查诊断,用工具链验收候选机制。AI 开始承担部分微架构研究工作,也让仿真环境、数据划分、回归体系和工程审查变得更加重要。我会继续跟踪这套方法在缓存、分支预测、片上网络和 FPGA 工具链中的后续进展。

一键三连 「点赞」「转发」「小心心」

欢迎在评论区留下你的想法!

⭐ 点亮星标 ⭐

AI for EDA 前沿进展每日见