第四章 流水线技术.docx

上传人:b****5 文档编号:6133908 上传时间:2023-01-04 格式:DOCX 页数:114 大小:499.46KB
下载 相关 举报
第四章 流水线技术.docx_第1页
第1页 / 共114页
第四章 流水线技术.docx_第2页
第2页 / 共114页
第四章 流水线技术.docx_第3页
第3页 / 共114页
第四章 流水线技术.docx_第4页
第4页 / 共114页
第四章 流水线技术.docx_第5页
第5页 / 共114页
点击查看更多>>
下载资源
资源描述

第四章 流水线技术.docx

《第四章 流水线技术.docx》由会员分享,可在线阅读,更多相关《第四章 流水线技术.docx(114页珍藏版)》请在冰豆网上搜索。

第四章 流水线技术.docx

第四章流水线技术

第四章流水线技术

计算机系统结构研究、分析的目的就是为了提高计算机性能,为此,我们采用了许多提高性能的设计思想和技术。

流水线技术就是其中最重要的设计思想之一。

流水线技术在现代的计算机系统结构中是最普遍的一种技术。

流水线技术的基本思想在冯·诺依曼(VonNeumann)归纳的第一台存储程序计算机中已经提出。

1946年Burks等人提出的运算与输入/输出重叠操作是当今计算机中广泛使用的流水线技术的原始雏形。

尽管冯·诺依曼没有在他设计的第一台计算机中实现输入/输出功能,但当磁芯存储器第一次出现,并作为主要存储介质后,流水线设计思想迅速发展。

磁芯存储器速度要比寄存器和控制单元中的晶体管器件慢10倍以上。

为解决主存与CPU执行速度之间的瓶颈问题,设计者们研究了很多种方法,使CPU执行指令的同时,进行一个或多个并发存储器访问。

INTEL8086的两级流水就是为了提高存储器及总线的使用效率而设计的。

60年代,硬件的价格相对较高。

流水线技术都用于巨型计算机。

IBM的STRETCH和CDC6600是早期大量应用流水线技术的计算机,它们对后来的计算机系统结构设计有深刻的影响。

随着半导体技术的发展,到80年代硬件价格大幅度下降,流水线技术在计算机设计中广泛应用,即使在微处理芯片中也是很基本的性能提高措施。

INTEL80i86系列的发展是很好的一个例子。

这里要注意的是流水线技术在RISC设计思想产生前已有广泛使用,只是在RISC设计思想中流水线技术采用更广泛而已。

4.1流水线处理的基本原理

流水线的作用是提高硬件功能部件的使用率,减少指令的平均执行时间。

4.1.1流水线的基本概念

4.1.1.1什么是流水线技术

流水线(pipelining)是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。

今天,流水线是制造高性能CPU的关键技术。

这种技术和并行处理有所区别,流水线是在顺序指令流计算机中实现处理时间重叠的技术,因此流水线的并行处理是指完成一条指令的各个部件在时间上是可以同时重叠工作。

因此,各部件同时处理是针对不同指令而言的,各部件分别同时为多条指令的不同部分(step、stage)进行工作,以提高各部件的利用率来提高指令的平均执行速度。

计算机流水线概念就象工厂里的装配生产线,每一个工位完成一个部件的装配,前一个工位装配完,传送带将对象带到下一个工位装配,此过程重复进行直到所有工位都流过,产品就被装配完了。

指令流水执行是将指令执行分成几个子过程,每一个子过程对应一个工位,我们称为流水级或流水节拍(pipestage或pipesegment),这个工位在计算机里就是可以重叠工作的功能部件,称为流水部件。

这些不同的功能部件同时重叠处理不同指令的不同子过程。

流水级一个连着一个形成一个流水线,一条指令流过所有的流水级,就完成了它的任务。

流水线提高执行指令的能力可以用吞吐率(throughput)来表示。

计算机流水线的吞吐率是指单位时间内进出流水线的指令数。

流水可以提高吞吐率。

由于流水级是相互连接在一起,每一级完成都进入下一级,因此,所有的流水级必须在相同的时间内完成各自的子过程,在流水线中指令流动一步是一个机器周期(machinecycle)。

因为要保证所有流水级在同一时间内处理完自己的工作,机器周期的长度必须由最慢的流水级部件处理子过程所需的时间决定。

RISC技术要求一个机器周期等于一个时钟周期,那么这个时钟周期必须是多相的或多拍的。

由时钟的一相或一拍控制一个流水级的移动。

流水线设计最难的任务是确定每个流水级功能部件处理的时间长度,平衡每一流水各处理部件的处理时间。

在理想条件下,流水线计算机每条指令的平均执行时间是:

每条指令平均执行时间=

其中流水线深度是指流水线中总的流水级的数目。

在这种条件下,流水线计算机的加速比(Speedup)就等于流水级的深度。

实际情况中,流水线中的各级功能部件处理子过程的时间之间是很难平衡的。

此外,流水线还包含一些其它的开销。

因此,流水线上每条指令的平均执行时间并不是理想情况下的最小值,只是一个接近值。

流水线只能减少每条指令的平均执行时间,一条指令的实际执行时间要经过所有流水级,其实际执行时间有可能比未流水时还要长。

今后如无特殊说明,在流水线机器上说指令的执行时间,都是指指令的平均执行时间。

流水线减少指令平均执行时间可以看作是减少了每条指令的时钟数(CPI),也可以看作是减少了时钟周期时间,这主要取决于我们的着眼点:

如果某机器每条指令化费的是一个长时钟的周期,那么流水线减少了时钟的周期时间。

4.1.1.2流水线的描述

流水线处理器的基本结构形式如图4-1所示。

其中Si(Stage)为各流水部件,Li(Lock)为锁存器,C(Clocks)为每个流水部件处理结果进入下一级的控制时钟,其时钟周期(或节拍周期)Δti为一个流水部件处理子过程的时间Δtsi加上延迟时间Δtd。

L0L2L3Lm-1Lm

输入S1S2Sm输出

C

图4-1流水线处理基本结构

由前所述,节拍时间是固定的,则流水级时钟周期应为:

T=max{Δtsi}+Δtd

我们可以将指令流水执行归纳为如下特点:

1.一条指令分成几个子过程,每个子过程为一个流水级,这些子过程的处理部件在流水时钟控制下组成了流水线。

2.每个子过程由专门的硬件功能部件来完成。

这个功能部件和其它的功能部件在工作时间上是重叠的。

称这些功能部件是流水功能部件。

3.每个流水功能部件的工作时间是不相同的,流水节拍时间由最长的流水功能部件处理时间决定。

4.流水线工作一般有三个阶段:

建立、稳态和排空阶段。

5.理想情况下,在流水线处于稳态时,每一流水节拍时间都得到一条指令执行的结果,流水加速比(Speedup)就等于流水线的级数或流水深度。

6.流水线适用于大量重复性的、可分离的处理过程,顺序计算机的指令执行过程就是重复处理的过程。

为了方便流水线处理器结构的分析,我们采用时空图来描述,如图4-2,其中纵坐标为空间(即各流水级),横坐标为时间(流水节拍)。

方格中的数字说明该时间、空间的任务号。

S4

1

2

3

4

5

n-1

n

S3

1

2

3

4

5

n-1

N

S2

1

2

3

4

5

n-1

n

S1

1

2

3

4

5

n-1

n

t1

t2

t3

t4

t5

···

tn

tn+3

时间

图4-2流水线处理的时空图

但这种描述方法对流水线中指令执行过程的分析很不方便,因而在分析流水线指令执行过程中,我们用指令流水状态图表来描述,这样对指令执行过程情况一目了然。

如图4-3所示,其中横向表示流水节拍,纵向表示指令序列,图中指令执行状态由符号表示。

指令序列

流水时钟数

1

2

3

4

5

6

7

8

9

指令i

IF

ID

EX

MEM

WB

指令i+1

IF

ID

EX

MEM

WB

指令i+2

IF

ID

EX

MEM

WB

指令i+3

IF

ID

EX

MEM

WB

指令i+4

IF

ID

EX

MEM

WB

图4-3流水状态图

这里我们假定处理器分5个流水功能部件。

如果用流水状态图表描述流水线指令执行过程引起误解或不能说明问题时,我们采用流水功能部件和流水寄存器来代替指令流水状态图表中的执行状态,如图4-10。

4.1.1.3流水线的分类

从不同角度观察,流水线可以有多种分类方法。

1.按处理的级别分类

可以有:

操作部件级、指令级及处理器级三种。

操作部件级是将一些较为复杂的算术与逻辑运算,组成流水线处理方式,如高速乘法、浮点运算等。

指令级流水是将一条指令的执行过程分为多个阶段,如前面所述的时间上重叠执行,同时执行多条指令即形成了指令流水。

处理器流水线是指对于相同类型的数据流进行处理,每一个处理器完成其专门的任务,各处理器的结果存放在两个处理器之间的存储器中,如图4-4所示。

M1P1M2P2M3P3M4

T1T2T3

图4-4处理器级流水M:

存储器P:

处理器T:

任务

2.按完成的功能分类

有单功能流水线和多功能流水线。

单功能流水线只完成一种功能,如乘法或浮点运算;多功能流水线可以完成多种功能,其功能段可以按照不同功能的要求联接,当然功能段的种类比较多。

如图4-5所示,流水线中包括了八个功能段,如果要完成浮点运算,可按图4-5(b)连接流水;如果完成乘法,则可按图4-5(c)方式连接流水。

1输入输入输入

2求阶差求阶差

3对阶对阶

4相加相加

5规格化规格化

6相乘相乘

7累加累加

8输出输出输出

(a)(b)(c)

图4-5美国TI-ASC多功能流水线

(a)流水线功能级(b)浮点加减时的流程(c)定点乘法时的流程

3.按联接的方式分类

在多功能流水线中,根据功能的连接方式不同,可分为静态流水线与动态流水线。

静态流水是指在同一个时间内,多功能结构中只能按一种功能的连接方式工作,这对于大量数据进行相同处理来说,具有很好的效果。

但是遇到不同功能的交替处理时(如在图4-5结构中进行乘法与浮点相加交替运算),流水线就失去其优点,运算速度与顺序处理方式没有什么区别。

动态流水线是指在同一个时间内,可以有多种功能的连接方式同时工作。

如图4-5中多个功能段,其中一些功能段正在实现乘法运算,同时其它功能块还可以进行浮点运算或完成别的功能,这种方式的流水工作效率最好,但是控制也变得很复杂。

4.按处理的数据类型分类

可以分为标量流水线与向量流水线。

所谓标量就是除向量数据表示之外的其它数据类型。

标量流水线就是指所处理的数据类型中不包含向量数据的流水线。

向量流水线,则是专用来处理向量数据的。

5.从流水线结构上分类

可以分为线性流水线与非线性流水线。

所谓线性流水线,是指各功能块顺序串行连接,无反馈回路;前面所述各种流水线均属此类。

非线性流水线是指带有反馈回路的流水线,在流水线上流动的数据流也是非线性的。

如图4-6(a)所示,其正常流水顺序是S1→S2→S3,而在该结构中,每一个功能段都可以输出,而各功能段之间除了寄存器外,还增加了一个多路选择器,可以选择不同的输入。

如果在该流水线中完成A、B两个功能,而A、B都需要反馈处理。

其数据流的流向由图4-6(b)中两表给出.。

可以看出,对于功能A,流水线的顺序为S1→S2→S3→S1→S3→S3→S1→S2,由S2得到输出。

而功能B,其流水线的顺序为S1→S3→S2→S3→S1→S2→S3,由S3得到输出。

非线性流水线,通常是一个多功能流水线,多用于递归处理,这种结构对控制的要求很高,也很复杂,除了以前所述需要进行多功能的不同连接外,其输入数据的时间也难以控制,既要发挥流水的优点,又要解决功能段可能冲突的问题。

S1S2S3

M1M2M3

L1L2L3

(a)非线性流水线

t0

t1

t2

t3

t4

t5

t6

t7

S1

A

A

A

S2

A

A

(A)

S3

A

A

A

S1

B

B

S2

B

B

(B)

S3

B

B

B

(b)调度预约表

图4-6M:

多路选择器L:

锁存器S:

功能部件

4.1.2基本处理器流水线

对于第三章介绍的处理器,只要略加改变就可成为一个简单的流水线处理器。

我们将基本处理器的五个执行步骤改为5个流水节拍,就形成具有5级流水深度的流水线结构处理器,每个节拍为一个时钟,可以启动一条指令,如图4-7所示。

每条指令需流过5个节拍,5个时钟才能完成。

每个时钟期间硬件将启动一条新指令,流水线中5个硬件功能将执行5条不同指令的某些子过程。

指令序列

流水时钟数

1

2

3

4

5

6

7

8

9

指令i

IF

ID

EX

MEM

WB

指令i+1

IF

ID

EX

MEM

WB

指令i+2

IF

ID

EX

MEM

WB

指令i+3

IF

ID

EX

MEM

WB

指令i+4

IF

ID

EX

MEM

WB

图4-7MIPSR2000的整数流水线

其中:

IF──取指ID──译码和取寄存器操作数

EX──执行或有效地址计算MEM──存储器访问

WB──写回

在这个简单的指令流水状态图中,我们首先来看一下,在一个流水节拍中机器到底做了些什么事情。

我们发现:

基本处理器进行流水处理时,无法要求数据通路(datapath)上的一个硬件单元在同一时刻做两个不同的操作。

例如:

单个ALU不能同时进行有效地址计算和加法运算操作。

因此,要保证流水线顺利进行,必须消除指令重叠执行时的这种冲突。

基本处理器要经过改进才能成为流水线处理器。

4.1.2.1基本流水线的工作过程

简单的RISC处理器的指令集不是很复杂,我们可以来分析一下,处理器在工作时的硬件资源使用情况。

图4-8显示了一个5级流水的简单处理器数据通路的流水工作过程。

图中表明了主要功能单元在不同节拍中的使用情况和多指令重叠执行所带来的相应冲突。

我们可以看出,图中时钟周期5(CC5)至少有如下几种冲突:

图4-8基本流水线部件工作

首先,取指令和数据存取操作都要使用存储器。

可以使用分离的数据和指令存储器,典型的实现方式采用分离的指令CACHE和数据CACHE,如pentium芯片就采用这种方式。

使用分离的CACHE消除了用单一的存储器时出现的冲突。

但要注意一点,如果流水线的时钟周期等于非流水线的时钟周期,那么存储器的带宽要增加5倍,即非流水时最多5个时钟访问两次存储器,流水时一个时钟访问5次。

第二,寄存器组有两个流水级要使用:

其一是在译码级(ID),其二是在回写级(WB)。

在不同的位置上使用情况是不同的。

由于只有一个寄存器口,在每个时钟周期内要完成一次读和一次写会产生冲突。

如图中半实线框所示。

在一个节拍中对同一个寄存器进行读和写是也会有冲突。

这个问题我们在后面讨论。

第三,图4-8中没有画出程序指针PC的工作情况,实际上每个时钟启动一条新指令,都必须将指针增加一个值并将其保存起来,为下一条指令的取指级(IF)作准备见表4-1。

这样我们必须重新考虑转移影响的问题,因为转移PC值要到MEM级才完成计算。

这在非流水线的数据通路中是不成问题的,但流水线的数据通路要在取指级(IF)将转移的PC指针值修改好,即要提前知道转移的目标地址值。

这个问题在控制冲突这一节中将详细讨论。

表4-1对应图4-8的RISC计算机流水工作资源使用情况表

流水级

PC指针部件

存储器

数据通道

IF

PC←PC+4

IR←Mem[PC]

ID

PC1←PC

IR1←IR

A←Rs1;B←Rs2

EX

DMAR←A+(IR116)

##IR116..31;SMDR←B;

or

ALUoutput←Aop(Bor(IR116)

##IR116..31);

or

ALUoutput←PC1+(IR116)

##IR116..31);

cond←(Aop0)

MEM

if(cond)

PC←ALUoutput

LMDR←Mem[DMAR]

or

Mem[DMAR]←SMDR

ALUoutput1←ALUoutput

WB

Rd←ALUoutput1orLMDR

第四,在ALU中加法器在一个节拍中可能有如下三种情况要使用到(见表4-1):

1.在取指级中计算PC指针值。

2.计算存储器数据存取的有效地址。

3.ALU操作中的算术或逻辑运算。

在正常情况下,存储器访问的有效地址计算和ALU的本身操作不会发生冲突(不会有两个EX级在同一时钟周期内出现)。

只有PC指针值的计算会出现冲突。

最后,因为在每个时钟周期,每一个流水级都是在工作的,而所有在流水线相应级中的指令都必须在一个时钟内完成,且任何操作的组合都可能在同一时刻发生,因此,流水线上每一个流水部件的处理结果都必须放在寄存器里才能从前一流水级进入到下一流水级。

这个寄存器在每个流水级之间称为流水线寄存器(PipelineRegisters)或流水线锁存器(PipelineLatches)。

图4-9是对第三章介绍的基本处理器进行修改后的基本流水线处理器。

图4-9

图中用流水寄存器分隔了各流水执行单元,非常清楚地指出了指令执行是通过流水锁存器从一个流水部件进入到另一个流水部件。

每个流水寄存器其实包含有一组寄存器,而不仅仅是一个,每个执行单元本身已有的保存暂存值的寄存器都可以作为流水寄存器。

例如,指令寄存器(IR)就是取指级和译码级之间的流水寄存器IF/ID。

下一级要使用的所有值都必须存放在流水寄存器中。

有时前面的流水级部件所需的值是由后面流水级执行结果提供。

例如取数指令或ALU操作中的目的操作数寄存器,接收来自MEM/WB的流水寄存器数据,而不是来自IF/ID流水寄存器数据。

因为取数指令或ALU操作是将指令的结果写入寄存器,而不从它的前级IF接收数据。

而指令码的目的寄存器段简单地从一级流水寄存器传送到另一级执行单元,送到WB级给其使用。

流水线中某一时刻流水级可能执行任何指令,也就是说在一对流水寄存器之间,会出现代表各种指令执行的事件组合。

首先我们要知道不同的指令进入流水线后,在一个流水节拍或一个机器时钟中,处理器到底做了那些事情。

表4-1列出了每个流水级在同一机器时钟下处理器所作的工作。

表中用流水线寄存器指出了和图4-9对应的不同指令执行时数据从一个流水级流入下一个流水级的全过程。

这里值得注意的是,流水线的开头两级的工作情况是和当前执行的指令类型无关的。

任何指令进入这两级工作情况都是一样的,因为指令要在ID级结束时才译码完毕,因此,在这两级中机器做的工作必须和指令类型无关。

在IF级:

取指令和计算新PC值,保存新PC值在流水寄存器中,供后面计算转移目标地址时使用。

在ID级:

选通寄存器并用符号位扩展指令寄存器IR的低16位,将NPC和IR传入ID/EX流水寄存器。

在EX期间:

完成ALU操作和地址计算,并将指令寄存器IR和B寄存器(Store指令)传入EX/MEM流水寄存器。

在MEM级:

访问内存,作出转移决定;如果需要,改写PC值,并将所需值传送到最后一级。

最后在WB级:

用ALU输出或Load指令的结果修改目的寄存器值。

在整个流水过程中,指令寄存器始终从一级传送到下一级,对它的使用也随之越来越少。

但IF级依赖指令执行到EX/MEM时是否发生转移,如果发生转移,那么目标地址用来取指和计算下一条指令PC值。

否则用当前PC值取指和计算下一条指令PC值。

转移影响会导致流水线工作复杂,我们将在后面专门分析。

从表中我们看出指令代码中固定源寄存器操作数编码位置是很有用的,它可以在译码的同时选通指令要使用的源寄存器。

图4-9中我们还看到有4个多路选择电路,它是用来控制这个简单的流水线工作的。

在ALU流水执行级,2个多路选择电路用来控制不同类型指令的数据进入ALU运算器,多路选择电路则由ID/EX流水寄存器中的指令寄存器控制。

这两个多路选择电路的上部输入端用来输入计算机转移指令的目标地址的数据,由指令是否转移来控制;而下部输入端则用来输入r-r型的ALU操作类型的数据,由其相应的指令来控制。

IF级的多路选择电路从当前的PC值以及EX/MEM流水寄存器送过来的转移目标PC值中选出一个,作为取指令的地址,这个多路选择电路由EX/MEM流水寄存器的条件位来控制。

第4个多路选择电路由WB流水级的指令是取数还是ALU操作来控制。

除了这4个多路选择电路外,还有一个多路选择电路,在图4-9中没有画出来,前面提到:

目的寄存器操作数根据指令类型有两个不同的来源,因此在WB级要有一个多路选择电路,用来选择正确的目的操作数的端口,它由MEM/WB级流水寄存器中的IR寄存器来指定是选择指令寄存器IR中的立即数,还是选择ALU操作的目的寄存器操作数。

4.1.2.2流水线的基本性能

流水线增加了CPU的指令吞吐率──单位时间内完成的指令数,但它不减少单条指令的执行时间。

而事实上还略微增加了每条指令的执行时间,这是因为流水线控制需要化费一些时间。

增加指令的吞吐率意味着整个程序运行加快、总执行时间减少,并不是单条指令执行加快。

单条指令的实际执行时间没有减少,其原因除流水线延时外,还来自流水级之间执行时间、流水线开销的不平衡。

这种不平衡降低了指令执行的性能,因为机器时钟比工作最慢的流水执行部件还要慢。

流水线开销主要是因为流水线寄存器延时和时钟上升沿引起。

流水线寄存器或锁存器延时加上脉冲上升建立时间增加了时钟周期。

时钟上升沿决定了时钟周期的最短极限。

若一个时钟周期与时钟的上升和锁存开销之和相同,则流水线是不能工作的,因为一个时钟已没有多余的时间用来给流水执行部件工作了。

例1.假定RISC流水线计算机,时钟周期是10ns,ALU操作和条件转移要4个时钟周期,而存储器访问操作要5个时钟周期。

这三种指令操作的使用概率相应是40%、20%和40%。

假设由于时钟上升和建立,流水线机器每个时钟要增加1ns的开销。

忽略任何其它延时影响,问5级流水线机器可以获得的加速比是多少?

解:

非流水线计算机平均每条指令执行时间是:

用流水线实现,时钟必须运行在最慢的流水执行的脉冲开销上,这个值是:

10+1=11ns,此时每条指令平均执行时间是:

则流水线计算机的Speedup是:

这个1ns的开销限制了流水线的效率。

如果非流水计算机的CPI已经是1,那么流水将带来更小的时钟周期。

前面介绍的数据通路只是简单地移去锁存器并让数据从一个执行周期流入到下一个执行周期,那么流水线计算机和这种单周期计算机比较其加速比又是多少呢?

例2.假定机器指令执行需要5个功能单元,这5个单元的操作所需时间分别是10ns、8ns、10ns、10ns和7ns。

假定流水要增加1ns的开销。

求出流水相对于单周期指令的机器的加速比。

解:

非流水计算机执行所有指令都用单个时钟,它的每条指令平均时间直接是时钟周期的时间。

时钟周期时间等于每一步的执行时间之和:

在流水线机器上的时钟周期必须是流水线中执行时间最长的流水部件的执行时间(10ns),再加上1ns的开销,总共是11ns。

因为要求CPI

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1