Appearance
题目
若某计算机最复杂指令的执行需要完成 5 个子功能,分别由功能部件 A~E 实现,各功能部件所需时间分别为 80ps、50ps、50ps、70ps 和 50ps,采用流水线方式执行指令,流水段寄存器延时为 20ps,则 CPU 时钟周期至少为( )。
错因
A
把时钟周期算成"各段时间的平均值": ps。但流水线时钟周期由最慢段决定,不是平均——慢段没跑完就开下一个周期会让所有快段产出的数据出错。
B
只取了第二慢的段(70ps)。可能是被"取最大"和"哪一段"两个判断弄混,瞄准了 70 而不是 80。或者忘了功能部件 A 是 80ps(眼花跳过)。无论如何,最大段是 80ps。
C
取了最大段 80ps,但忘加流水段寄存器延时。流水线里每个段之间要插一个寄存器(锁存器)保存中间结果,每周期既要让段计算完成、又要让寄存器稳定写入——所以周期 = 段计算时间 + 寄存器延时。漏 20ps 就掉 C。
总解析
核心公式:
为什么是这两项相加:
- 一个时钟周期内,一个段必须完成它的计算并把结果写入下一个段间寄存器
- 段间寄存器需要一定建立时间(setup time)才能可靠存住
- 所以"段时间 + 寄存器时间"才是该段一个周期的总开销
- 整条流水线被最慢段拖累——任何更短的周期会让最慢段没跑完,产出数据无效
第一步:找最慢段
| 段 | A | B | C | D | E |
|---|---|---|---|---|---|
| 时间 (ps) | 80 | 50 | 50 | 70 | 50 |
最慢段 = A 段 = 80 ps。
第二步:加寄存器延时
最终答案是 D(100ps)。
对比:单周期 vs 多周期 vs 流水线:
| 实现方式 | 一条指令时间 | 时钟周期 |
|---|---|---|
| 单周期 | 各段时间 = 300 ps | = 300 ps(一条指令一周期) |
| 多周期 | (各段时间 + 寄存器延时) | 段时间 + 寄存器延时 = 100 ps |
| 流水线 | 仍 ≈ 5 × 100 ps = 500 ps(含填充) | 段时间 + 寄存器延时 = 100 ps |
流水线 vs 多周期 最大区别:流水线吞吐率为每周期 1 条(理想),多周期为每 5 周期 1 条。
易错点速查:
- 周期取最慢段,不是平均、不是中位数
- 必须加寄存器延时(也叫"流水段寄存器"或"段间锁存器"),通常题面会明示
- 流水线段不平衡 → 慢段是瓶颈,把 A 优化成 50ps 才能让周期降到 70ps