流水线的通用原理
- 流水线化的一个特性:提高了系统的吞吐量
计算流水线
- 在现代逻辑设计中,电路延迟以微微秒或皮秒(\(10^{-12}\)秒)为单位来计算
- 吞吐量的计算公式:(\(吞吐量=\frac{1000ps}{执行一条指令的延迟}\cdot\frac{1}{1ns}\)\)
- 单位:每秒千兆条指令(GIPS)
- 对比顺序执行和流水线执行:
- 顺序执行:
- 吞吐量=\(\frac{1000 }{300 + 20} \approx 3.12GIPS\)
- 流水线:
- 吞吐量=\(\frac{1000}{100 + 20} \approx 8.33GIPS\)
- 代价:增加了一些硬件,以及延迟的少量增加
- 顺序执行:
流水线操作的详细说明
- 减缓时钟不会影响流水线的行为 - 信号传播到流水线寄存器的输入,但是直到时钟上升时才会改变寄存器的值 - 如果时钟运行的太快,则会发生灾难性的后果: - 值可能会来不及通过组合逻辑,因此当时钟上升时,寄存器的输入还不是合法的值
流水线的局限性
不一致的划分
- 运行时钟的速率是由最慢的阶段的延迟限制的
- 这样的设计会使其他阶段出现空闲
流水线过深,收益反而下降
- 即使提高了吞吐量,但是由于延迟的增大,单位时间内能执行完成的指令数量并没有得到增加
- 寄存器更新引起的延迟问题
- 并且,吞吐量存在上限
带反馈的流水线系统
- 相邻的指令之间存在数据相关:
- 指令控制流造成的顺序相关:
这两种情况构成了后续的加载/使用数据冒险和控制冒险