文章目录

  • 一.基本概念
    • 1.多条指令在处理器中的执行方式
      • (1)顺序执行方式/串行执行方式
      • (2)流水线执行方式
        • ①一次重叠执行方式
        • ②二次重叠执行方式
    • 2.流水线的表示方法(时空图)
    • 3.超标量流水线
  • 二.分类
    • 1.部件功能级、处理机级和处理机间级流水线
    • 2.单功能流水线和多功能流水线
    • 3.动态流水线和静态流水线
    • 4.线性流水线和非线性流水线
  • 三.影响流水线的因素
    • 1.资源冲突
    • 2.数据冲突
    • 3.控制冲突
  • 四.性能指标
    • 1.吞吐率TP
    • 2.加速比S
    • 3.效率E
  • 五.五段式指令流水线
    • 1.运算类指令
    • 2.LOAD指令(取数指令)
    • 3.STORE指令(存数指令)
    • 4.条件转移指令
    • 5.无条件转移指令

一.基本概念

单周期处理机中采用串行方法执行的指令,同一时刻CPU中只有一条指令在执行,各功能部件的使用率不高。现代计算机普遍采用指令流水线技术,同一时刻有多条指令在CPU的不同功能部件中并发执行,大大提高了功能部件的并行性和程序的执行效率。

一条指令的执行过程可分解为若干阶段,每个阶段由相应的功能部件完成。如果将各段视为相应的流水段,那么指令的执行过程就构成了一条指令流水线。

为了提高执行速度,将一条指令的执行过程分为取指令、指令译码、执行和写回四个阶段,就形成了四级流水;若分为取指令IF、指令译码ID、取操作数OF、执行EX、写回WB,就形成了五级流水。

指令流水段的个数以最复杂指令所用的功能段个数为准,流水段的长度以最复杂的操作所花时间为准,因此将每个阶段的耗时取成一样,以最长耗时为准。对于耗时较短的指令,可以将本段处理完成的数据和控制信号保存在流水寄存器/缓冲寄存器/锁存器中,以保证本段的执行结果能在下个时钟周期给下一流水段使用。

每个流水段后面都需要增加一个流水寄存器,用于锁存,

1.多条指令在处理器中的执行方式

(1)顺序执行方式/串行执行方式

前一条指令执行完才能启动下一条指令。冯·诺依曼采用的就是顺序执行方式

优点:控制简单,硬件代价小
缺点:执行指令速度慢,功能部件的利用率低(若取址时内存忙碌,但执行指令部件是空闲的)

假设取址、分析、执行三个阶段的用时均为t,顺序执行n条指令所用时间T=3tn

(2)流水线执行方式

①一次重叠执行方式

假设取址、分析、执行三个阶段的用时均为t,执行n条指令所用时间T=(n-1)×2t+3t=2nt+t=(2n+1)t

优点:与顺序执行方式相比,程序的执行时间缩短了1/3(当n→∞时),各功能部件的利用率明显提高
缺点:需要付出硬件上较大开销的代价,控制过程也比顺序执行复杂了

②二次重叠执行方式

T=(n-1)×t+3t=nt+2t=(n+2)t

优点:与顺序执行方式相比,程序的执行时间缩短了2/3(当n→∞时),各功能部件的利用率进一步提高
缺点:需要付出硬件上较大开销的代价,控制过程也比顺序执行复杂了

2.流水线的表示方法(时空图)

时空图用于分析流水线的性能。
横坐标表示时间,即输入流水线中的各个任务在流水线中经过的时间;纵坐标表示空间,即流水线的每个流水段(即各执行部件)。流水线中各个流水段的执行时间都相等。

第一条指令I1在时刻t0进入流水线,在t0-t1时间段内处于取指令阶段,在t1-t2时间段内处于译码阶段,在时刻t4流出流水线。共有4个不同的功能部件(流水段),因此此图叫做4个功能段的指令流水线时空图

3.超标量流水线

(1)超标量流水线技术
每个时钟周期内可并发多条独立指令,即以并行操作方式将两条或多条指令编译并执行,为此需配置多个功能部件。在执行时不能调整指令的执行顺序,对于乱序发射可以调整。通过编译优化技术,把可并行执行的指令搭配起来。


超标量技术在同一时刻发出多条指令,类似于空分复用技术(多个功能部件)

(2)超流水线技术
在一个时钟周期内再分段(图中3段),在一个时钟周期内一个功能部件使用多次。不能调整指令的执行顺序,靠编译程序解决优化问题。

超流水线技术在不同时刻发出指令,类似于时分复用技术(一个部件多次)

(3)超长指令字
由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字,为此需采用多个处理部件。

二.分类

1.部件功能级、处理机级和处理机间级流水线

根据流水线使用级别的不同分
(1)部件功能级流水线:将复杂的算术逻辑运算组成流水线工作方式。例如,可将浮点加法操作分成求阶差、对阶、尾数相加以及结果规格化等4个子过程,即将指令流水线细分为部件内部的功能流水线。
(2)处理机级流水线:即指令流水线。把一条指令解释过程分成多个子过程,如取址、译码、执行、访存、写回
(3)处理机间流水线:是一种宏流水。其中每个处理机完成某一专门任务(如一个求阶差,一个对阶),各个处理机得到的结果需存放在与下一个处理机共享的存储器中

2.单功能流水线和多功能流水线

根据可以完成的功能
(1)单功能流水线
只能实现一种固定的专门功能的流水线
(2)多功能流水线
通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线

3.动态流水线和静态流水线

根据同一时间内各段之间的连接方式分
(1)静态流水线
在同一时间内,流水线的各段只能按同一种功能的连接方式工作
(2)动态流水线
在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。可以提高流水线的效率,但会使流水线控制变得复杂

4.线性流水线和非线性流水线

根据流水线的各个功能段之间是否有反馈信号分
(1)线性流水线
从输入到输出,每个功能段只允许经过一次,不存在反馈回路
(2)非线性流水线
存在反馈回路,从输入到输出过程中,某些功能段将数次通过流水线,这种流水线适合进行线性递归的运算

三.影响流水线的因素

1.资源冲突

多条指令在同一时刻,争用同一资源而形成的冲突。即由硬件资源竞争造成的冲突。资源冲突也叫资源相关、资源冒险。下同

解决方案:
(1)前一指令访存时,使后一条相关指令(以及其后续指令)暂停一个时钟周期
(2)单独设置数据存储器和指令存储器,使取数和取指令操作各自在不同的存储器中进行

2.数据冲突

(1)写后读(Read After Write,RAW):当前指令将数据写入寄存器后,下一条指令才能从该寄存器读取数据
(2)读后写(Write After Read,WAR):表示当前指令读出数据后,下一条指令才能写该寄存器
(3)写后写(Write After Write,WAW):表示当前指令写入寄存器后,下一条指令才能写该寄存器

解决方案:
(1)把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行,可分为硬件阻塞(stall)和软件插入“NOP”指令两种方法

硬件

软件
(2)设置相关专用通路,即不等前一条指令把计算结果写回寄存器组,下一条指令也不再读寄存器组,而直接把前一条指令的ALU的计算结果作为自己的输入数据开始计算过程,使本来需要暂停的操作变得可以继续执行,这称为数据旁路技术


(3)通过编译器对数据相关的指令编译优化的方法,调整指令顺序来解决数据相关

3.控制冲突

指令通常是顺序执行的,但是在遇到改变指令执行顺序的情况,例如执行转移、调用或返回等指令时,会改变PC值,会造成断流,从而引起控制冲突。

解决方案:
(1)对转移指令进行分支预测,尽早生成转移目标地址。分支预测分为简单(静态)预测和动态预测。静态预测总是预测条件不满足,即继续执行分支指令的后续指令。动态预测根据程序执行的历史情况,进行动态预测调整,有较高的预测准确率
(2)预取转移成功和不成功两个控制流方向上的目标指令
(3)加快和提前形成条件码
(4)提高转移方向的猜准率

四.性能指标

1.吞吐率TP

在单位时间内流水线所完成的任务数量,或输出结果的数量

TP=任务数/所有任务的总时间

一条指令的执行分为k个阶段(纵),每个阶段耗时△t,取△t为一个时钟周期,任务数为n(横)。则所有任务的总时间=(k-1)△t+n△t=(k-1+n)△t

因此TP=n/[(k-1+n)△t],当n→∞时,TPmax=n/(n△t)=1/△t

装入时间:从第一条指令从取址到结束所需时间,即k△t
排空时间:最后一条指令从开始运行到结束所需时间

2.加速比S

完成同样一批任务,不使用流水线与使用流水线所用的时间之比。

在此例中,S=nk△t/[(k+n-1)△t]
当n→∞时,Smax=nk△t/(n△t)=k

3.效率E

流水线的设备利用率,即忙碌时间占总时间的比例

E=n个任务占用的时空区有效面积/n个任务所用的时间与k个流水段所围成的时空区总面积=中间红色阶梯面积/蓝色大矩形面积


通过补面,E=紫色部分面积/蓝色矩形面积=n△t/[(k+n-1)△t]
当n→∞时,Emax=1

五.五段式指令流水线

①取指令IF段包括程序计数器(PC)、指令存储器、下条指令地址的计算逻辑
②指令译码ID段包括操作控制器、取操作数逻辑、立即数符号扩展模块
③执行EX段主要包括算术逻辑单元(ALU)、分支地址计算模块
④访存MEM段主要包括数据存储器读写模块
⑤写回WB段主要包括寄存器写入控制模块。


各种寄存器和数据存储器均采用统一时钟CLK进行同步,每来一个时钟,就会有一条新的指令进入流水线IF段;同时流水寄存器会锁存前段加工处理完成的数据和控制信号,为下一段的功能部件提供数据输入。

1.运算类指令

(1)IF:根据PC从指令Cache取指令至IF段的锁存器
(2)ID:取出操作数至ID段锁存器
(3)EX:运算,将结果存入EX段锁存器
(4)M:空段
(5)WB:将运算结果写回指定寄存器

2.LOAD指令(取数指令)

如:将Rs寄存器的值+996,以此作为有效地址。取出该地址对应主存单元的数据,放入Rd寄存器中
(1)IF:根据PC从指令Cache取指令至IF段的锁存器
(2)ID:将基址寄存器的值放到锁存器A,将偏移量(立即数)的值放到Imm
(3)EX:运算(相加),得到有效地址EA
(4)M:从数据Cache中取数并放入锁存器
(5)WB:将取出的数写回寄存器

3.STORE指令(存数指令)

如:将Rs寄存器的内容存入Rd(基地址)+996
(1)IF:根据PC从指令Cache取指令至IF段的锁存器
(2)ID:将基址寄存器的值放到锁存器A,将偏移量(立即数)的值放到Imm。将待存的数放到锁存器B
(3)EX:运算(相加),得到有效地址EA。并将锁存器B的内容放到锁存器Store
(4)M:根据EA写入数据Cache
(5)WB:空段

4.条件转移指令

通常采用相对寻址
如:当Rs和Rt寄存器的值相等时,进行转移。转移到(对下一条指令偏移):当前指令PC+指令字长+偏移量×指令字长。不相等时转移到:当前指令PC+指令字长
(1)IF:根据PC从指令Cache取指令至IF段的锁存器
(2)ID:进行比较的两个数放入锁存器A、B;偏移量放入lmm
(3)EX:运算,比较两个数
(4)M:将目标PC值写回PC(耗时短,尽早安排,避免控制冲突)
(5)WB:空段

5.无条件转移指令

通常采用相对寻址
如:跳转到偏移量的地址,PC改为:当前指令PC+指令字长+偏移量×指令字长
(1)IF:根据PC从指令Cache取指令至IF段的锁存器
(2)ID:偏移量放入lmm
(3)EX:将目标PC值写回PC(耗时短,尽早安排,避免控制冲突)
(4)M:空段
(5)WB:空段

[a]表示a的存储单元地址

  • 流水线越多,并行度就越高。那么是否流水段越多,指令执行越快?
    不是。①流水段缓冲之间的额外开销增大。每个流水段有一些额外开销用于缓冲间传送数据、进行各种准备和发送等功能,这些开销加长了一条指令的整个执行时间,当指令间逻辑上相互依赖时,开销更大;②流水段间控制逻辑变多、变复杂。用于流水线优化和存储器(或寄存器)冲突处理的控制逻辑将随流水段的增加而增大,这可能导致用于流水段之间控制的逻辑比段本身的控制逻辑更复杂。
  • 关于指令相关、数据相关
    (1)两条连续的指令读取相同的寄存器时,会产生读后读RAR相关,这种相关不会影响流水线
    (2)某条指令要读取上一条指令所写入的寄存器时,会产生写后读RAW相关,它称数据相关或真相关,影响流水线。按序流动的流水线只可能出现RAW相关
    (3)某条指令的上条指令要读/写该指令的输出寄存器时,会产生读后写WAR和写后写WAW相关。在非按序流动的流水线中,既可能发生RAW相关,又可能发生WAR相关和WAW相关
    (4)对流水线影响最严重的指令相关是数据相关