ROB:现代CPU的"指挥中心"
超标量处理器每周期发射多条指令,但程序要求顺序执行的效果。Reorder Buffer(ROB,重排序缓冲区)就是这个矛盾的核心解决方案——让指令乱序执行,但顺序提交。这篇聊聊ROB的作用、实现和演进。
1. ROB的核心作用
1.1 乱序执行与顺序提交
现代CPU的流水线:
- 取指/译码:按程序顺序
- 发射/执行:乱序(只要数据就绪)
- 提交:必须按程序顺序
ROB位于第3步,确保即使指令乱序执行,最终结果也按程序顺序可见。
为什么必须顺序提交?
- 精确中断:异常发生时,CPU状态必须与程序顺序一致
- 分支预测失败:可以丢弃推测执行的指令,恢复正确状态
- 内存模型:多线程程序依赖顺序执行的语义
1.2 寄存器重命名
早期ROB(如Intel P6)还承担寄存器重命名的功能[1][2]:
- 每条指令分配一个ROB entry
- 指令结果暂存在ROB中
- 退休时复制到Retirement Register File (RRF)
这种方式简单,但有问题:
- 每条指令都占ROB entry,即使没有目的寄存器(如分支指令)
- 退休时需要数据搬运(ROB→RRF),增加功耗
- ROB和RRF都需要大量读端口
1.3 推测执行支持
分支预测后,指令是"推测"的,可能错误。ROB保存这些推测状态:
- 预测正确:指令按顺序提交
- 预测错误:丢弃ROB中所有推测指令,恢复状态
2. ROB的硬件结构
2.1 典型ROB Entry
| 字段 | 作用 |
|---|---|
| Complete | 指令是否执行完成 |
| Areg | 逻辑寄存器编号(如R1) |
| Preg | 物理寄存器编号(如P10) |
| Old Preg | 旧物理寄存器,用于异常恢复 |
| PC | 指令地址,用于异常定位 |
| Exception | 异常类型(如缺页、除零) |
| Type | 指令类型(ALU/Load/Store/分支) |
2.2 工作流程
分发(Dispatch):
- 指令译码后分配ROB entry
- 初始化Complete=0
- 记录Areg、PC等信息
执行(Execute):
- 指令乱序执行
- 结果写入Preg
- Complete置1
- 若异常,记录Exception字段
退休(Commit):
- 按程序顺序检查Complete=1的指令
- 正常指令:结果写入ARF或内存(Store),释放ROB entry
- 异常指令:触发中断,回滚到Old Preg状态
3. 实际处理器案例
3.1 Intel的演进
| 处理器 | 架构 | ROB Entries | 备注 |
|---|---|---|---|
| Pentium Pro | P6 | 40 | 首款乱序执行x86[1] |
| Core 2 | P6改进 | 96 | - |
| Nehalem | P6改进 | 128 | - |
| Sandy Bridge | 新架构 | 168 | 改用统一PRF[4][5] |
| Golden Cove | 新架构 | 512 | 巨大提升[6][7] |
| Lion Cove | 新架构 | 576 | 下一代[8] |
关键转变:Sandy Bridge从ROB-based转向统一PRF[5]:
- P6:ROB既存指令状态,又存数据
- Sandy Bridge:ROB只存状态,数据存PRF
- 优势:减少数据搬运,降低功耗,提升频率
3.2 AMD的演进
| 处理器 | ROB Entries | 特点 |
|---|---|---|
| Zen 1 | 192 | - |
| Zen 2 | 224 | - |
| Zen 3 | 256 | - |
| Zen 4 | 320 | - |
| Zen 5 | 448 | 大幅提升[9] |
AMD的ROB相对较小,但通过其他机制(如大μOp Cache)补偿。
3.3 ARM与龙芯
| 处理器 | ROB Entries | 特点 |
|---|---|---|
| ARM Cortex-A73 | 128 | 中等规模 |
| ARM Cortex-X1 | ~224 | 大核设计 |
| 龙芯3A5000 | 128 | 国产起步[10][11] |
| 龙芯3A6000 | 256 | 翻倍提升[12] |
龙芯3A6000的256-entry ROB与AMD Zen 3相当,但比Intel Golden Cove的512小一半。
4. ROB大小的影响
4.1 为什么ROB越大越好?
ROB决定了指令窗口大小——能同时追踪多少条乱序执行的指令。
更大的ROB意味着:
- 更深的乱序执行:可以覆盖更大的内存延迟
- 更多的指令级并行:发现更多独立指令
- 更好的分支预测恢复:可以推测执行更远
4.2 边际收益递减
但ROB不是越大越好:
- 面积成本:ROB是大型结构,占用芯片面积
- 功耗:更大的ROB需要更多静态功耗
- 复杂度:更大的ROB需要更复杂的调度逻辑
Intel Golden Cove的512-entry ROB已经很大,Lion Cove提升到576,收益可能有限。
4.3 与其他结构的平衡
ROB需要与其他结构匹配[12]:
- 寄存器文件:ROB大,需要更多物理寄存器
- Load/Store Queue:需要能容纳足够多的内存操作
- Scheduler:需要能调度足够多的待执行指令
龙芯3A6000的设计[12]:
- ROB: 256 entries
- Integer Register File: 192 entries
- FP Register File: 192 entries
- Load Queue: 80 entries
- Store Queue: 64 entries
这种配置相对平衡,避免了"大ROB小寄存器"的瓶颈。
5. ROB的替代:统一PRF
5.1 P6的问题
Intel P6架构(Pentium Pro到Core 2)的ROB既存指令状态,又存数据[1][5]:
- 每个ROB entry包含结果数据字段
- 退休时需要搬运数据到RRF
- ROB和RRF都需要大量端口
5.2 Sandy Bridge的改进
Sandy Bridge改用统一物理寄存器文件(Unified PRF)[4][5]:
- ROB只存指令状态(Complete、Exception等)
- 数据存在独立的PRF
- 退休时只需更新映射关系,无需数据搬运
优势:
- 减少数据搬运,降低功耗
- ROB和PRF可以独立优化
- 更好的热量分布(避免ROB成为热点)
代价:
- 需要额外的PRF结构
- 需要管理PRF的空闲列表
- 需要两个RAT(前端RAT和退休RAT)
5.3 现代趋势
现代高性能CPU普遍采用统一PRF:
- Intel:Sandy Bridge及以后
- AMD:Zen及以后
- ARM:Cortex-A57及以后
ROB-based设计主要用于:
- 低功耗嵌入式处理器
- 教学/研究用途(设计简单)
6. 总结
| 特性 | ROB-based (P6) | 统一PRF (现代) |
|---|---|---|
| 数据存储 | ROB entry | 独立PRF |
| 退休操作 | 数据搬运 | 更新映射 |
| 功耗 | 较高 | 较低 |
| 复杂度 | 较低 | 较高 |
| 主流应用 | 历史/嵌入式 | 现代高性能CPU |
ROB的核心价值:
- 支持乱序执行,提升IPC
- 保证顺序提交,满足精确中断
- 支持推测执行,提升分支预测效率
关键洞察:
- ROB大小决定了指令窗口,影响乱序执行深度
- 现代CPU从ROB-based转向统一PRF,追求能效
- ROB需要与寄存器文件、LSQ等结构平衡设计
理解ROB,就能理解为什么现代CPU能在保持程序正确性的同时,实现深度乱序执行和高性能。
参考
-
University of Washington. Reorder Buffer Implementation (Pentium Pro). ↩ ↩ ↩ ↩
-
University of Washington. Reorder Buffer Implementation. ↩
-
University of Washington. Reorder Buffer Implementation (Pentium Pro) slides. ↩
-
WikiChip. Sandy Bridge (client) - Microarchitectures - Intel. ↩ ↩
-
Ars Technica. Intel's next must-have upgrade: a look at Sandy Bridge. PRF vs ROB. ↩ ↩ ↩ ↩
-
ACM. ATR: Out-of-Order Register Release Exploiting Atomic Regions. Golden Cove 512-entry ROB. ↩
-
WikiChip. Golden Cove - Microarchitectures - Intel. ↩
-
HWCooling. Intel's new P-Core: Lion Cove is the biggest change since Nehalem. 576-entry ROB. ↩
-
Hardware Times. AMD Zen vs Zen 2 vs Zen 3 vs Zen 4 vs Zen 5 Core Architecture. ↩
-
哔哩哔哩. 龙芯3A5000:中国的最佳选择? ↩
-
Chips and Cheese. Loongson's 3A5000: China's Best Shot? ↩
-
Chips and Cheese. Loongson 3A6000: A Star among Chinese CPUs. 256-entry ROB. ↩ ↩ ↩