流水线设计中的关键技术研究.docx
《流水线设计中的关键技术研究.docx》由会员分享,可在线阅读,更多相关《流水线设计中的关键技术研究.docx(29页珍藏版)》请在冰豆网上搜索。
流水线设计中的关键技术研究
流水线设计中的关键技术研究
摘要
本文详细阐述了流水线技术的产生背景、概念、特点、具体分类、主要性能以及相关问题和解决办法。
其中针对流水线的时空图、吞吐率、加速比和效率结合图和数学公式进行了深刻而详细的说明。
同时对现代RISC中的流水线技术进行了多方面介绍。
然后就流水线的中断与流水线调度进行了研究,其中关于调度问题主要讲了非流水线技术的调度,结合预约表来详细说明非流水线是如何调度的。
最后主要介绍了指令流水线设计,包括流水线理想设计、指令流水线、流水线处理器设计等。
流水线是指在程序执行时多条指令重叠进行操作的一种技术,指令流水执行是将指令执行分成几个子过程,每个子过程对应一个工位,称为流水级或流水节拍,这个工位在计算机里就是可以重叠工作的功能部件,称为流水部件。
这些不同的功能部件同时处理不同指令的同子过程。
流水级一个连着一个形成一个流水线,一条指令流过所有的流水级,就完成了他的任务。
他通过提高各流水部件的利用率提高指令的平均执行速度,在CPU流水线中,有一些称为冲突的情形,他使得指令流中下一条指令无法在设计的时钟周期内执行,这些冲突将会降低流水线可能获得的理想性
关键字:
流水线技术;RISC;中断处理;流水线调度;指令流水线设计;
第1章流水线简介
1.1流水线产生背景
借鉴了工业流水线制造的思想,现代CPU也采用了流水线设计。
在工业制造中采用流水线可以提高单位时间的生产量;同样在CPU中采用流水线设计也有助于提高CPU的频率。
先以汽车装配为例来解释流水线的工作方式。
假设装配一辆汽车需要4个步骤:
1.冲压:
制作车身外壳和底盘等部件,2.焊接:
将冲压成形后的各部件焊接成车身,3.涂装:
将车身等主要部件清洗、化学处理、打磨、喷漆和烘干,4.总装:
将各部件(包括发动机和向外采购的零部件)组装成车;同时对应地需要冲压、焊接、涂装和总装四个工人。
采用流水线的制造方式,同一时刻四辆汽车在装配。
如果不采用流水线,那么第一辆汽车依次经过上述四个步骤装配完成之后,下一辆汽车才开始进行装配,最早期的工业制造就是采用的这种原始的方式。
未采用流水线的原始制造方式,同一时刻只有一辆汽车在装配。
不久之后就发现,某个时段中一辆汽车在进行装配时,其它三个工人处于闲置状态,显然这是对资源的极大浪费!
于是开始思考能有效利用资源的方法:
在第一辆汽车经过冲压进入焊接工序的时候,立刻开始进行第二辆汽车的冲压,而不是等到第一辆汽车经过全部四个工序后才开始。
之后的每一辆汽车都是在前一辆冲压完毕后立刻进入冲压工序,这样在后续生产中就能够保证四个工人一直处于运行状态,不会造成人员的闲置。
这样的生产方式就好似流水川流不息,因此被称为流水线。
CPU的工作也可以大致分为指令的获取、解码、运算和结果的写入四个步骤,采用流水线设计之后,指令(好比待装配的汽车)就可以连续不断地进行处理。
在同一个较长的时间段内,显然拥有流水线设计的CPU能够处理更多的指令。
1.2流水线概念
计算机中的流水线是把一个重复的过程分解为若干个子过程,每个子过程与其他子过程并行进行。
由于这种工作方式与工厂中的生产流水线十分相似,因此称为流水线技术。
流水线技术是一种非常经济、对提高计算机的运算速度非常有效的技术。
采用流水线技术只需增加少量硬件就能把计算机的运算速度提高几倍,成为计算机中普遍使用的一种并行处理技术。
计算机各个部分几乎都可以采用流水线技术,运算器中的操作部件,如浮点加法器、浮点乘法器等可以采用流水线,称为操作部件流水线。
多个计算机之间,通过存储器连接,也可以采用流水线,称为宏流水线。
如果指令的执行过程可以采用流水线,那么称为指令流水线[1]。
图1.1浮点加法流水线的时空图
如图1.1只用1-8八个时钟周期就完成了1-5五条指令的运行。
流水线技术的指挥控制方法有三种:
序列的方法,重叠,运行模式。
顺序法是指机器指令序列之间的串行执行的机器指令,和每个微指令的执行顺序。
虽然这种方法的优点是控制简单但速度上不去,利用率低的机器零件。
重叠模式是指解释第钾指令操作完成之前开始的钾解释。
通常使用的重叠,即在任何时间,命令解析单元和指令执行部只有相邻指令重叠的解释。
这意味着指令解释速度增加,控制不是很复杂,但出现冲突,转移,相关的问题,这些都是需要在设计解决。
水是一个并行或并行嵌入计算机系统中的一种形式。
它是重叠的连续过程分解为一个进程的个数,每个进程的特殊模块独立有效的并行工程技术。
“流”可以被视为“重叠”的延伸。
不同的是一个“重叠”只是一个指令的解释是分解成2个过程,与“水”分解为多个子过程。
1.2.1指令重叠
一个指令执行过程可以分为取指令,类型和执行一三个过程(图1.2)。
取指令,取出指令,指令寄存器。
教学分析指指令的操作码进行译码,解决和地址字段地址操作数的真正形成,这是地址读取操作,但准备取下一条指令是预先形成的下一条指令的地址。
指令执行是指一些操作,加工业务,或存储操作结果。
指令的重叠解释方法是指,在解释的指令操作完成之前,开始解释钾。
假设这三个过程,分别以不同的硬件(命令控制器,分析和执行单元),当K线指令在分析阶段,该控制器在空闲状态,这个时候可以为钾到取指令操作,当K线的指令被执行时,解析器在空闲状态,并可以进行钾分析(图1.3)。
显然,重叠的解释方式和不能加快指令来实现的,但可以加速相邻的指令和程序的解释[2]。
取指令k
分析k
执行k
取指令k+1
分析k+1
执行k+1
图1.2机器指令的顺序执行方式
取指令k+2
分析k+2
执行k+2
图1.3指令的重叠解释方式
1.2.1流水线的特点
流水线技术的采用的目的只有一个:
使指令的执行速度或数据的处理速度更快。
在处理机采用流水线方式与采用传统的串行方式相比,具有如下特点:
1、在流水线中处理的必须是连续任务,只有连续不断地提供任务才能充分发挥流水线的效率。
2、把一个任务(一条指令或一个操作)分解为几个有联系的子任务,每个子任务由一个专门的功能部件来实现。
因此,流水线实际上是把一个大的功能部件分解为多个独立的功能部件,并依靠多个功能部件并行工作来缩短程序的执行时间。
在流水线中,一个子任务通常称为一个子过程,或流水线中的一个功能段。
3、在流水线的每一个功能部件的后面都要有一个缓冲寄存器,用于保存本段的执行结果。
4、流水线中各段的时间应尽量相等,否则将引起“堵塞”、“断流”等。
在理想情况下,各流水线所需要的时间是相等的,流水线填满后每隔△t时间就会有一个结果流出流水线。
5、流水线的工作一般分为3个阶段,即建立(填入)、填满和排空。
简单地说,流水线技术是一种将每条指令分解为多步,并让各步操作重叠,从而实现几条指令并行处理的技术。
程序中的指令仍是一条条顺序执行,但可以预先取若干条指令,并在当前指令尚未执行完时,提前启动后续指令的另一些操作步骤。
这样显然可加速一段程序的运行过程。
1.2.3时空图
描述流水线的工作,最常用的方法是采用“时空图”,即解释指令的时(间)-空(间)关系。
图1.4描述流水线工作过程的时空图
在时空图中,横坐标表示时间,也就是输入到流水线中的各个任务在流水线中所经过的时间。
当流水线中的各个功能部件的执行时间都相等时,横坐标被分割成相等长度的时间段。
纵坐标表示空间,即流水线的各个子过程。
在时空图中,流水线中一个子过程通常称为“功能段”。
从图1.4的流水线时空图中可以看出各个任务在流水线的各段中流动的过程。
图中的1、2表示处理机所处理的第1、2条指令,从横坐标方向看,流水线中的各个功能部件在逐个部件地完成自己的任务,例如,在完成“1”任务之后,紧接着完成任务“2”、任务“3”、任务“4”;从纵坐标方向看,在同一个时间段内有多的功能段在同时工作,例如,在第二个时间段期间,规格化部件在做第1个任务的第2个子任务的同时,也在做第2个任务的第1个子任务。
用图3的时空图就可以非常清楚地看出,非流水方式与流水线方式的效率差别很大:
图1.5顺序方式和流水方式的时空图
从图1.5可以清楚地计算出,同样完成4个任务,顺序方式用16个时间段,但流水方式却只用7个时间段。
1.3流水线的具体分类
流水线功能繁杂,种类也非常多;如果按照处理级别来分类,流水线可以有操作部件级、指令级和处理机级;如果按照流水线可以完成的动作的数量来分类,又可以分为单功能和多功能流水线;如果按照流水线内部的功能部件的连接方式来分类,则有线性流水线和非线性流水线;按照可处理对象来分类,还可以有标量流水线和向量流水线。
流水线的分类:
1、按处理级别分:
(1)功能部件级:
在实现较为复杂的运算时采用。
(2)指令级:
将一条指令执行过程分为多个阶段。
(3)处理器间级:
每个处理器完成其专门的任务。
2、按完成的功能分类:
(1)单功能流水线:
只完成一种如乘法或浮点运算等,多用于数字信号处理器(DSP),各处理器可并行完成各自的功能,加快整机处理速度。
(2)多功能流水线:
在不同情况下可完成不同功能。
3、按连接的方式分类:
(1)静态流水线:
同一时间内,多功能结构只能按一种功能的连接方式工作。
(1)动态流水线:
同一时间内,可以有多种功能的连接方式同时工作。
4、按处理的数据类型分类:
(1)标量流水线:
一般数据。
(2)向量流水线:
矢量数据。
X+Y=Z每一个代表一维数据。
5、流水线结构上分类:
(1)线性流水线:
指各功能模块顺序串行连接,无反馈回路,如前面介绍的。
(2)非线性流水线:
带有反馈回路的流水线。
1.4流水线的相关问题及解决办法
在指令流水线中经常有一些被称为"相关"的情况发生,它使得指令序列中下一条指令无法按照设计的时钟周期执行,这些"相关"可能会降低流水线可以获得的理想性能。
流水线中的相关可以分为以下三种类型:
第一种是资源相关,是指令在重叠执行的过程中,硬件资源满足不了指令重叠执行的要求,发生硬件资源冲突而产生的相关。
第二种是数据相关,是指在同时重叠执行的几条指令中,一条指令依赖于前面指令执行结果数据,但是又得不到时发生的相关。
第三种是控制相关,它是指流水线中的分支指令或者其他需要改写PC的指令造成的相关。
流水线相关问题是流水线执行过程中的主要障碍,会给流水线中指令序列的顺利执行带来许多不利的影响。
如果不能较好的处理流水线相关问题,就可能影响流水线的性能,甚至使程序运行产生错误的结果[3]。
1.4.1资源相关
资源相关是指多条指令进入流水线后在同一个Δt内争用同一功能部件所发生的相关。
假设在程序次序中指令I2紧跟指令I1,如果两条指令之间存在资源相关,则用“
”表示。
解决存储器资源相关的方法主要有以下五种:
(1)从时间上推后下一条指令的访存操作。
(2)让操作数和指令分别存放于两个独立编址且可同时访问的主存储器中。
(3)仍然维持指令和操作数混存,但采用多模块交叉主存结构。
(4)在CPU内增设指令Cache。
(5)在CPU内增设指令Cache和数据Cache。
1.4.2数据相关
数据相关是指由于相邻的两条或多条指令使用了相同的数据地址(包括寄存器地址和存储单元地址)而发生的关联,它用来说明指令间的有序关系。
常见的数据相关包括先写后读(RAW)相关、先读后写(WAR)相关和写写(WAW)相关。
(1)先写后读相关
如果指令I1到指令I2存在执行通路,即I1执行完后,一定可以执行I2,而且如果I1的输出(寄存器或赋值变量)与I2的某一个输入(用作操作数)相同,则称指令I2与指令I1存在先写后读相关,用“
”表示。
(2)先读后写相关
如果在程序次序中,指令I2在指令I1之后,而且如果I2的输出(寄存器或赋值变量)与I1的某一个输入(用作操作数)相同,则称指令I2与指令I1存在先读后写相关,用“
”表示。
(3)写写相关
在流水解释指令时,若是按指令顺序逐条顺序发射顺序解释,则在解决数据相关时只需要考虑先写后读相关,而不必考虑先读后写相关和写写相关;在指令乱序解释时,除了考虑先写后读相关外,还必须考虑先读后写相关和写写相关。
例如,有如图1.6所示是三条指令依次流入的流水线:
图1.6三条指令依次流入的流水线
I1:
ADDR1,R2,R3 /(R2)+(R3)→R1/
I2:
SUBR1,R4,R5 /(R4)-(R5)→R1/
I3:
ANDR4,R1,R7 /(R1)∧(R7)→R4/
I1:
ADDR1,R2,R3
I2:
SUBR1,R4,R5
I3:
ANDR4,R1,R7
如图1.7三条指令流水解释的时空图
解决先写后读相关的方法主要有以下两种:
(1)推后相关单元的读。
这里所指相关单元既包括寄存器也包括存储单元。
图1.8三条指令流水解释的时空图(用方法1解决数据相关)
I1:
ADDR1,R2,R3
I2:
SUBR1,R4,R5
I3:
ANDR4,R1,R7
图1.9三条指令流水解释的时空图(用方法2解决数据相关)
1.4.3控制相关
控制相关是指由转移指令引起的相关。
解决控制相关的方法主要有以下两种:
(1)延迟转移技术。
由编译程序重排指令序列来实现,它将转移指令与其前面的与转移指令无关的一条或几条指令对换位置,让成功转移总是在紧跟的指令被执行之后发生,从而使预取的指令不作废。
(2)转移预测技术。
直接由硬件来实现,转移预测技术可分为静态转移预测和动态转移预测两种。
1.5流水线的主要性能
1.5.1吞吐率
吞吐率指单位时间内流水线能处理的指令条数或能输出的数据量。
吞吐率越高,计算机系统的处理能力就越强。
对流水线而言,吞吐率就是单位时间内能流出的任务数或能流出的结果数。
最大吞吐率是指在流水线正常满负荷工作时,单位时间内机器所能处理的最多指令条数或机器能输出的最多结果数。
如图1.10所是一个简单流水线的过程。
图1.10简单流水线的过程
如果指令的解释细分为n个子过程,且各个子过程所需的时间分别为Δt1、Δt2、Δt3、…、Δtn,时钟周期应当为max{Δt1、Δt2、Δt3、…、Δtn},对应于流水线的最大吞吐率为:
由此可以看出,流水线的最大吞吐率取决于最慢子过程所需要的时间。
我们把流水线中经过时间最长的子过程称为“瓶颈”子过程。
为了提高流水线的最大吞吐率,应当设法消除此瓶颈子过程。
消除瓶颈子过程的方法有两种:
(1)将瓶颈子过程再细分;
(2)重复设置多套瓶颈段并联。
1.5.2实际吞吐率和加速比
流水线的实际吞吐率是指从启动流水线处理机开始到流水线操作结束,在单位时间内能流出的任务数或能流出的结果数。
加速比是指流水线工作相对于等效的非流水线顺序串行工作方式,速度提高的比值。
(1)设指令流水线由m段组成,且各段经过的时间均为Δt,在不发生任何相关的前提下完成n条指令的解释
1)流水线的实际吞吐率为:
由以上表达式可以看出,实际吞吐率总是小于最大吞吐率,并且只有当n>>m时,才能使实际吞吐率趋近于最大吞吐率。
2)流水线的加速比为:
由以上表达式可以看出,当n>>m时,流水线的加速比Sp才接近于流水线的段数m,也就是说,当流水线各段时间都一样时,其最大加速比等于流水线的段数m。
因此,在n>>m的前提下,增大流水线的段数m,可以提高流水线的加速比Sp。
(2)设指令流水线由m段组成,但各段经过的时间
不相等,其中“瓶颈”段时间为
,在不发生任何相关的前提下完成n条指令的解释。
1)流水线的实际吞吐率为:
2)流水线的加速比为:
1.5.3效率
效率是指流水线的设备利用率。
由于流水线需要有建立时间和排空时间,在连续完成n个任务的时间里,各段并不是满负荷工作的,因此流水线的效率一定小于1。
以下分两种情况来讨论整个流水线的效率:
(1)设指令流水线由m段组成,且各段经过的时间均为Δt,在不发生任何相关的前提下完成n条指令的解释,如图1.11所示。
图1.11m段指令流水线
(2)设指令流水线由m段组成,但各段经过的时间
不相等,其中“瓶颈”段时间为
,在不发生任何相关的前提下完成n条指令的解释
由于流水线的效率实际上就是n个任务占用的时空区和m个段总的时空区面积之比,因此,整个流水线的效率为:
比较各种公式,可以得出如下三个结论:
1.6影响因素
流水线处理方式是一种时间重叠并行处理的处理技术,具体地说,就是流水线可以在同一个时间启动2个或以上的操作,借此来提高性能。
为了实现这一点,流水线必须要时时保存畅通,让任务充分流水,但在实际中,会出现2种情况使流水线停顿下来或不能启动:
1、多个任务在同一时间周期内争用同一个流水段。
例如,假如在指令流水线中,如果数据和指令是放在同一个储存器中,并且访问接口也只有一个,那么,两条指令就会争用储存器;在一些算数流水线中,有些运算会同时访问一个运算部件。
2、数据依赖。
比如,A运算必须得到B运算的结果,但是,B运算还没有开始,A运算动作就必须等待,直到B运算完成,两次运算不能同时执行。
解决方案:
第一种情况,增加运算部件的数量来使他们不必争用同一个部件;
第二种情况,用指令调度的方法重新安排指令或运算的顺序。
第2章现代RISC中的流水线技术
2.1超流水线技术
超级流水线(SuperPipeline)又叫做深度流水线,它是提高cpu速度通常采取的一种技术。
CPU处理指令是通过Clock来驱动的,每个clock完成一级流水线操作。
每个周期所做的操作越少,需要的时间就越短,时间越短,频率就可以提得越高。
超级流水线就是将cpu处理指令是得操作进一步细分,增加流水线级数来提高频率。
频率高了,当流水线开足马力运行时平均每个周期完成一条指令(单发射情况下),这样cpu处理得速度就提高了。
当然,这是理想情况下,一般是流水线级数越多,重叠执行的执行就越多,那么发生竞争冲突得可能性就越大,对流水线性能有一定影响现在很多cpu都是将超标量和超级流水线技术一起使用,例如pentiumIV,流水线达到20级,频率最快已经超过3GHZ。
教科书上用于教学的经典MIPS只有5级流水。
超级流水线(超级流水线集)技术是用在一个并行处理技术。
在他稀疏的水,增加的数量和提高频率,从而在每个机器周期完成一个或2个浮点操作。
其实质是以时间换取空间。
超纯水机的特点是在所有的功能单位只使用水,并具有更高的时钟频率和更深的水的深度[4]。
2.2超标量技术
超标量(SuperScalar)技术是RISC采用的有一种处理技术。
它通过内装多条流水线来同时执行多个处理。
其实质就是以空间换取时间。
将一条指令分成若干个周期处理以达到多条指令重叠处理,从而提高cpu部件利用率的技术叫做标量流水技术。
超级标量是指cpu内一般能有多条流水线,这些流水线能够并行处理。
在单流水线结构中,指令虽然能够重叠执行,但仍然是顺序的,每个周期只能发射(issue)或退休(retire)一条指令。
超级标量结构的cpu支持指令级并行,每个周期可以发射多条指令(2-4条居多)。
可以使得cpu的IPC(InstructionPerClock),从而提高cpu处理速度。
超级标量机能同时对若干条指令进行译码,将可以并行执行的指令送往不同的执行部件,在程序运行期间,由硬件(通常是状态记录部件和调度部件)来完成指令调度。
超级标量机主要是借助硬件资源重复(例如有两套译码器和ALU等)来实现空间的并行操作。
熟知的pentium系列(可能是p-II开始),还有SUNSPARC系列的较高级型号,以及MIPS若干型号等都采用了超级标量技术。
流水线实现中的问题及解决:
这是一个问题的连续流动,这似乎并没有流下,从而获得更高的效率。
停止的原因很多,除了编译生成的目标程序可以发挥结构的作用,水,或存储系统可以提供一个连续流动所需的指令和操作数,基本上还出现相关,转移和中断指令相关的。
解偏相关有2种方法:
后退方法和路径的方法;解决全球相互关系有三种方法:
猜测转移,加快推进形成条件代码,加快短循环程序处理。
2.3超长指令字
超长指令字(VLIW:
VeryLongInstructionWord)是由美国Yale大学教授Fisher提出的。
它有点类似于超级标量,是一条指令来实现多个操作的并行执行,之所以放到一条指令是为了减少内存访问。
通常一条指令多达上百位,有若干操作数,每条指令可以做不同的几种运算。
那些指令可以并行执行是由编译器来选择的。
通常VLIW机只有一个控制器,每个周期启动一条长指令,长指令被分为几个字段,每个字段控制相应的部件。
由于编译器需要考虑数据相关性,避免冲突,并且尽可能利用并行,完成指令调度,所以硬件结构较简单。
如图2.1所示是VLIW的流水执行。
图2.1超长指令字(VLIW)的流水执行
VLIW机的工作很像超标量机,但有三点区别:
(1)VLIW指令译码比超标量指令更容易;
(2)当超标量机可用的指令级并行性比由VLIW机可开发的相应值小时,超标量机的代码密度更为紧凑;
(3)超标量机可做到和很多非并行机系列的目标代码兼容。
相反,VLIW机开发不同数量的并行性时总是需要不同的指令系统。
VLIW处理机的优点:
VLIW机对超标量机在以下几个方面做了改进:
(1)VLIW指令中并行操作的同步全在编译时间完成,这可使它比超标量处理机有更高的处理机效率;
(2)当短格式用户代码中有高的可用ILP时,VLIW程序的代码长度要短得多;这就意味着经编译的VLIW程序有短得多的执行时间。
(3)大大简化了运行时的资源调度,因为VLIW体系结构中的指令并行性和数据移动完全是在编译时间说明的。
VLIW的主要缺陷:
(1)需要智能编译器的支持;
(2)软件兼容性差;
(3)软件的可移植性差。
如下表2.2是对VLIW与超标量体系结构性能的比较
表2.2 VLIW与超标量体系结构性能的比较
体系结构
硬件支持
并行性开发时间
代码密度
平均CPI
兼容性
可移植性
VLIW
简单
编译时
差
低
无
无
超标量
复杂
运行时
好
高
有
有
2.4向量机
平时接触的计算机都是标量机,向量机都是大型计算机,一般用于军事工业,气象预报,以及其他大型科学计算领域,这也说明了向量机都很贵。
国产的银河计算机就是向量机普通的计算机所做的计算,例如加减乘除,只能对一组数据进行操作,被称为标量运算。
向量运算一般是若干同类型标量运算的循环。
向量运算通常是对多组数据成批进行同样运算,所得结果也是一组数据。
很多做科学计算的大(巨)型机都是向量机。
2.5SIMD技术
单指令多数据(SingleInstructionMultipleData)简称SIMD。
SIMD结构的CPU有多个执行部件,但都在同一个指令部件的控制下。
SIMD在性能优势呢:
以加法指令为例,单指令单数据(SISD)的CPU对加法指令译码后,执行部件先访问内存,取得第一个操作数;之后再一次访问内存,取得第二个操作数;随后才能进行求和运算。
而在SIMD型CPU中,指令译码后几个执行部件同时访问内存,一次性获得所有操作数进行运算。
这个特点使得SIMD特别适合于多媒体应用等数据密集型运算。
AMD公司的3DNOW!
技术其实质就是SIMD,这使K6-2处理器在音频解码、视频回放、3D游戏等