Skip to content

Ch3-- ILP & its exploration

:material-circle-edit-outline: 约 987 个字 :material-clock-time-two-outline: 预计阅读时间 3 分钟

Ch3-0 Extending 5-stage pipeline to support multicycle operations

计算机体系结构2024-10-14第3-4节

EX 阶段拓展

我们将尝试缓解结构 hazard

对于一些非 common case,我们目前的五阶段流水线处理器还是有难处的

例如乘法、除法指令,浮点数相关运算等等,其本质要进行几十轮的ALU运算,产生几十个stall

我们希望进行改进,即能支持多周期操作,又不至于打断程序太久

我们可以将 EX 阶段拆分为多个专业的部件 function unit,根据指令类型使用不同部件

image-20241028173341746

image-20241028175222143

我们用两种指标来评价一个流水线里的组件

  • latency,function unit time,即指令从输入这个组件到得到结果所经过的cycle
    • 还有一个 latency 是指下一条指令等上一条指令多久才能使用 function unit
      • 显然其为 function unit time -1 clock cycle
    • 我们课上得 latency 特指 function unit time
  • initiation interval,即一个 function unit 面对相同两个操作,一个使用了,另一个隔几个周期才能使用
    • 对于完全流水线组件是 1
    • 对于非流水线组件是 function unit time

image-20241028175135525

问题

WB写口问题

乱序还可能造成同一个周期内有多个操作到了WB阶段,但EX到WB阶段是只有一条路的,而且如果指令在EX阶段内出现异常,我们还需要只禁止这个指令进入WB阶段,允许其它指令进入

我们借助一个移位寄存器来解决这个问题

Additional Hardware: a shift register+ write conflict logic

对于ID阶段的指令进行检查,如需要进入WB阶段,就在移位寄存器上特定位置置1,这个特定位置是根据从检查到这个指令进入WB经过了几个周期来确定

例如,如果一个指令只在EX指令三个周期就在寄存器第三位 置1,随着寄存器每周期的右移,这个 1会在指令正好离开EX阶段时到达最低位

  • 如果对应位置已经置1,就 stall,等一周期再看

最低位会作为 EX/WB 的使能信号,控制通道开关

数据竞争

计组讲的 data hazard 是 RAW,是 true data dependent,只能 stall

WAW 和 WAR 实际上都是命名相关的,就是可以通过换一个寄存器使用来解决的

image-20241028183435776

对 EX 阶段的拓展会造成一个问题,不同操作时长不同,先开始的操作可能比较慢,后来的操作比较快,后来的就先一步进入WB阶段,这就乱序了

RAW

在 ID 阶段检查

image-20241029104508007

注意一个问题,我们现在的流水线是按序输入,stall 信号是传送到了前面所有阶段的,即 stall 是后面所有指令都 stall,保证指令顺序一致,所以ADD指令IF后有一个stall

WAW

在 ID 阶段检查

WB 阶段的乱序可能会造成的 WAW,就是指相邻的计算操作出现 WB 乱序的情况

原本两个指令A、B先后执行,寄存器上是B覆盖A的结果,但是如果有乱序可能是A覆盖B的结果

解决办法

通过写口寄存器,每条指令置1前检查其后方是否有1,有则 stall,保证 WB 顺序与输入顺序一致

image-20241029104959393

这里 add 的 stall 是写口寄存器没预约上,ld 的 第一个 stall 是为了保持顺序,后面 两个 stall 则也是写口寄存器引起的,通过 stall 强制后一指令的 WB 晚于前一指令,防止错误覆盖

还要注意 stall 时 PC 不动

WAR

原本两个指令A、B先后执行,但乱序之后可能出现B的写先于A的读

逆天,但确实可能发生