指令流水线

文章目录

  • 指令流水线的基本概念
    • 指令流水的定义
    • 流水线的表示方法
    • 流水线的性能指标
      • 1.吞吐率
      • 2.加速比
      • 3.效率
  • 指令流水线的影响因素喝分类
    • 指令周期的设置
    • 影响流水线的因素
    • 流水线的分类
    • 流水线的多发技术
  • 五段式指令流水线
    • 运算类指令的执行过程
    • LOAD指令的执行过程
    • STORE指令的执行过程
    • 条件转移指令的执行过程
    • 无条件转移指令的执行过程

指令流水线的基本概念

指令流水的定义

一条指令的执行过程可以分成多个阶段(或过程)
根据计算机的不同,具体的分法也不同。下面是一般的指令执行的几个阶段:
在这里插入图片描述
取指:根据PC内容访问主存储器(这里也可以是cache),取出一条指令送到IR中。
分析:对指令操作码进行译码,按照给定的寻址方式和地址字段中的内容形成操作数的有效地址EA,并从有效地址EA中取出操作数。PS:这里的操作数可能在寄存器 R i R_i Ri中,也可能在cache中
执行:根据操作码字段,完成指令规定的功能,即把运算结果写到通用寄存器或主存中。

设取指、分析、执行3个阶段的时间都相等,用t表示,按以下几种执行方式分析n条指令的执行时间:
1.顺序执行方式 总耗时= n × 3 t = 3 n t n×3t=3nt n×3t=3nt
一共n条指令,每条需要3t。
在这里插入图片描述
传统冯·诺依曼机采用顺序执行方式,又称串行执行方式。
优点:控制简单,硬件代价小。
缺点:执行指令的速度较慢,在任何时刻,处理机中只有一条指令在执行,各功能部件的利用率很低。
2.一次重叠执行方式 总耗时= 3 t + ( n − 1 ) × 2 t = ( 1 + 2 n ) t 3t+(n-1)×2t=(1+2n)t 3t+(n1)×2t=(1+2n)t
除了第一个指令3t执行完,其余只需要2t就行,因为每个指令的第一都在前一条指令最后执行时候一起开始了。
指令流水线_第1张图片
优点:程序的执行时间缩短了1/3,各功能部件的利用率明显提高。
缺点:需要付出硬件上较大开销的代价,控制过程也比顺序执行复杂了。

3.二次重叠执行方式 总耗时= 3 t + ( n − 1 ) × t = ( 2 + n ) t 3t+(n-1)×t=(2+n)t 3t+(n1)×t=(2+n)t
这里跟上面那个类似。
指令流水线_第2张图片
与顺序执行方式相比,指令的执行时间缩短近2/3。这是一种理想的指令执行方式,在正常情况下,处理机中同时有3条指令在执行。

注:也可以把每条指令的执行过程分成4个或5个阶段,分成5个阶段是比较常见的做法。

流水线的表示方法

1.指令执行过程图
指令流水线_第3张图片
主要用于分析指令执行过程以及影响流水线的因素。
2.时空图
指令流水线_第4张图片
空间:不同的阶段所对应的不同的硬件资源。
主要哦用于分析流水线的性能。

流水线的性能指标

1.吞吐率

1.吞吐率    \space\space   吞吐率是指在单位时间内流水线所完成的任务数量,或是输出结果的数量。
设任务数为 n n n;处理完成 n n n个任务所用的时间为 T k T_k Tk
则计算流水线吞吐率( T P TP TP)的最基本的公式为 T P = n T k TP=\frac{n}{T_k} TP=Tkn
理想情况下,流水线的时空图如下:
指令流水线_第5张图片
装入时间:第一条指令开始到结束。
排空时间:最后一条指令开始到结束。
设一条指令的执行分为 k k k个阶段,每个阶段耗时 Δ t \Delta t Δt,一般取 Δ t = \Delta t= Δt=一个时钟周期
T k = ( k + n − 1 ) Δ t T_k=(k+n-1)\Delta t Tk=(k+n1)Δt
流水线的实际吞吐率为
T P = n ( k + n − 1 ) Δ t TP=\frac{n}{(k+n-1)\Delta t} TP=(k+n1)Δtn
当连续输入的任务 n → ∞ n\rightarrow\infty n时,得最大吞吐率为 T P m a x = 1 / Δ t TP_{max}=1/\Delta t TPmax=1/Δt

2.加速比

完成同样一批任务,不使用流水线所用的时间使用流水线所用的时间之比。
T 0 T_0 T0表示不使用流水线时的执行时间,即顺序执行所用的时间: T k T_k Tk表示使用流水线时的执行时间
则计算流水线加速比( S S S)的基本公式为 S = T 0 T k S=\frac{T_0}{T_k} S=TkT0
指令流水线_第6张图片
单独完成一个任务消耗为 k Δ t k\Delta t kΔt,则顺序完成n个任务消耗 T 0 = n k Δ t T_0=nk\Delta t T0=nkΔt
T k = ( k + n − 1 ) Δ t T_k=(k+n-1)\Delta t Tk=(k+n1)Δt
实际加速比
S = k n Δ t ( k + n − 1 ) = k n k + n − 1 S=\frac{kn\Delta t}{(k+n-1)}=\frac{kn}{k+n-1} S=(k+n1)knΔt=k+n1kn

当连续输入的任务 n → ∞ n\rightarrow\infty n时,得最大加速比为 S m a x = k S_{max}=k Smax=k

3.效率

流水线的设备利用率称为流水线的效率。
在时空图上,流水线的效率定义为完成n个任务占用的时空区有效面积n个任务所用的时间与k个流水段所围成的时空区总面积之比。
指令流水线_第7张图片
则流水线效率( E E E)的一般公式为 E E E= n 个任务占用 k 时空区有效面积 n 个任务所用的时间与 k 个流水段所围成的时空区总面积 = T 0 k T k \frac{n个任务占用k时空区有效面积}{n个任务所用的时间与k个流水段所围成的时空区总面积}=\frac{T_0}{kT_k} n个任务所用的时间与k个流水段所围成的时空区总面积n个任务占用k时空区有效面积=kTkT0
当连续输入的任务 n → ∞ n\rightarrow\infty n时,最高效率为 E m a x = 1 E_{max}=1 Emax=1

这里的情况都是在理想情况下,所谓理想情况就是各阶段花费时间相同,每个阶段结束后能立即进入下一个阶段

指令流水线的影响因素喝分类

指令周期的设置

指令流水线_第8张图片

流水线每一个功能段部件后面都要有一个缓冲寄存器,或称为锁存器,其作用是保存本流水段的执行结果,提供给下一流水段使用。
为方便流水线的设计,将每个阶段的耗时取成一样,以最长耗时为准。即此处应将机器周期设置为100ns.
1.取指阶段:根据PC所指向的位置,去Instruction Cache里面找出当前要执行的指令,把取出的指令放到功能段的锁存器里面。
2.指令译码:除了指令译码,还要取数,从通用寄存器取放到锁存器A和B(在RISC下都是来自于通用寄存器的,如果要用贮存的,先将主存的放入到通用寄存器)。
3.执行阶段:用ALU运算A和B。Imm:立即数(可能会使用立即寻址)。运算结果可能需要写回主存也可能直接写回寄存器。
4.访问主存:访问指令要操作的数据Data cache(Cache分为指令cache和数据cache,可以使第一个阶段和第四个阶段硬件布线更加独立的工作)
5.写回阶段:将ALU运算后的数据写回到ID(只是指明是图ID位置,并不是实际的ID中的)时候的通用寄存器中。

影响流水线的因素

1.结构相关(资源冲突)互斥
由于多条指令在同一时刻争用同一资源而形成的冲突称为结构相关。
指令流水线_第9张图片
这里Load的Mem和Instr3的Mem发生了冲突。

解决办法;
1.后一相关指令暂停一周期(等前一个用完了再让后一个使用)
2.资源重复配置:
数据存储器+指令存储器

指令流水线_第10张图片

这里的Im指令存储器,DM是数据寄存器。他们可以是独立开来的,所以可以一起使用。
2.数据相关(数据冲突)同步
数据相关指在一个程序中,存在必须等前一条指令执行完才能执行后一条指令的情况,则这两条指今即为数据相关。

指令流水线_第11张图片
第一条执行了加法,将r2,r3相加给r1。第二条和第三条第四条第五条都要用到r1的内容。
第二条运行时候,必须保证第一条的数据已经写回给r1了。
解决办法:
1.把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行。可分为硬件阻塞(stall)和指令流水线_第12张图片
软件插入“NOP”两种方法。

指令流水线_第13张图片

2.数据旁路技术。
可以在中途进行转发。

指令流水线_第14张图片

3.编译优化:通过编译器调整指令顺序来解决数据相关。
可以将后面的指令先放到前面来执行,然后再执行冲突的。
3.控制相关(控制冲突)
当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关。
指令流水线_第15张图片
解决办法:

1.转移指令分支预测。简单预测(永远猜ture或false) 、动态预测(根据历史情况动态调整)
2.预取转移成功和不成功两个控制流方向上的目标指令
3.加快和提前形成条件码(类似一位全加器)
4.提高转移方向的猜准率

流水线的分类

1.部件功能级、处理机级和处理机间级流水线
根据流水线使用的级别的不同,流水线可分为部件功能级流水线、处理机级流水线和处理机间流水线。
部件功能级流水就是将复杂的算术逻辑运算组成流水线工作方式。例如,可将浮点加法操作分成求阶差、对阶、尾数相加以及结果规格化等4个子过程。下面是四个子过程的示例图:
指令流水线_第16张图片
处理机级流水是把一条指令解释过程分成多个子过程,如前面提到的取指、译码、执行、访存及写回5个子过程。
处理机间流水是一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放在与下一个处理机所共享的存储器中。
2.单功能流水线和多功能流水线
流水线可以完成的功能,流水线可分为单功能流水线和多功能流水线。
单功能流水线指只能实现一种固定的专门功能的流水线;例如浮点数加法
多功能流水线指通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线。
3.动态流水线和静态流水线
同一时间内各段之间的连接方式,流水线可分为静态流水线和动态流水线。
静态流水线指在同一时间内,流水线的各段只能按同一种功能的连接方式工作。
动态流水线指在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。这样对提高流水线的效率很有好处,但会使流水线控制变得很复杂。
4.线性流水线和非线性流水线
按流水线的各个功能段之间是否有反馈信号,流水线可分为线性流水线与非线性流水线。
线性流水线中,从输入到输出,每个功能段只允许经过一次,不存在反馈回路。
非线性流水线存在反馈回路(例如数据冲突中ALU可以反馈给自己),从输入到输出过程中,某些功能段将数次通过流水线(例如硬件没有乘法,那么需要数次执行加法才行,也就是数次EX),这种流水线适合进行线性递归的运算。

指令流水线_第17张图片

流水线的多发技术

1.超标量技术
类似于空分复用技术
指令流水线_第18张图片
每个时钟周期内可并发多条独立指令
要配置多个功能部件 比如IR ALU。
不能调整指令的执行顺序 这里要看CPU是否乱序发射
通过编译优化技术,把可并行执行的指令搭配起来

2.超流水技术
指令流水线_第19张图片
有点类似于时分复用技术,将一个时间段分为多段。
一个时钟周期内再分段( 3段)
在一个时钟周期内(更应该说成一个机器周期,最理想情况下是一个时钟周期)一个功能部件使用多次( 3次)
不能调整指令的执行顺序
靠编译程序解决优化问题
3.超长指令字
指令流水线_第20张图片
编译程序挖掘出指令间潜在的并行性
多条能并行操作的指令组合成一条
具有多个操作码字段的超长指令字(可达几百位)
采用多个处理部件

五段式指令流水线

指令流水线_第21张图片
在这里插入图片描述

运算类指令的执行过程

指令流水线_第22张图片
注:
R s R_s Rs指源操作数(source)
R d R_d Rd指目的操作数(destination)

运算类指令
IF:根据PC从指令Cache取指令至IF段的锁存器
ID:对指令操作码进行译码,取出操作数至ID段锁存器
EX:根据上一个阶段得到的操作数的信息进行运算,将结果存入EX段锁存器
M:空段对于RISC的都是来自于寄存器或者立即数。
WB:将运算结果写回指定寄存器

LOAD指令的执行过程

指令流水线_第23张图片
LOAD指令
IF:根据PC从指令Cache取指令至IF段的锁存器
ID:将基址寄存器的值放到锁存器A,将偏移量的值放到Imm
EX:运算,得到有效地址
M:从数据Cache中取数并放入锁存器(一般都会在cache中就命中,如果没有命中才需要去访存)
WB:将取出的数写回寄存器

STORE指令的执行过程

指令流水线_第24张图片
STORE指令
IF:根据PC从指令Cache取指令至IlF段的锁存器
ID:将基址寄存器的值放到锁存器A,将偏移量的值放到Imm。将要存的数放到B
EX:运算,得到有效地址。并将锁存器B的内容放到锁存器Store。
M:写入数据Cache
WB:空段

条件转移指令的执行过程

转移类指令尝采用相对寻址,相对于PC偏移多少
在这里插入图片描述
在这里插入图片描述
这里假设指令字长是4B,偏移量是100,那么就需要(PC)+4+(100×4) → \rightarrow PC。这里的(PC)+指令字长 就是PC+1。(通常在IF段结束之后PC就会自动+1
条件转移指令
IF:根据PC从指令Cache取指令至IlF段的锁存器
ID:进行比较的两个数放入锁存器A、B;偏移量放入lmm
EX:运算,比较两个数
M:将目标Pc值写回PC,PC比较特殊,所以不用WB阶段。
WB:空段
有些地方写回PC有一个单独的功能段比M段短,称为“WrPC段"。

无条件转移指令的执行过程

在这里插入图片描述在这里插入图片描述
无条件转移指令
IF:根据PC从指令Cache取指令至IF段的锁存器
ID:偏移量放入Imm
EX:将目标PC值写回PC
M:空段
wB:空段

这里的WrPC可以放在EX执行。WrPC段越早完成,就越能避免控制冲突。有些地方会在WB段时间内才修改PC的值。

注:只有上一条指令进入ID段后,后一条指令才能进入到IF段,因为不进入的话IF的锁存器还是前一条的内容。

本章节内容是我在进行计算机组成原理时候所做的笔记内容。如果有问题可以私聊一起探讨。

你可能感兴趣的:(指令流水线,计算机组成原理)