Appearance
题目
下列关于超标量流水线特性的叙述中,正确的是( )。
Ⅰ. 能缩短流水线功能段的处理时间 Ⅱ. 能在一个时钟周期内同时发射多条指令 Ⅲ. 能结合动态调度技术提高指令执行并行性
错因
A
发现了 Ⅱ 是超标量的核心定义,但漏判 Ⅲ。可能是把"动态调度"当作另一种独立技术,没意识到超标量与动态调度(如 Tomasulo 算法)经常配套使用——超标量提供"多个发射槽",动态调度提供"乱序填充这些槽",两者结合才能发挥最大并行度。
B
误判了 Ⅰ。超标量不缩短单个功能段的处理时间——它的并行度是来自"同一周期内多条指令并行通过同一功能段",而功能段(如 IF、ID、EX 各段)本身的延迟没变。"提高指令吞吐率"不等于"缩短功能段时间"。Ⅲ 选对,但错在 Ⅰ。
D
把 Ⅰ、Ⅱ、Ⅲ 全选。Ⅱ Ⅲ 是对的,但 Ⅰ 仍是错的(同 B 解释)。这是最容易踩的全选陷阱:看到三个看似都"提高性能"的描述就全选,没逐项辨析。
总解析
先明确超标量的定义:
超标量(Superscalar)= 单个 CPU 核内多条流水线并行,每个时钟周期可取/译/发射多条指令,靠的是多套功能部件而不是更短的功能段时间。
逐项判断:
| 项 | 叙述 | 判断 | 理由 |
|---|---|---|---|
| Ⅰ | 能缩短流水线功能段的处理时间 | ✗ 错 | 功能段时间由电路延迟决定,超标量靠"复制功能部件"提高吞吐,不缩短单段时间 |
| Ⅱ | 能在一个时钟周期内同时发射多条指令 | ✓ 对 | 这是超标量的定义 |
| Ⅲ | 能结合动态调度技术提高指令执行并行性 | ✓ 对 | 超标量 + 动态调度(Tomasulo、Reorder Buffer)是现代乱序 CPU 的标准做法 |
核心区别:
| 技术 | 主要手段 | 是否缩短功能段时间 |
|---|---|---|
| 普通流水线 | 阶段重叠 | ✗(流水段时间反而成为周期下限) |
| 超标量 | 复制功能部件,多发射 | ✗ |
| 超流水线(Superpipelined) | 把流水段切得更细 | ✓(每段时间更短,但段数更多) |
| 动态调度 | 乱序执行(让无依赖指令先做) | ✗(提高利用率,与段长无关) |
最终答案是 C(仅 Ⅱ、Ⅲ)。
示意图(理想 5 段流水线 vs 2 路超标量):
| 周期 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| 普通流水(每周期 1 条) | I1:IF | I2:IF | I3:IF | I4:IF | I5:IF | I6:IF |
| 2 路超标量(每周期 2 条) | I1,I2:IF | I3,I4:IF | I5,I6:IF | ... | ... | ... |
每段时间相同(IF 段电路延迟没变),但每周期完成的指令数翻倍——这就是超标量的本质。
易错点速查:
- 超标量 ≠ 超流水线(前者复制功能部件,后者切碎流水段)
- "提高并行度" 和 "缩短功能段时间" 是两件事,前者是吞吐量、后者是单段延迟
- 现代 CPU 几乎都是 "超标量 + 动态调度 + 多发射" 三合一,三者要会区分