双执行单元超标量处理器六级流水线指令发布周期求解及解法问询
超标量六级流水线指令发布时长分析
问题定义
我们需要设计一款具备双执行单元的超标量处理器六级流水线,各阶段为:
IF(Instruction Fetch):取指ID(Instruction Decode):译码RR(Read from Registers):读寄存器EX(Execution):执行,2周期WB(Write back result):写回
核心约束与定义:
- 指令不可重排序
- 每个执行周期最多可发布1条内存相关(加载/存储)指令 + 1条寄存器算术运算类非内存指令
- 延迟(Latency)定义:相关指令发布周期的延迟周期,其中
Load操作Latency为3周期,其余指令为2周期 - 指令从
RR阶段进入EX阶段即为发布
给定指令序列:
LD R21, (R20)LD R18, (R17)ADD R16, R21, R18LD R15, (R14)ADD R13, R12, R11SUB R23, R22, R24ST (R23), R10ADD R4, R21, R18ST (R3), R2ST (R1), R4
原解法思路
原解法识别出的RAW冲突指令对:
- (1) 与 (3):
ADD R16依赖LD R21的结果 - (2) 与 (3):
ADD R16依赖LD R18的结果 - (2) 与 (8):
ADD R4依赖LD R18的结果 - (6) 与 (7):
ST (R23)依赖SUB R23的结果
对应的时序图(周期01-16):
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 I01: IF ID RR EX EX WB I02: -- IF ID RR EX EX WB I03: -- -- -- -- IF ID RR EX EX WB I04: -- -- -- -- IF ID RR EX EX WB I05: -- -- -- -- -- IF ID RR EX EX WB I06: -- -- -- -- -- -- IF ID RR EX EX WB I07: -- -- -- -- -- -- -- -- IF ID RR EX EX WB I08: -- -- -- -- -- -- -- -- IF ID RR EX EX WB I09: -- -- -- -- -- -- -- -- -- IF ID RR EX EX WB I10: -- -- -- -- -- -- -- -- -- -- IF ID RR EX EX WB
解法思路点评
值得肯定的地方
- 冲突识别准确:原解法精准抓住了指令间核心的RAW写后读冲突,这些冲突确实是限制指令调度的关键因素,为后续时序安排提供了正确的依赖基础。
- 时序标注清晰:时序图采用周期与指令阶段一一对应的格式,直观展示了每条指令的流水线推进过程,且严格遵循了“指令不可重排序”的约束,逻辑上自洽。
可优化的方向
- 未充分利用超标量并行性:题目明确每个周期支持同时发布1条内存指令+1条非内存算术指令,但原时序图中几乎所有周期都仅单条指令在推进。例如:
- 周期4时,I02进入
RR阶段(内存指令),完全可以同时调度I05(算术指令)进入RR阶段并行发布,无需等到周期6才开始I05的IF阶段。 - 周期6时,I04进入
RR阶段(内存指令),可同步推进I06(算术指令)的RR阶段,进一步压缩总时长。
- 周期4时,I02进入
- LD指令延迟的调度可更高效:
Load指令Latency为3周期(发布周期的延迟周期),即I01在周期3发布(进入EX),其结果在周期6可用;I02在周期4发布,结果在周期7可用。原解法中I03的RR阶段安排在周期7是合理的,但I03的IF和ID阶段可以提前到周期4-5,无需等到周期5才开始IF,这样能更早为发布做准备。 - 无依赖指令的调度过于保守:像I09、I10这类无前置依赖的存储指令,完全可以提前到空闲周期与其他指令并行发布,不需要等到后期单独推进,浪费执行单元资源。
内容的提问来源于stack exchange,提问作者Dr. Debasish Jana
相关产品推荐
相关产品推荐

