5.指令流水线
文章目录
- 5.指令流水线
- 5.1基本概念
- 5.2性能指标
- 5.3指令流水线影响因素
- 5.3.1结构相关(**资源冲突**):**互斥**
- 5.3.2==数据相关(**数据冲突**)==:**同步**
- 5.3.3控制相关(**控制冲突**)
- 5.4流水线分类
- 5.5流水线的多发技术
- 5.6==五段式流水线==
对指令执行的优化
5.1基本概念
一条指令的执行过程可以分成多个阶段或过程。根据计算机的不同,具体的分法也不同。
取指 | 分析 | 执行 |
---|
取指:根据PC内容访问主存储器,取出一条指令送到IR中。
分析:对指令操作码进行译码,按照给定的寻址方式和地址字段中的内容形成操作数的有效地址EA,并从有效地址EA中取出操作数。
执行:根据操作码字段,完成指令规定的功能,即把运算结果写到通用寄存器或主存中。
设取指、分析、执行3个阶段的时间都相等,用t表示,按以下几种执行方式分析n条指令的执行时间:
-
顺序执行
优点:控制简单,硬件代价小。
缺点:执行指令的速度较慢,在任何时刻,处理机中只有一条指令在执行,各功能部件的利用率很低。 -
一次重叠执行
优点:程序的执行时间缩短了1/3,各功能部件的利用率明显提高。
缺点:需要付出硬件上较大开销的代价,控制过程也比顺序执行复杂了。 -
两次重叠执行
与顺序执行方式相比,指令的执行时间缩短近2/3。这是一种理想的指令执行方式,在正常情况下,处理机中同时有3条指令在执行。
后两者就是使用了流水线的方法。
5.2性能指标
- 吞叶率:吞吐率是指在单位时间内流水线所完成的任务数量,或是输出结果的数量。
流水线吞吐率 ( T P ) = n T k 流水线吞吐率(TP)=\frac n {T_k} 流水线吞吐率(TP)=Tkn
-
n:任务数量;
-
Tk:处理完成n个任务所用的时间。
第一条指令可以类比加特林启动,耗时 k·△t。当完全启动之后,后续每个指令只需要耗时一个 △t。所以:
T
k
=
(
k
+
n
−
1
)
△
t
T
P
=
n
(
k
+
n
−
1
)
△
t
T_k=(k+n-1)△t\\ TP = \frac n {(k+n-1)△t}
Tk=(k+n−1)△tTP=(k+n−1)△tn
当连续输入的任务n→∞时,得最大吞吐率为TPmax=1/△t。
- 加速比:完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比。
流水线加速比 ( S ) = T 0 T k 流水线加速比(S)=\frac{T_0}{T_k} 流水线加速比(S)=TkT0
- T0表示不使用流水线时的执行时间,即顺序执行所用的时间;
- Tk表示使用流水线时的执行时间。
再以上图为例子:
T
0
=
k
n
△
t
T
k
=
(
k
+
n
−
1
)
△
t
T
P
=
k
n
k
+
n
−
1
T_0=kn△t\\ T_k=(k+n-1)△t\\\\ TP = \frac {kn} {k+n-1}
T0=kn△tTk=(k+n−1)△tTP=k+n−1kn
当连续输入的任务n→∞时,得最大加速比为Smax=k。就意味着比之前快了k倍。
- 效率:流水线的设备利用率称为流水线的效率。设备处于忙碌的时间占总时间的比例。
5.3指令流水线影响因素
MIPS架构下,把一条指令的执行划分为5个机器周期:(大部分RISC都是)
实际情况下,可以各部件的耗时都不一样。但是为方便流水线的设计,将每个阶段的耗时取成一样,以最长耗时为准。
流水线每一个功能段部件后面都要有一个缓冲寄存器,或称为锁存器,其作用是保存本流水段的执行结果,提供给下一流水段使用。
影响因素:
5.3.1结构相关(资源冲突):互斥
由于多条指令在同一时刻争用同一资源而形成的冲突称为结构相关。
当两个指令同时访问一个主存或者寄存器,就会发生冲突。
- 方案一:让后面的指令暂停一个周期再执行。
- 方案二:换用不同的存储器。
5.3.2数据相关(数据冲突):同步
数据相关指在一个程序中,存在必须等前一条指令执行完才能执行后一条指令的情况,则这两条指令即为数据相关。
两个指令用到的数据有前后关系。
解决方法:
- 方案一:把要用到是指令暂停执行,直到前面数据处理完成。可分为硬件、软件两种实现方式。
- 硬件阻塞(stall)
- 软件插入NOP空指令
-
方案二:数据旁路技术:就是当前一条指令执行完之后,不等这条指令全部执行结束,提前把要用到是数据传递给下一条指令。
-
方案三:编译优化:通过编译器调整指令顺序来解决数据相关。
就是把用不到这个数据的下面的指令先拿到前面来。
5.3.3控制相关(控制冲突)
当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关。
出现转移指令、函数调用等,使当前指令和跳转之间的指令不被执行了。
- 方案一:转移指令分支预测。简单预测(永远猜ture或false)、动态预测(根据历史情况动态调)。
- 方案二:预取转移成功和不成功两个控制流方向上的目标指。
- 方案三:加快和提前形成条件码。
- 方案四:提高转移方向的猜准率。
5.4流水线分类
套娃
根据流水线使用的级别的不同,流水线可分为部件功能级流水线、处理机级流水线和处理机间流水线。
- 部件功能级流水:就是将复杂的算术逻辑运算组成流水线工作方式。例如,可将浮点加法操作分成求阶差、对阶、尾数相加以及结果规格化等4个子过程。
- 处理机级流水:是把一条指令解释过程分成多个子过程,如前面提到的取指、译码、执行、访存及写回5个子过程。
- 处理机间流水:是一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放在与下一个处理机所共享的存储器中。
按流水线可以完成的功能,流水线可分为单功能流水线和多功能流水线。
- 单功能流水线指只能实现一种固定的专门功能的流水线。
- 多功能流水线指通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线。
按同一时间内各段之间的连接方式,流水线可分为静态流水线和动态流水线。
- 静态流水线指在同一时间内,流水线的各段只能按同一种功能的连接方式工作。
- 动态流水线指在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。这样对提高流水线的效率很有好处,但会使流水线控制变得很复杂。
按流水线的各个功能段之间是否有反馈信号,流水线可分为线性流水线与非线性流水线。
- 线性流水线中,从输入到输出,每个功能段只允许经过一次,不存在反馈回路。
- 非线性流水线存在反馈回路,从输入到输出过程中,某些功能段将数次通过流水线,这种流水线适合进行线性递归的运算。
5.5流水线的多发技术
-
超标量技术
-
超流水技术
-
超长指令字
-
超标量技术
空分复用
每个时钟周期内可并发多条独立指令。
要配置多个功能部件。
不能调整指令的执行顺序。通过编译优化技术,把可并行执行的指令搭配起来。
- 超流水技术
时分复用
在一个时钟周期内再分段。
在一个时钟周期内一个功能部件使用多次。
不能调整指令的执行顺序。靠编译程序解决优化问题
- 超长指令字
由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条。
具有多个操作码字段的超长指令字(可达几百位),采用多个处理部件。
5.6五段式流水线
MIPS架构下,把一条指令的执行划分为5个机器周期:(大部分RISC都是)
①IF取指→②ID译码&取数→③EX执行→④M访存→⑤WB写回寄存器
考试中常见的五类指令:
运算类指令、LOAD指令、STRE指令、条件转移指令、无条件转移指令
- 运算类指令
- lF:根据PC从指令Cache取指令至IF段的锁存器;
- ID:取出操作数至ID段锁存器;
- EX:运算,将结果存入EX段锁存器;
- M:空段;
- WB:将运算结果写回指定寄存器。
**【注意】**关于主存M,通常,RISC处理器只有“取数LOAD”和“存数STORE”指令才能访问主存。
- LOAD指令
LOAD Rd, 996(Rs)
(996+(Rs))→Rd
- lF:根据PC从指令Cache取指令至IF段的锁存器;
- ID:将基址寄存器的值放到锁存器A,将偏移量的值放到Imm;
- EX:运算,得到有效地址EA,将结果存入EX段锁存器;
- M:从数据Cache中取数并放入锁存器;
- WB:将取出的数写回寄存器。
- STORE指令
STORE Rs, 997(Rd)
Rs→(997+(Rd))
- lF:根据PC从指令Cache取指令至IF段的锁存器;
- ID:将基址寄存器的值放到锁存器A,将偏移量的值放到Imm。将要存的数放到B;
- EX:运算,得到有效地址。并将锁存器B的内容放到锁存器Store。
- M:写入数据Cache;
- WB:空段。
- 条件转移指令
beq Rs, Rt, #偏移量
若(Rs)==(Rt),则(PC)+指令字长+(偏移量×指令字长)→PC;否则(PC)+指令字长→PC。
这里的+指令字长相当于+1
- IF:根据PC从指令Cache取指令至IF段的锁存器;
- ID:进行比较的两个数放入锁存器A、B,偏移量放入lmm;
- EX:运算,比较两个数;
- M:将目标PC值写回PC;
- WB:空段。
【注意】很多教材把写回PC的功能段称为“WrPC段(writePC)”,其耗时比M段更短,可安排在M段时间内完成。
- 无条件转移指令
jmp #偏移量
(PC)+指令字长+(偏移量×指令字长)→PC
- lF:根据PC从指令Cache取指令至IF段的锁存器;
- ID:偏移量放入Imm;
- EX:将目标PC值写回PC;
- M:空段;
- WB:空段。
【注意】“WrPC段”耗时比EX段更短,可安排在EX段时间内完成(尽量靠前)。WrPC段越早完成,就越能避免控制冲突。当然,也有的地方会在WB段时间内才修改PC的值。