操作系统初始化过程简介
操作系统:Interupt, Exception, Syscall
操作系统:中断、异常、系统调用简介
OOO CPU Issue Stage: Issue Queue
发射队列 (Issue Queue) / 保留站 (Reservation Station)
J. Abella, R. Canal, and A. González. Power- and Complexity-Aware Issue Queue Designs. IEEE Micro, 23(5):50–58, September–October 2003. doi:10.1109/MM.2003.1240212
任务:保存已被重命名但未被送到功能单元执行的指令
集中式 (Centralized) or 分布式 (Distributed)
实例:
- reservation stations
- IBM Power6
H.Q. Le, W.J. Starke, J.S. Fields, F.P. O’Connell, D.Q. Nguyen, B.J. Ronchetti, W.M. Sauer, E.M. Schwarz, and M.T. Vaden. IBM POWER6 Microarchitecture. IBM Journal of Research and Development, 51(6), Nov 2007.
- IBM Power6
- distributed issue queues
- Intel Netburst
D. Koufaty, and D. T. Marr. Hyperthreading Technology in the Netburst Microarchitecture. IEEE Micro, 23(2):56–65, March 2003. - Alpha 21264
E.J. McLellan, and D.A. Webb. The Alpha 21264 Microprocessor Architecture. In Proceedings of the International Conference on Computer Design, p. 90, October 05-05, 1998. - MIPS R10000
K.C. Yeager. The MIPS R10000 Superscalar Microprocessor. IEEE Micro, April 1996. doi:10.1109/40.491460
- Intel Netburst
- unified issue queues
- Intel Boosts Pentium Pro
M. Slater. Intel Boosts Pentium Pro to 200 MHz. Microprocessor Report, 9(15), November 13, 1995.
- Intel Boosts Pentium Pro
集中式发射队列 (Centralized Issue Queue, CIQ):
- 所有功能单元共用一个发射队列
- 容量需求很大: 导致仲裁电路和唤醒电路比较复杂
- 发射队列的利用率最高: 发射队列的每个 entry 对所有功能单元通用
分布式发射队列 (Distributed Issue Queue, DIQ):
- 每个功能单元使用单独的一个发射队列
- 每个发射队列的容量可以很少: 简化仲裁电路
- 发射队列的总体利用率很低
- 每个发射队列的 entry 被功能单元专用化
- 整个 CPU 可能因为某一个发射队列满而被阻塞
- 唤醒电路的设计比较复杂
- 指令分布比较分散,对唤醒电路的布线要求比较高
折中式发射队列:
- 某几个功能单元使用一个发射队列
数据捕捉式 (Data-capture) or 非数据捕捉式 (Non-data-capture)
是否采用数据捕捉式发射队列将直接决定发射阶段的流水线结构
数据捕捉式
- 在 流水线发射阶段之前重命名之后 读取物理寄存器堆
- 需要保存指令信息和源操作数的值以执行发射
- 读取的寄存器值会被写入payload RAM
- 若读取时还未计算出来,将物理寄存器编号写入发射队列,并做标记
- 指令被仲裁电路选中时
- 直接从 payload RAM 中读取源操作数,并送入功能单元
- 同时将目的寄存器编号广播,和发射队列中其他指令的源操作数对比
若有相同,在 payload RAM 中标记,唤醒时将结果直接写入 payload RAM
- 物理寄存器堆的读端口数: machine width x 2
- machine width: 每周期实际解码和重命名指令数
- 功耗会高一点:频繁的数据搬移
- 数据流动:
寄存器堆读出 -> 写入 payload RAM -> payload RAM 读出 -> 送入功能单元
- 数据流动:
一般,使用 ROB 进行重命名的设计会和数据捕捉式发射队列配合使用
非数据捕捉式
- 在 流水线发射阶段之后 读取物理寄存器堆
- 将源寄存器编号写入发射队列
- 指令被仲裁电路选中时
- 使用源寄存器编号读取物理寄存器堆
- 物理寄存器堆的读端口数: issue width $times 2$
- issue width: 每周期在功能单元中最多可以并行执行的指令数
- 一般情况下只有 issue width > machine width 的情况下,才可以尽可能挖掘并行度
数据捕捉式与非数据捕捉式对比:
| 数据捕捉式 | 非数据捕捉式 | |
|---|---|---|
| 读端口 | 少 | 多 |
| 面积 | 多(payload RAM) | 少 |
| 功耗 | 高 | 低 |
| 示例 | Intel P6 | MIPS R10K, Alpha 21264 |
压缩式 (Compressing) or 非压缩式 (Non-compressing)
压缩式发射队列
当一条指令被仲裁电路选中而离开发射队列时,当前指令以上的所有指令全部下移,以填充空隙
- 导致空闲空间永远都是处于发射队列的上部
当一条指令被分配电路分配到发射队列时,从发射队列最上面的空闲entry开始写入
- 导致发射队列中指令分布从上到下是按照“最新-最旧”的顺序排列
实现:发射队列的每个 entry 前加入多路选择器,选择上一项或当前项
- 对于每周期需要压缩多个 entry 的情况来说,多路选择器需要更多入口
- 不同 entry 的选择控制信号,设计复杂
优点:
- 分配电路实现简单
- 仲裁电路实现简单
缺点:
- 设计复杂,面积代价较大
- 功耗大:发射队列中的很多entry每个周期都要移动(类似C语言数组的删除中间元素操作)
非压缩式发射队列
当一条指令被仲裁电路选中而离开发射队列时,其他指令不会移动
导致发射队列中指令分布是随机的,不能根据指令位置判断指令年龄信息
优点:
- 功耗大大降低:指令进入发射队列后不再需要移动
- 面积大大减少:不再需要多路选择器和布线的面积开销
缺点:
- 如果实现 oldest-first 仲裁,仲裁电路设计很复杂
- 分配电路设计也很复杂
压缩式与非压缩式对比:
| 压缩式 | 非压缩式 | |
|---|---|---|
| 分配电路设计 | 简单 | 复杂 |
| 仲裁电路设计 | 简单 | 复杂 |
| 面积 | 多(多路选择器) | 少 |
| 功耗 | 高 | 低 |
| 示例 | Alpha 21264 | MIPS R10K |
OOO CPU Issue Stage: Wake Up
乱序执行 CPU 发射阶段唤醒电路简介
OOO CPU Issue Stage: Select/Arbiter
乱序执行 CPU 发射阶段仲裁电路/选择电路简介
OOO CPU Issue Stage: Allocation
乱序执行 CPU 发射阶段分配电路简介
OOO CPU Issue Stage
乱序执行 CPU 发射阶段简介
MICRO 2025 论文简介
MICRO 2025 论文简介
操作系统结构
操作系统架构分类简介
Apple MicroArchitecher
Apple 微架构简介