当前位置:文档之家› 指令流水线技术研究

指令流水线技术研究

指令流水线技术研究
指令流水线技术研究

指令流水线技术研究

摘要:流水线技术是当前指令集处理器设计中广泛采用的技术。首先介绍了有关流水线的基础知识,包括概念、特点、分类及其主要性能指标。然后提出了三条流水线理想假设,并由此得出了指令流水线设计的三大挑战,从而指出了在指令流水线设计时应重点解决的三大问题和设计方法。最后是对该技术的总结与展望。

关键字:指令流水线;概念;性能指标;理想假设;处理器设计;

前言

流水线技术是提高系统吞吐率的一项强大的实现技术,并且不需要大量重复设置硬件。20世界60年代早期的一些高端机器中第一次采用了流水线技术。第一个采用指令流水线的机器是IBM7030(又称作Stretch计算机)。后来的CDC 6600同时采用了流水线和多功能部件。

到了20世纪80年代,流水线技术成为RISC处理器设计方法中最基本的技术之一。RISC设计方法的大部分技术都直接或者间接以提高流水线性能为目标。从此以后,流水线技术也被有效地应用到CISC处理器的设计中。Intel i486是IA32体系结构中的第一个流水线实现。Digital的VAX和Motorola的M68K的流水线版本在商业上也取得了成功。

流水线技术是当前指令集处理器设计中广泛采用的技术。在这里我们将重点放在(标量)流水线处理器的设计。流水线处理器设计中的许多方法和技术,例如用于检测和化解相关的流水线互锁机制,都是标量处理器设计的基本方法。

1 流水线基础

加快机器语言的解释过程提高机器的运算速度是设计计算机的基本任务之一。这可以通过两个途径来实现。一个途径是提高器件的速度,采用更好的算法,增加指令内各微操作的并行程度,减少解释过程所需要的拍数等多项措施来加快机器指令的解释。另一个途径则是采用重叠和流水方法,同时解释两条、多条以至整段程序,从而加快整个机器语言程序的解释。流水线技术是目前广泛应用于

微处理芯片中的一项关键技术,Intel公司更是这项技术在微处理器中应用的首先实现者。

1.1 流水线概念

指令的三种控制方法:顺序方法、重叠方式、流水方式。顺序方法是指各条机器指令之间顺序串行地执行,而且每条机器指令内部的各个微指令也是串行执行。这种方法虽然控制简单但速度上不去,机器各部件的利用率低。重叠方式是指在解释第K条指令的操作完成之前就开始解释第K+1条指令。通常都是采用一次重叠,即在任何时候,指令分析部件和指令执行部件都只有相邻两条指令在重叠解释。这种方式使指令的解释速度有所提高,控制也不太复杂但会出现冲突、转移、相关等问题,这些都需要在设计时想办法解决。流水方式就是把并行性或并发性镶嵌到计算机系统里的一中形式。它是把重叠的顺序处理过程分解为若干过程,每个过程能在专用的独立模块上有效地并发工作的技术。在概念上“流水”可以看成“重叠”的延伸。不同的是“一次重叠”只是把一条指令的解释分解成两个子过程,而“流水”则是分解为更多的子过程。

1.1.1指令重叠

一条指令的执行过程可分为取指令、分析与执行三个过程(如图1.1)。取指令,取出该指令送到指令寄存器。指令的分析指的是对指令的操作码进行译码,按寻址方式合地址字段形成操作数真地址,并用此真地址去取操作数,还要为准备取下一条指令提前形成下一条指令的地址等。指令的执行则是指对操作数进行运算、处理,或存储运算结果。指令的重叠解释方式指的是,在解释第k条指令的操作完成之前,就开始解释第k+1条指令。假设这三个过程分别在3个不同的硬件(指令控制器、分析器和执行部件)上进行,则当第k条指令处于分析阶段的时候,控制器就处于空闲状态,这个时候可以对第k+1条指令进行取指令操作,当第k条指令处于执行状态时,分析器就处于空闲状态,这时可以进行对第k+1条指令的分析(图1.2)。很显然,重叠解释的方式并不能加快一条指令的实现,但是可以加快两条相邻指令以至一段程序的解释。

图1.1 机器指令的顺序执行方式

图1.2 指令的重叠解释方式

1.1.2 流水线

流水其实就是重叠的引申,上面谈到的重叠模型实际上就是一个简单的3级流水模型。如果将分析与执行阶段再细分为指令解码、取操作数、执行运算和存储结果,当第k+1条指令在第k条指令执行去操作数的时候就可以开始解码,而不必等到分析k完全结束。这样子在一个指令周期内就可以同时执行5条指令。流水线工作方式是把一个重复的过程分解为若干个子过程,每个子过程可以与其他子过程同时进行。由于这种工作方式与工程中的生产流水线十分相似,因此,把他成为流水线工作方式。在处理机的各个部分几乎都可以采用流水线工作方式。指令的执行过程可以采用流水线,称为指令流水线。运算中的操作部件,如浮点加法器,浮点乘法器等可以采用流水线,成为操作部件流水线。访问主存储器部件也可以采用流水线。甚至在处理机之间,机器之间也可以采用流水线。

图1.3指令流水线

1.1.3 流水线的特点

从上面的分析中可以看到,在处理机中采用流水线方式与采用传统的串行方式相比,具有一下特点:

1.在流水线中处理的必须是连续任务,只有连续不断的提供任务才能

充分发挥流水线的效率。例如。要是浮点加法器充分发挥作用,需

要连续提供浮点加法运算。然而,由于程序本身的原因和程序设计

过程中人为造成的一些原因,入数据相关等,不可能为浮点加法器

连续的提供同一种操作。因此,在采用流水线工作方式的处理器中,

特别是当流水线的级数较多时,要在软件和硬件等多方面为流水线

提供连续的任务,以提高流水线的效率。

2.把一个任务分解成几个有联系的子任务,每个任务由一个专门的功

能部件来实现。因此,流水线实际上是把一个大的功能部件分解为

多个独立的功能部件,并依靠多个功能部件并行工作来缩短程序的

执行时间。在流水线中,一个子任务通常称为一个子过程,或者一

个功能段。

3.在流水线每一个功能部件后面都要有一个缓冲寄存器,或称为锁存

器等,用于保存本段执行的结果。这是因为流水线中每一段的延迟

一般都不可能相等,因此,在段与段之间传递子任务时,必须要通

过缓冲寄存器。当某一个功能段的时间变化范围比较大的时候,要

设置多个缓冲寄存器。

4.流水线中各个段要尽量匀称,即时间要求尽量相等,否则将容易引

起“阻塞”、“断流”等问题。执行时间最长的段将成为整个流水

线的“瓶颈”,这时,流水线中各段将受到限制而不能充分发挥作

用。只有当整个流水线完全充满时,整个流水线的效率才能得到充

分的发挥。

为了设计出高效率的流水线,要充分注意上述问题。

1.1.4 流水线的分类

从不同的角度,按照不同的观点,可以把流水线分成多种不同的类型。平时所说的某种流水线,往往是按照某种观点,或者从某一个特定的角度对流水线进行分类的结果。因此,从名称上只能反应出这种流水线在某一个方面的特点或者功能。

按照流水线的各功能段之间是否有反馈信号,可以把流水线分为线性流水线和非线性流水线。

线性流水线是将流水线各个功能段逐个串联起来,输入数据从流水线的一段进入,从另外一段流出。数据在流水线中经过时,没一个功能段都流过一次,且仅仅流过一次。

一条线性流水线通常只完成固定的一种功能,在现代计算机系统中,线性流

水线已经被广泛的应用于指令执行过程、各种算术运算操作、存储器访问操作等。

图1.4 非线性流水线

非线性流水线经常用于递归调用,或者构成多功能流水线。

按照流水线使用的不同级别,可以把流水线分为功能部件级、处理器级以及

处理机之间等多种类型。

每一个子过程在一个独立的功能部件中完成。

功能部件级流水线也称为运算操作流水线,器流水线等。

处理机间流水线又称为宏流水线, 图1.5 指令流水线

流水线又可分为单功能流水线和多功能流水线。能完成固定的单一功能,在多功能流水线中,种任务,的是在同一时间段内,种固定的功能。

能重新进行连接,完成其他功能。动态流水线则在同一时间段内,可以按照不同

的连接方式,完成多种不同的功能。这个时候要求流水线中个功能部件之间不能

发生冲突。

除了以上几种分类方法外,还可以根据其他标准,从不同角度对流水线进行

分类。

1.2 流水线的主要性能

衡量流水线主要性能的指标主要有吞吐率,加速比和效率。

1.2.1 吞吐率

吞吐率是指在单位时间内流水线所完成的任务数量或者输出的结果数量。

即: )1.2(式K

T n TP = 式(2.1)中,n 为任务数,k T 是处理完成n 个任务做用的时间。本式为计算吞吐

率最基本的公式。有的时候我们还需要求一条流水线的最大吞吐率: )2.2(,...}

,...,max{121max 式k t t t TP ???= 式(2.2)中k t ?为第k 个子过程所花费的时间。最大吞吐率受限于流水线中最慢子

过程即瓶颈子过程所需要的时间。为了提高流水线的最大吞吐率,首先要找出瓶

颈,然后设法消除此瓶颈。消除瓶颈有两种办法,一是将瓶颈子过程再细分,另

一种办法是通过重复设置多套瓶颈段并联,让他们交叉进行。后一种方法需要解

决好在各并行子过程之间的任务分配合同步控制,比起瓶颈子过程再细分控制要

复杂、设备量要多一些。

1.2.2 加速比和效率

完成一批任务,不使用流水线所花的时间与使用流水线所用时间直比即为流

水线的加速比。如果不使用流水线,即顺序执行所用时间为0T ,使用流水线的

执行时间为K T ,则流水线的加速比为: )3.2(0式K

T T S = 这是计算流水线加速比的基本公式。

流水线的效率是指流水线的设备利用率。在时空图上,流水线的效率定义为

n 个任务所占的时空区域与k 个功能区域所占时空区域之比。因此,流水线的效

率包含有时间和空间两方面的因素。实际上,n 个任务所占的时空区域就是顺序

执行n 个任务所用的总的时间0T 。而一条k 段流水线完成n 个任务总的时空区

域为k k T ,其中k T 是流水线完成n 个任务所用的总时间。则一条k 段流水线的效

率可表示为: )(式个流水段的总的时空区个任务占用的时空区4.20k

T k T k n E ?== 此式是计算流水线效率的一般公式。

如果流水线各段执行时间均相等,且输入的n 个任务是连续的,则一条k

段流水线的效率为: )5.2(1

)1(式-+=??-+????=n k n t n k k t n k E 从流水线的时空图上来看,上式分母部分是完成n 个任务所用时间与k 个功能段

所围成的总面积,而分子部分则是k 个功能段实际所占有的面积。因此,利用时

空图来计算流水线的效率十分方便。

2 指令流水线设计

我们做任何事情,都希望能够达到理想状态,但这往往是不现实的,我们研

究理想状态的意义就在于给出一个衡量的标准,并且努力向这个标准靠近,这在

指令流水线的设计过程中也不例外。

2.1流水线理想假设

对于指令流水线的目的,我们是希望能最大限度的提高系统的性能。然而在

实际中却往往做不到,因为只有在理想状态下,k 级流水线的设计才能将提高k

倍的吞吐率,理想状况主要基于3条假设,我们称之为“流水线理想假设”,他

是正确评估流水线设计的关键。设计各种方案解决实际流水线与流水线理想假设

之间的矛盾,这就组成了流水线设计的主要技术。流水线理想假设包括:

1. 一致的运算分量:要完成的整个运算量可以均匀的分成延迟一只的若

干分量。

2.重复的运算:输入数据有大量相同的、重复的运算。

3.独立的运算:所有相同的重复运算之间没有相关性。

2.1.1 一致的运算分量

第一条流水线的理想假设说明,将要进行流水化的运算分量均匀的分成k

个延迟相同的分量。这意味着以前的设计可以均匀的分成k个均衡的流水段。如果以前总的运算延迟,也就是非流水设计的式中周期为T,那么k级流水线的设计式中周期就是T/k,也就是流水段中每一段的延迟。基于这个理想假设,时钟频率能够提高k倍,并且吞吐率也提高了k倍。

在实际的流水线设计中,这个理想假设可能并不成立。将总的运算分量完全均匀的分成若干分量是不可能的。在一个具有3级流水线的浮点加法器的例子中,设总的延迟为500ns,流水线分3段,每一段的延迟分别为200ns,100ns,200ns.显然,总的延迟并没有均匀的分布到流水线的三段当中。由于流水线的时钟周期决定于延迟最长的那一段,因此延迟较短的段会有一些无效或者失效的时间。比如浮点加法器的第二段,它就有100ns的无效时间,我们可以把它称之为“内部碎片”。由于内部碎片的存在,完成同样的运算的延迟将会增加。

还有一个内在的假设,即流水段之间引入的缓冲不会带来额外的延迟,并且流水线的时钟信号也不会引入额外的延迟。同样,这一假设在实际当中也是不能成立的。在相应的例子中,为了保证信号的时钟信号的准确建立,设置了暂存器,因此总的时钟周期又延长了,从而导致了实际性能不可能提高3倍。

第一条流水线理想假设主要包含了以下两种观点:在将以前的运算分量分成若干分量是时,没有引入无效时间;段间缓冲的引入及时钟没有带来额外的延迟。在芯片级的设计中,可以采用一些锁存器,比如Earle锁存器可以使流水线时钟产生的延迟尽可能地小。因此如何将总的运算量均匀的分到各流水段中构成了流水线设计的第一个挑战。我们的目标是,尽可能使各个流水段保持均衡,以减少内部碎片。由于各个流水段不能完全均衡内部碎片是不满足第一条流水线理想假设的主要原因,这将成为一种开销,并导致k级流水线设计的吞吐率提高达不到理想的k倍。

2.1.2 重复的运算

第二条流水线理想假设说明,流水线不断地重复执行相同的运算。这意味着在多组输入数据中,有些运算是相同的并且这些运算要反复执行。每次执行时,流水线提供的分量执行顺序都是一样的。对于浮点加法器的例子,将包含大量的浮点数对要进行相加,每一对操作数都要通过相同的3级流水线。这以一设说明,每一次的重复运算都会使用流水线中的所有段。对于我们的例子这显然是成立的。

浮点加法器满足这条假设,是因为该流水线只完成了一个功能,即浮点加法运算。如果你要设计的流水线要完成多个功能,这一假设就不满足了。例如,设计一条既可以计算加法又可以计算乘法的算术流水线。在多功能流水线中,单独一项功能可能并不需要所有的流水段,而可能由流水段的不同子集来完成不同功能。由于输入数据以同步方式通过流水线,有些数据可能不需要某些流水段,当他们通过这些段的时候,将什么也不执行。这种没有使用或者空闲的流水段带来了另一种形式的流水线失效,可以称之为“外部碎片”。与内部碎片相似,外部碎片也是一种流水线开销,应该尽量减小。

第二条流水线理想假设认为所有的流水段总是被充分利用。除了说明不存在外部碎片之外,这条假设还说明要处理的数据是大量的。第一个数据达到流水线的最后一个段需要k个周期,这k个周期称为流水线的“填充时间”。最后一个数据进入流水线的第一个段后,还需要k个周期排空流水线。在填充合排空过程中,不是所有的流水段都处于工作状态。如果有大量的输入数据要进行处理,可以使流水线的填充和排空时间只占总时间的很小一部分。因此,多有流水段都可以认为总是处于工作状态的。

2.1.3 独立的运算

第三条流水线假设说明,流水线要处理的运算是彼此独立的。这意味着,所有同时间驻留在流水线中的运算是不相关的,也就是说,任何两个运算之间不存在数据或者是控制相关。这一假设保证流水线处于“流动”的工作方式,即后面的运算不会因为存在相关性而等待前面运算的完成。对于浮点加法器的例子中,这一假设是成立的。如果有多对操作数要进行相加,一对操作数的相加不会以来另一个加法的结果。这些操作数可以按照“流动”的方式进行处理。

这一条假设对于一些流水线可能不成立。后面的运算可能需要前面的结果,而这两条运算可能同时驻留流水线中。如果后面的运算已经进入到需要结果的流水段,而这时候前面的运算还没有到达产生结果的流水段,哪么后面的运算必须在那一段等待。这种等待称为“流水线停顿”。如果某一运算停顿在流水线的某一段,所有后续的运算可能都要被迫停顿。流水线停顿不可避免地导致某些段处于空闲状态,这可以看作是一种动态的外部碎片,因此会导致流水线吞吐率降低。如果相关是不可避免的,那么再设计流水线的时候,就要尽量减少流水线的停顿次数。

3指令流水线

前面三条流水线是流水线的理想假设。在大多数情况下,算术流水线的实际情况与理想假设相差不是太大。然而,对于指令流水线,实际情况与理想假设之间的差距就要大一些。而连接这一差距的桥梁正式指令流水线设计的趣味性合挑战性所在。在设计流水线处理器时,这三条假设成为三个主要的挑战。这三大挑战同时也提供了一条探索流水线处理器设计技术的思路。

3.1指令流水线设计

在设计指令流水线时,三条流水线假设成为设计的目标。一条指令的处理过程就是要流水化的运算,它必须被划分成多个尽量一致的子运算,以获得尽量均衡的流水线。处理一条指令的时间延迟成为“指令周期”,每一段的时间延迟决定了“机器周期”。指令周期是一个逻辑概念,它是指指令的执行周期。一个程序包含多条指令,程序的执行相当于相应运算的反复执行。机器周期是一个物理的概念,它包含数字逻辑电路中存储单元的时钟等,同时它也是流水线的时钟周期。

指令流水线设计的主要任务可以看作是将逻辑指令周期映射到物理机器周期。换句话说,就是将指令周期所对应的运算分成一个子运算的序列,由流水线的各段运行。要有效的进行这种分割或者映射,必须考虑三条流水线的理想假设。

一致的运算分量我们将指令周期分解成多个机器周期的过程称为“量化流水段”。在进行量化流水段时,要尽量减少内部碎片。如果在量化流水段时考虑不充分,就会引入内部碎片,从而影响流水线的利用率。第一条流水线理想假

设带来了指令流水线设计的第一个挑战,称之为流水线的均衡。流水线越均衡,内部碎片越少。

重复的运算与单一功能的算术流水线不一样的是,指令流水线天生就是多功能流水线,即它必须能处理多种不同的指令类型。不同的指令类型需要子运算序列稍微不同,所对应的硬件资源也有所不同。指令流水线设计的第二个挑战就是,连接或者整合不同指令类型对不同资源的需求。流水线应能够支持所有的指令类型;同时应该尽量减少每种指令类型的无效或者空闲的机器周期,也就是减少外部碎片。

独立的运算算术流水线处理的是数组数据,他们一般都不相关。与算术流水线不同的是,指令流水线所处理的指令彼此不是完全独立的。因此,指令流水线必须要有一套内部机制,用来检测指令间发生的相关并保证指令相关不会导致错误。指令相关可能会导致流水线停顿,从而引起失效。前面提到过,流水线停顿是是一种动态的外部碎片,它会降低流水线的吞吐率。因此,指令流水线设计的第三个挑战就是尽量减少流水线停顿。

3.2 指令集体系结构的影响

在正式讨论指令流水线设计的三个主要挑战之前,简单的考虑一下指令集体系结构对于指令流水线的影响,将很有启发意义。下面将一次考虑三条流水线理想假设。

一致的运算分量使流水段保持均衡的第一个挑战说明,必须保证分量的延迟是一致的。考察一条指令处理过程中的所有运算分量,其中一定有一个分量的延迟最长,并且这个分量不容易再分解成细的运算分量。在流水线处理器设计中,这样的关键分量是对存储器的访问。由于处理器和存储器的速度差异,存储器访问将成为关键的运算分量。为了尽量使指令流水线效率更高,应该对寻址模式进行优化,并且应该采用能够跟上处理器速度的快速cache。

重复的运算第一个挑战是将不同的指令类型对资源的要求统一起来,这是RISC体系结构的主要目的之一。降低指令类型的复杂性和多样性可以降低整合不同指令类型任务的难度。复杂的寻址模式不仅需要额外的访存,而且增加了资源需求的多样性。将所有这些资源需求整合到一条指令流水线当中是一件相当困难的事情,并且所得到的流水线对于很多指令其效率很低。这些指令将会产生外

部碎片,从而降低了流水线的利用率。对于一个RISC 体系结构的流水线而言,

资源整合要简单一些并且得到的流水线效率更高,外部碎片更少。

独立的运算 第三个挑战是尽量减少由于指令的相关而引起的流水线停顿,

这可能是流水线处理器设计中最吸引人的地方。要正确地完成操作,指令流水线

必须检测并化解指令相关。复杂寻址模式,尤其是与存储器访问有关的模式,会

因为存储器地址标识符的问题而导致相关检测非常困难。一般来说,寄存器相关

比较容易检测,因为寄存器在指令中是明确指出来的。简单而且堆成的指令合适

便于进行译码和相关检测。相关的检测和化解可以由编译器静态完成,也可以在

运行时由硬件动态完成。在编译和运行时分别进行怎样的处理决定于动态静态界

面(DSI )的定义。DSI 的定义将导致许多有趣而微妙的权衡。在进行权衡时,

必须将编译器、(微)体系结构和微处理器设计紧密结合起来。

3.3 流水线分级的考虑

理想流水化设计所获得的性能与流水线的深度(即流水线的段数)是成正比

的,因此似乎最好的设计就是尽量增加流水线的段数。但是,由于时钟的限制,

流水线划分的段数总是有一个物理局限的。流水线的每一个段可以看作一个组合

逻辑F 加上一个锁存器L ,信号通过F 之后在L 出锁存。定义M T 为通过F 的最

大传输延迟,即通过最长信号路径的延迟;m T 为通过F 的最小传输延迟,即通

过最短信号路径的延迟;L T 为正确建立时钟信号所需要的额外时间,包括必要

的建立和保持时间,以保证正确的锁存,同时还包括可能的时钟扭曲,即达到不

同锁存器的时钟沿的最大时间差。假设第一组信号1X 在1T 时刻作用在某一级的

输入端,那么F 的输出最迟将在m T T +1时刻有效。当第二组信号2X 在2T 时刻作

用的F 的输入端时,最快只要m T T +2时刻就能传到锁存器L 。要保证第二组信号

不覆盖第一组信号,必须满足:

)1.3(12式L M m T T T T T ++>+

该公式说明,信号2X 可能到达的最早时刻不能早于信号1X 正确锁存的时刻。该

不等式可以重写为:

)2.3(12式L m M T T T T T +->-

其中12T T -就是最短时钟周期T 。因此,时钟周期T 必须比L m M T T T +-大,而最

大时钟频率不能超过1/T 。

由此我们可以看到,时钟限制最终决定了流水线的深度,除了这一限制外,

如果考虑价格,即流水线的费用开销,最佳设计通常也不会采用最大的流水线深

度。在流水线系统的硬件设计中,必须考虑价格和性能的权衡。一般来说,流水

线的价格相对于流水线的深度成线性增长。

流水线深度一直是影响处理器效率的重要因素,流水线深度的增加可以让处

理器时钟频率进一步提高,但随着流水线深度的增长带来的处理器的单周期执行

效率降低、发热量上升,同时容易产生分支预测等问题反面影响也会加剧,因此

流水线长度的尺度把握一直是处理器设计中的一个重要核心问题。在设计流水

线,要综合各方面的因素,根据最佳性价比的要求来选择流水线的最佳段数。

3.4 流水线处理器设计

流水线处理器设计中的主要问题就是缩小实际情况与理想假设之间的差异。

所有关于流水线处理器的设计技术,都可以看作是为解决这三个挑战而进行的努

力。

3.4.1 保持流水段均衡

要流水化的运算就是每个指令周期所要进行的工作。一个典型的指令周期可

以根据功能划分成以下5个基本分量:

1. 取指(IF,Instruction fetch )

2. 译码(ID,Instruction decode )

3. 取操作数(OF,Operand(ds) fetch )

4. 执行(EX ,Instruction execution )

5. 存储(OS ,Operand store )

典型的指令周期从指令的取指开始,然后进行译码,以决定这条指令完成什

么操作。一条指令通常带有一个或者多个操作数,这些操作数存放在寄存器或者

存储器中,这取决于所使用的寻址方式。一旦所需要的操作数已准备好,就可以

执行这条指令所规定的操作。将执行所产生的结果存储起来之后,指令周期就算

结束了。

分割指令周期的一种很自然的方法就是按照5个基本运算分量来划分,即将每一个运算分量对应到一个流水段,从而得到一个5级指令流水线,我们称这条流水线为基本指令流水线,简称GNR流水线。在GNR流水线中,逻辑指令周期将映射到5个物理机器周期中。机器周期与指令周期之比为5,这个值反应了流水化的程度以及流水段的粒度。

量化流水段的目的是将指令周期分割到均衡的流水段中,以尽量减少内部碎片的数目。量化流水段可以从自然的功能划分开始。例如5个基本运算分量。多个延迟较小的分量可以合并到一个新的分量,以获得更均衡化的流水线。另外一种均衡流水线的方法则相反,不是将具有较短延迟的分量合并起来,而是将一个延迟比较长的运算分量分割成多个延迟较短的分量。该方法以延迟较短的分量为参考,将长延迟的运算分量分割成更小的分量,使得各个分量的延迟与参考分量的延迟差不多。这将导致机器周期的粒度更细,流水化的程度更高。

在具体进行指令流水线设计的时候,这两种方法可以结合起来使用。不管在什么情况下,量化流水段的目标都是尽量减小内部碎片的开销。

3.4.2 统一指令类型

第二条流水线理想假设则要求流水线要尽量反复进行同样的运算。对于大多数指令流水线,重复完成相同运算的理想假设并不成立。指令流水线重复处理的指令具有不同的指令类型。虽然指令周期不断重复,但每次可能处理的是不同类型的指令。不同的指令类型有不同的资源需求,并且各个运算分量的顺序也可能不一样。指令流水线要求能满足不同的需求,必须提供所有指令类型所需要的所有运算分量的超集。单独一种指令类型可能不需要流水线中的所有流水段。对于单独一种指令类型,不需要的流水段成为某种形式的失效或者开销,即外部碎片。统一指令类型的目的,就是尽量减少所有指令类型的外部碎片。

要完成一次运算,计算机必须完成一下三个基本任务:

1.算术操作

2.数据移动

3.指令定序

算术操作包括对指定的操作数执行算术合逻辑运算,这是整个运算中最突出的部分,所以经常和整个运算等同起来。一个处理器能够支持大量的算术操作类

型。数据移动负责将操作数和结果在存储地址之间进行移动。通常存储器地址是分层次的并有专门的指令来进行数据移动。指令定序负责指令顺序的确定。通常一个程序中的运算包含很多条指令,通过执行一个指令序列来完成所需要的运算。这个指令序列,或者叫程序流,可以由指令自身来确定。

如何将这三个基本任务分派给ISA中的各种指令,是指令集实际中的关键问题。受RISC体系结果的影响,现在的大多数指令集体系结构都有一些共同的特征。这些体系结果包括Hewlett-Packard的Precision体系结构,IBM的Power 体系结构,IBM/Motorola的PowerPC体系结构,还有Digital的Alpha体系结构。这些现代ISA倾向于采用定长指令、正交的指令格式、load/store型体系结构和简单的寻址模式。这些体系结构中的大多数都能与指令流水线很好的协调起来。

在一个典型的现代RISC体系结构中,指令集采用一种专门的指令类型来完成三个基本任务中的一个,也就是说,每一种指令类型只完成三个基本任务中的一个。根据三个基本任务,可以将指令分成三种类型:

1.ALU指令完成算术和逻辑运算

2.Load/store指令完成数据在寄存器及存储器间的移动

3.分支指令控制执行指令的顺序

ALU指令所执行的算术逻辑操作严格地针对寄存器操作数进行,只有load 和store指令能访问数据存储器。Load/store指令和分支指令都采用比较简单的寻址模式,通常只支持带偏移量的寄存器间接寻址模式。对于分支指令,还支持PC相对寻址。在下面列出关于前两种指令类型的详细规范,其中假设使用了指令cache(I-cache)和数据cache(D-cache)。

比较表3.1与表3.2中的两种主要指令类型规范,我们可以看到,两种指令类型的初始化分量比较类似,然而后面的分量有些差异。这些语意上的差异将导致不同的资源需求。

表3.1 ALU指令类型规范

表3.2 Load/store指令类型规范

统一不同指令类型主要是将不同资源需求有效的整合到一条指令流水线中去,使得这条流水线适合于所有的指令类型。整合的目标是,尽量减少流水线所需要的资源总数,同时尽量提高流水线中所有资源的利用率。通常,资源的整合过程包含以下三个步骤。

1.分析每种指令类型的运算分量序列,确定相应的资源需求。

2.找出指令类型之间的共性,合并相同的运算分量,以使用相同的流水段。

3.如果在不违背指令语意的情况下存在一定的灵活性,可以改变或者重新

排列分量的顺序,以便进一步的整合。

可以将这一过程应用到表3.1和表3.2中。ALU,load,store指令类型的规范总结如图3.3所示。现在我们由上至下实施统一的过程,检查3个分量的序列合要求提供支持的硬件资源。这个过程产生了指令流水线各段的定义。

图3.3 ALU,load,store指令类型的规范总结

所有3种指令类型都有相同的IF和ID分量,因此,这两个运算分量可以很容易的合并起来,并用来定义流水线的前两个段,即IF和ID段,从而完成取指和译码工作。

所有3种指令类型的OF分量都要读寄存器文件。ALU指令访问两个寄存器并且获得寄存器操作数;load指令访问一个寄存器并获得地址;store指令访问一个寄存器并且获得操作数,访问另外一个寄存器以获得基地址。在3中情况下都要访问一个或者两个寄存器,这些相似的分量可以合并到流水线的第三段,成RD段并从寄存器文件读取最多两个寄存器操作数。因此寄存器文件在每个时钟周期内必须支持两个独立的并行操作数。

ALU指令要求有一个ALU功能单元来完成必要的算术逻辑运算。虽然load,store指令不需要执行这样的操作,但是他们需要生成有效的地址来访存。可以看出,地址生成可以由ALU功能单元来完成。因此,这些分量可以合并到流水线第4段,成为ALU段并包含一个ALU功能单元,完成算术逻辑运算或者有效地址的生成。

ALU和load指令都需要想寄存器写回结果,这是他们的最后一个运算分量。ALU指令将寄存器操作的结果写回寄存器,load将访存的数据写入到目标寄存器。ALU指令不需要访存,因此,理论上向目标寄存器回写这一过程可以在ALU 段之后立即进行。然而为了load指令回写分量统一起来,ALU指令的寄存器回写分量向后推迟了一段,在流水线的第6段进行,成为WB段。这将导致ALU指

令在MEM段产生一个空闲周期。这是一种外部碎片并将给流水线带来一些效率损失。

通过对不同指令类型的整合,可以得到一条6级流水线,如图3.3右侧所示。

3.4.3减少流水线停顿

第三条流水线理想假设则认为流水线执行的运算是相互独立的。在一个k 级流水线中,可能有k个不同运算同时进行处理。对于指令流水线,最多可能有k条不同指令同时存在于流水线中。这些指令可能不是彼此独立的。实际上,这些指令之间通常都存在着相关。如果流水线中的指令不相关,将有助于流水线的流动,或者说,指令流过流水线而不会产生任何流水线停顿。如果指令间存在相关,则必须检测并化解相关。相关的化解可能要求流水线停顿。设计的挑战和目标就是减少流尽量减少流水线停顿,防止吞吐率下降。

4 总结与展望

流水线技术是一项可以应用于任何ISA的微体系结构技术。RISC体系结构的特性确定确实能够使流水线的设计更加容易。流水线技术已经被证明是提高处理器性能的一项十分强大的技术,并且在流水线深度方面仍然有很多上升空间。不难想象,以后还会有更深的流水线出现。

流水线性能的主要障碍是指令相关引起的流水线停顿。其中,控制相关引起的分支开销是最主要的部分。随着流水线深度的增加,分支开销也会增大并成为主要的挑战。另外,流水线处理器设计将传统CPU设计中的数据通路设计和控制通路设计放到了一起进行处理,它们可以被合并到一条流水线来实现。

CPU中指令流水线技术是现代计算机中提高处理机运行速度的关键性技术,也是超标量流水线技术与超流水线技术的基础。在目前,国内计算机硬件技术,特别是CPU的研究起步较晚,技术相对比较落后。在这种形势下进行CPU中指令流水线技术进行学习研究,其意义是及其重要的,同时困难和挑战也是比较大的。对我来说,这是一个非常好学习的过程,很多的基本知识,基础理论都让我受益匪浅。无论在以后的工作或者是学习中,这些宝贵的经验都将一直伴随着我。虽然我们国家目前在此领域的研究还比较落后,但是我相信以后会有更多的人投入进来,我们的资料和技术也会一天天的发展起来,最后达到甚至超过国际先进水平也未可知。

参考文献

[1] 李学干.计算机系统结构(第三版).西安:西安电子科技大学出版社,2000年。

[2] 王闵.计算机组成原理.北京:电子工业出版社,2005年。

[3] 郑纬民,汤志忠.计算机系统结构(第二版).北京:清华大学出版社。

[4] 现代处理器的核心技术与基本结构。

[5] 金兰等.并行处理计算机结构.北京:国防工业出版社,1982年。

[6] Tannenbaun A S. Structured Computer Organization. Holland:

Prentice-Hall,1984.

[7] John Paul Shen ,Mikko H.Lipasti (著),邓宇,王蕾等译.现代处理器设计——超标量处理器基础,2004年。

[8] 邹逢兴,陈立刚.计算机硬件技术基础(第二版).北京:高等教育出版社,2005年。

[9] 张昆藏.奔腾Ⅱ/Ⅲ处理器系统结构.北京:电子工业出版社,2000年。

[10] 邓洪涛等.全面破解计算机硬件.西安:西安电子科学技术大学出版社,2003。

计算机系统结构考试计算题

3.12 有一指令流水线如下所示 (1) 求连续输入10条指令,该流水线的实际吞吐率和效率; (2) 该流水线的“瓶颈”在哪一段?请采取两种不同的措施消除此“瓶颈”。 对于你所给出的两种新的流水线,连续输入10条指令时,其实际吞吐率和效率各是多少? 解:(1) 2200(ns)2009200)10050(50t )1n (t T max m 1 i i pipeline =?++++=?-+?=∑= )(ns 220 1 T n T P 1pipeline -== 45.45%11 5 4400T P m t T P E m 1 i i ≈=? =?? =∑= (2)瓶颈在3、4段。 ? 变成八级流水线(细分) 850(ns)509850t 1)(n t T max m 1 i i pipeline =?+?=?-+?=∑= )(ns 85 1 T n T P 1pipeline -== 58.82%17 10 8400T P m ti T P E m 1 i ≈=? =?? =∑= ? 重复设置部件 出 50ns 50ns 100ns 200ns

)(ns 85 1 T n T P 1pipeline -== 58.82%17 10885010400E ≈=??= 3.13 4段组成,3段时,一次,然4段。如果 需要的时间都是,问: (1) 当在流水线的输入端连续地每时间输入任务时,该流水线会发生 什么情况? (2) 此流水线的最大吞吐率为多少?如果每输入一个任务,连续处理 10个任务时的实际吞吐率和效率是多少? (3) 当每段时间不变时,如何提高该流水线的吞吐率?仍连续处理10个 任务时,其吞吐率提高多少? (2) t ?t ?2

指令流水线

第七章指令流水线 2. 简单回答下列问题。(参考答案略) (1)流水线方式下,一条指令的执行时间缩短了还是加长了?程序的执行时间缩短了还是加长了?为什么? (2)具有什么特征的指令集易于实现指令流水线? (3)流水线处理器中时钟周期如何确定?单条流水线处理器的CPI为多少?每个时钟周期一定有一条指令完成吗?为什么? (4)流水线处理器的控制器实现方式更类似于单周期控制器还是多周期控制器? (5)为什么要在各流水段之间加寄存器?各流水段寄存器的宽度是否都一样?为什么? (6)你能列出哪几种流水线被阻塞的情况?你知道硬件和软件是如何处理它们的吗? (7)超流水线和多发射流水线的主要区别是什么? (8)静态多发射流水线和动态多发射流水线的主要区别是什么? (9)为什么说Pentium 4是“CISC壳、RISC核”的体系结构? 3. 假定在一个五级流水线(如P.205图7.1所示)处理器中,各主要功能单元的操作时间为: 存储单元:200ps;ALU和加法器:150ps;寄存器堆读口或写口:50ps。若执行阶段EX 所用的ALU操作时间缩短20%,则能否加快流水线执行速度?如果能的话,能加快多少? 如果不能的话,为什么?若ALU操作时间增加20%,对流水线的性能有何影响?若ALU 操作时间增加40%,对流水线的性能有何影响? 参考答案: a. ALU操作时间缩短20%不能加快流水线指令速度。因为存储单元的时间为200ps,所 以流水线的时钟周期不会因为ALU操作时间的缩短而变短。 b. ALU操作时间延长20%时,变为180ps,比200ps小,对流水线性能没有影响; c. ALU操作时间延长40%时,变为210ps,比200ps大,所以,流水线的时钟周期将变 为210,其效率降低了(210-200)/200=5%。 4. 假定某计算机工程师想设计一个新CPU,一个典型程序的核心模块有一百万条指令,每条 指令执行时间为100ps。 (1)在非流水线处理器上执行该程序需要花多长时间? (2)若新CPU是一个20级流水线处理器,执行上述同样的程序,理想情况下,它比非流水线处理器快多少? (3)实际流水线并不是理想的,流水段间数据传送会有额外开销。这些开销是否会影响指令执行时间(Instruction latency)和指令吞吐率(Instruction throughput)? 参考答案: (1)非流水线处理器上执行该程序的时间为:100psx106=100μs. (2)若在一个20级流水线的处理器上执行,理想情况下,每个时钟周期为:100/20=5ps, ? 156 ?

并行计算(天津大学软件学院)

并行计算 一、并行计算概述 1.并行计算定义: 并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程。为执行并行计算,计算资源应包括一台配有多处理机(并行处理)的计算机、一个与网络相连的计算机专有编号,或者两者结合使用。并行计算的主要目的是快速解决大型且复杂的计算问题。此外还包括:利用非本地资源,节约成本―使用多个“廉价”计算资源取代大型计算机,同时克服单个计算机上存在的存储器限制。 为利用并行计算,通常计算问题表现为以下特征: (1)将工作分离成离散部分,有助于同时解决; (2)随时并及时地执行多个程序指令; (3)多计算资源下解决问题的耗时要少于单个计算资源下的耗时。 并行计算是相对于串行计算来说的,所谓并行计算分为时间上的并行和空间上的并行。时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算。2.并行化方法 1)域分解 首先,确定数据如何划分到各个处理器 然后,确定每个处理器所需要做的事情 示例:求数组中的最大值 2)任务(功能)分解 首先,将任务划分到各个处理器 然后,确定各个处理器需要处理的数据 Example: Event-handler for GUI 二、并行计算硬件环境 1.并行计算机系统结构 1)Flynn分类 a. MIMD 多指令流多数据流(Multiple Instruction Stream Multiple Data Stream,简称MIMD),它使用多个控制器来异步的控制多个处理器,从而实现空间上的并行性。 对于大多数并行计算机而言,多个处理单元都是根据不同的控制流程执行不同的操作,处理不同的数据,因此,它们被称作是多指令流多数据流计算机 b. SIMD 单指令流多数据流(Single Instruction Multiple Data)能够复制多个操作数,并把它们打包在大型寄存器的一组指令集,以同步方式,在同一时间内执行同一条指令。 以加法指令为例,单指令单数据(SISD)的CPU对加法指令译码后,执行部件先访问内存,取得第一个操作数;之后再一次访问内存,取得第二个操作数;随后才能进行求和运算。而在SIMD型的CPU中,指令译码后几个执行部件同时访问内存,一次性获得所有操作数进行运算。这个特点使SIMD特别适合于多媒体应用等数据密集型运算。 2)并行计算及结构模型 a. SMP SMP (Symmetric Multiprocessor) 采用商品化的处理器,这些处理器通过总线或交叉开关连接到共享存储器。每个处理器可等同地访问共享存储器、I/O设备和操作系统服务。 扩展性有限。

第05章 流水线课后习题

第5章课后习题 1.填空题 (1) 衡量流水线性能的主要指标有 (2) 指令乱序流动可能造成 (3) 解决数据相关主要有 (4) 超标量处理机开发的是 行性。 (1). 吞吐率、加速比、效率 (2). 先写后读、先读后写、写写 (3). 推后分析、设置专用路径 (4). 空间、时间 2.假设一条指令的执行过程分为"取指令"、"分析"和"执行"三段,每一段的时间分别为△t、2△t和3△t。在下列各种情况下,分别写出连续执行n条指令所需要的时间表达式。 (1) 顺序执行方式。 (2) 仅"取指令"和"执行"重叠。 (3) "取指令"、"分析"和"执行"重叠。 第2题 (1) 顺序执行时每条指令用时=△t+2△t+3△t=6△t, 因此n条指令所需要的时间=6n*△t (2) 第一条指令完成需要时间=△t+2△t+3△t=6△t,根据题义,下一条指令的"取指令"与上一条指令"执行"的最后一个△t重叠。因此,自从第一条指令完成后,每隔4△t完成一条指令。所以余下的n-1条指令用时(n-1)*4△t. 所以,n条指令所需要的时间=6△t+(n-1)*4△t=2(2n+1)△t。 (3) 第一条指令完成需要时间=△t+2△t+3△t=6△t,由于一条指令的"取指令"和"分析"阶段和下一条指令的"执行"阶段重叠,因此,此后每3△t 完成一条指令,余下的n-1条指令用时(n-1)*3△t. 因此n条指令所需要的时间=6△t+(n-1)*3△t=3(n+1)△t

3.用一条5个功能段的浮点加法器流水线计算F=。每个功能段的延迟时间均相等,流水线的输出端与输入端之间有直接数据通路,而且设置有足够的缓冲寄存器。要求用尽可能短的时间完成计算,画出流水线时空图,计算流水线的实际吞吐率、加速比和效率。 第3题 假设每个功能段的延迟时间为△t。 F==[(A1+1A2)+6(A3+2A4)+8(A5+3A6)]+9[(A7+4A8)+7(A9+5A10)] 由上面的时空图可以看出,在20△t时间内共完成9个加法操作。因此: 吞吐率为:TP= 9/20=0.45 加速比为:Sp= 9*5/20=2.5 效率为:E= 45/(20*5)=45% 4.设有一个15000条指令的程序在一台时钟速率为25MHz的线性流水线处理机上执行。假设该指令流水线有5段,并且每个时钟周期发射一条指令。忽略由于转移指令和无序执行造成的损失。 (1) 用该流水线执行这一程序,并用流过延迟与其相等的一个等效非流水线处理机执行同一程序,将两者加以比较,并计算其加速比。 (2) 该流水线处理机的效率是多少? (3) 计算该流水线的吞吐率。 第4题 (1) 等效的非流水处理机执行一条指令需要的时间是5个时钟周期。依照加速比定义, (2) 效率E为

并行计算-习题及答案-第12章 并行程序设计基础

第十二章 并行程序设计基础 习题例题: 1、假定有n 个进程P(0),P(1),…,P(n -1),数组元素][i a 开始时被分配给进程P(i )。试写出求归约和]1[]1[]0[-+++n a a a 的代码段,并以8=n 示例之。 2、假定某公司在银行中有三个账户X 、Y 和Z ,它们可以由公司的任何雇员随意访问。雇员们对银行的存、取和转帐等事务处理的代码段可描述如下: /*从账户X 支取¥100元*/ atomic { if (balance[X] > 100) balance[X] = balance[X]-100; } /*从账户Y 存入¥100元*/ atomic {balance[Y] = balance[Y]-100;} /*从账户X 中转¥100元到帐号Z*/ atomic { if (balance[X] > 100){ balance[X] = balance[X]-100; balance[Z] = balance[Z]+100; } } 其中,atomic {}为子原子操作。试解释为什么雇员们在任何时候(同时)支、取、转帐时,这些事务操作总是安全有效的。 3、考虑如下使用lock 和unlock 的并行代码: parfor (i = 0;i < n ;i++){ noncritical section lock(S); critical section unlock(S); }

假定非临界区操作取T ncs时间,临界区操作取T cs时间,加锁取t lock时间,而去锁时间可忽略。则相应的串行程序需n( T ncs + T cs )时间。试问: ①总的并行执行时间是多少? ②使用n个处理器时加速多大? ③你能忽略开销吗? 4、计算两整数数组之内积的串行代码如下: Sum = 0; for(i = 0;i < N;i++) Sum = Sum + A[i]*B[i]; 试用①相并行;②分治并行;③流水线并行;④主-从行并行;⑤工作池并行等五种并行编程风范,写出如上计算内积的并行代码段。 5、图12.15示出了点到点和各种集合通信操作。试根据该图解式点倒点、播送、散步、收集、全交换、移位、归约与前缀和等通信操作的含义。 图12.15点到点和集合通信操作

并行计算期末试题-理工

并行计算期末试题 适用专业:理工类 考试说明: 1、将试卷答案以学号命名为word文件,如115042101.doc,上传到 ftp://172.17.124.203/upload。 2、第一、二大题,直接将答案写在题后;第三、四题要求将程序补充、编写完 整并将运行结果截图插在题目后面。 一、简述题(每小题4分,共20分)。 1、简述openmp编译制导指令master,single,critical,atomic的功能。 1.master制导语句指定代码段只能被主线程执行 2.single编译制导语句指定内部代码只能由线程组中的一个线程执行。线程组中没有执行single语句的线程会一直等待代码块的结束,使用nowait子句除外。 3.critical制导语句表明域中的代码一次只能由一个线程执行,其他线程被阻塞在临界区 4.atomic制导语句指定特定的存储单元将被原子更新 2、简述openmp编译制导子句shared,private的功能?简述openmp编译制导指令threadprivate的功能。 1.private子句表示它列出的变量对于每个线程是局部的。 2.shared子句表示它所列出的变量被线程组中所有的线程共享,所有线程都能对它进行读写访问。 3.threadprivate语句使一个全局文件作用域的变量在并行域内变成每个线程私有,每个线程对该变量复制一份私有拷贝并在多个并行域中保持。 3、简述openmp函数omp_set_num_threads,omp_get_num_threads, omp_get_thread_num的功能;环境变量OMP_NUM_THREADS的功能。 omp_set_num_threads

计算机系统结构实验一流水线指令调度

计算机专业类课程 实 验 报 告 课程名称:计算机系统结构 学院:计算机科学与工程 专业:计算机科学与技术 学生姓名:林怡 学号:2012060020023 指导教师:叶娅兰 日期:2015年 5月 5日 电子科技大学计算机学院实验中心

电 子 科 技 大 学 实 验 报 告 实验一 一、实验名称:流水线指令调度 二、实验学时:4 三、实验内容和目的: 实验目的: 1. 通过本实验,理解指令调度的方法。 2.掌握使用VC 开发平台模拟处理机内部指令流调度的编程策略。 实验内容: (一)给定要执行的任务和执行该任务的流水线结构 流水线的调度方式能够提高任务的并行度,但是针对不同的任务,由于相关的存在,其并行度的提高是不一致的。在开始程序设计前,我们首先要给定所要完成的任务: 这里我们使用最简单的累加操作∑=n 1i Ai 。 n 的数值可以变化,通过变换n 的值用同一程 序进行多次模拟。 给定流水线: 流水线分四个步骤,每个步骤的执行时间均为一个单位时间。 (二)对任务进行分解 任务分解的目的是为了减少相关。例如n =4时,任务分解为 A1+A2、A3+A4、 A1+A2+A3+A4 三个加法操作。 如果n 的大小是未知的,任务该怎样分解呢?换而言之,在程序模拟中,有没有一种通行的分解处理方式,可以实现对任意数目的源数据的累加的分解? (三)任务分解程序模拟的思路 首先,Ai 是对称的,Ai 和Aj 都是一个源操作,任意更换其相对位置,计算的累加和的结果是不变的。每次的加法操作能执行的必要条件是存在两个源数据,因此我 1 2 3 4 X Y

们可以把所有的源数据放入一个队列中,只要该队列中有两个源,那么就执行加法,加法计算的结果是下一次计算的源数据,我们把它再放回源数据队列,直到对列中只剩一个数据、同时加法流水线中没有执行加法操作时,整个累加过程完成。 (四)加法流水线的设计 加法流水线分为四个步骤,每个步骤时间花费是一个单位时间。模拟程序的目的是为了计算总的执行时间,因此对于每个步骤执行的功能并不需要关心。 为此设计一个总步数为4步的加法器,接收两个输入数据,经过4个时间片,输出加法的结果。时间片可以用定时器来模拟。 (五)程序设计 程序应包括一个队列,一个加法类,一个定时器,一个输出对话框。 队列用于存放源数据,一开始将n个源数据A1-An放入。 启动定时器,每一个时间片从队列中取出两个源数据,送入加法器(可以通过调用加法器中接口函数,把源数据作为参数传入)。 构造加法器类,可以考虑用一个长度对4的执行队列来模拟4个步骤,每个时间片将队列的数据依次下压一格,队列尾的数据进行加法计算并将结果压入源数据队列。 用一个记数值表示时间开销,每个时间片对该记数值加1。 当源队列只剩一个数据且加法器的执行队列为空时,整个程序结束,记数器的值就是任务执行的总体时间花费。 (五)多次模拟 可以通过循环的方式对n从4-20进行循环,将每次模拟运行的时间开销值在对话框中显示出来。如果可能将结果打印。 四、实验原理: 程序设计及数据结构: 实验程序共有6个类,分别是: ①PipeAdditionTest 公共类,测试程序,每一个n的循环,将计时器清零并初始化长度为n的源操作数队列,当源操作数队列有多余一个操作数或者加法器的执行队列不为空的时候持续调用加法器类执行加法操作,在程序结束时输出n以及计时器timercounter的值; ②OperaQueue 操作数队列类,包括一个操作数队列数据结构、队列初始化函数OperaQueue(int queueLength)、从队列中取一个源操作数函数getOperationNum()和将加法器计算的结果压入队尾的函数pushOperationNum(int op); 电子科技大学计算机学院实验中心

流水线指令及RISC

一.流水线 1. 概念: 处理器按照一系列步骤来执行每一条指令.典型的步骤如下: 1) 从存储器读取指令(fetch). 2) 译码以鉴别它是那一类指令(dec). 3) 从寄存器堆取得所需的操作数(reg). 4) 将操作数进行组合以得到结果或存储器地址(ALU). 5) 如果需要,则访问存储器以存取数据(mem). 6) 将结果写回到寄存器堆(res). 并不是所有的指令都需要每一个步骤,但是,多数指令需要其中的多数步骤.这些步 骤往往使用不同的硬件功能,例如,ALU 可能只在第四步中用到.因此,如果一条指令不是在前一条结束之前就开始,那么在每一个步骤内处理器只有少部分的硬体被使用. 有一个明显的方法可以改善硬件资源的使用率和处理器的吞吐量,这就是在当前指 令结束之前就开始执行下一条指令.该技术被称为流水线,是在通用处理器中采用并行算法且非常有效的途径. 采用上述操作顺序,处理器可以这样来组织:当一条指令刚刚执行完步骤1并转向步 骤2时,下一条指令就开始执行步骤1.图1.13说明了这个过程.从原理上来说,这样的流水线应该比没有重叠的指令执行快6倍,但实际上事情并没有这么好,下面我们将会看到原因. 1 2 3 指令 时间 图1.13 流水线的指令执行 2. 流水线中的冒险 要点:后一条指令要用到前一条指令。 在典型的计算机程序中经常会遇到这样的情形,即一条指令的结果被用做下一条指令的操作数.当这种情形发生时,图1.13所示的流水线操作就中断了,因为第一条指令的结果在第二条指令取操作数时还没有产生.第二条指令必须停止,直到结果产生为止.这是流水线的行为如图1.14所示.这是流水线的”写后读”冒险(hazard). 1. 2. 图 1.14 先写后读的流水线冒险 转移指令更会破坏流水线的行为,因为后续指令的取指步骤受到转移目标计算的影响,因而必须推迟.不幸的是,当转移指令正在被译码时,在它被确认为是转移指令

自动化生产流水线节拍、设备利用率计算

自动化生产流水线节 拍、设备利用率计算-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN

自动化生产流水线节拍 流水线的负荷系数又称编程效率,其值越大,表明流水线的生产效率越高。 流水线上总负荷系数可按下列公式计算: η=T/(N×Pt) 其中η为负荷系数 Pt为生产节拍=计划期有效工作时间/计划期产品产量 =标准总加工时间/作业员人数 =有限机种的标准总加工时间/有限机种台数 N为工位数 T为所有工位完成一个节拍所用时间之合 一般以工作地(机器)作计算单元的,流水线的负荷系数不应低于;以操作工人作计算单位的,其流水线的负荷系数应在-以上。 举个例子 某一新开设的丁恤衫制衣厂,生产目标为每日1000件T恤杉、每日工作8h。生产工序和每个工序的日产量如表所示 工序名称 8H产量 1装袋 320 2缝肩 1000 3缝领 500 4缝袖 950 5上袖 400 6上领 480 7车边 1050 8开门 900 9钉纽 950 ①计算这条生产线的生产节拍Pt Pt=H/Q=8×60/1000=/件 ②计算每个工序所需的标准作业时间,结果如表5-8 ③计算每个工位所需的工位数,结果列于表5-8 例如,第一个工序的作业时间 第一个工序理论上所需的工位数= 15/=个 工序名称作业之间计算工位数实际工位 1 3 2 1 1 3 2 2 4 1 5 3 6 2 7 1 8 1 9 1 合计 15 ④计算出理论上该生产线所需的最小工作位数,即

Nmin=[T/Pt]+1=[]+1=15个 ⑤计算该生产线平衡后的平均负荷率 η=T/(N×Pt)×100%=(15× ×100%=& 依照工序流程安排生产线,首先要按照每个工序的难易程度,计算出各工序所需的工作位数目,务必使各工序每小时的总产量大致相同,才能得到一条子衡的生产线,例1中该生产线平衡后实际的节拍应为(瓶颈工作地节拍),平衡后的工序负荷率为%。 流程的“节拍”(Cycle time)是指连续完成相同的两个产品(或两次服务,或两批产品)之间的间隔时间。换句话说,即指完成一个产品所需的平均时间。节拍通常只是用于定义一个流程中某一具体工序或环节的单位产出时间。如果产品必须是成批制作的,则节拍指两批产品之间的间隔时间。在流程设计中,如果预先给定了一个流程每天(或其它单位时间段)必须的产出,首先需要考虑的是流程的节拍。在机械加工生产线的设计中,节拍是设计的一个很重要的因素。生产节拍的平衡很重要。生产节拍的公式为t=60Tβ/N 式中t为生产节拍,T为一年基本工时,一般规定,按一班制工时为2360h/年,按两班制工时为4650h/年;β为复杂系数,一般取为;N为生产线加工工件的年生产纲领。机械加工生产线的主要分类有:单一产品固定节拍生产线、单一产品非固定节拍生产线、成组产品可调节生产线、柔性制造生产线。

流水线设计步骤

1.计算流水线的节拍 流水线、自动化流水线的节拍就是顺序生产两件相同制品之间的时间间隔。 它表明了流水线生产率的高低,是流水线最重要的工作参数。其计算公式如下:r=F/N 其中:r—流水线的节拍(分/件),F—计划期内有效工作时间(分),N—计划期的产品产量(件).这里:F=F0K,F0—计划期内制度工作时间(分),K—时间利用系数。 确定系数K时要考虑这样几个因素:设备修理、调整、更换模具的时间,工人休息的时间。一般K取0.9—0.96,两班工作时间K取0.95,则F为:F=FOK=306×2×8×0.95 ×60=279072(分) 计划期的产品产量N.除应根据生产大纲规定的出产量计算外,还应考虑生产中不可避免的废品和备品的数量。 当生产线、生产线制造上加工的零件小,节拍只有几秒或几十秒时,零件就要采用成批运输,此时顺序生产两批同样制品之间的时间间隔称为节奏,它等于节拍与运输批量的乘积。流水线采取按批运输制品时,如果批量较大,虽然可以简化运输工作,但流水线的在制品占用量却要随之增大。所以对劳动量大、制件重量大、价值高的产品应采用较小的运输批量;反之,则应扩大运输的批量。 进行工序同期化,计算工作地(设备)需要量 流水线的节拍确定以后,要根据节拍来调节工艺过程,使各道工序的时间与流水线的节拍相等或成整数倍比例关系,这个工作称为工序同期化。工序同期化是组织流水线的必要条件,也是提高设备负荷和劳动生产率、缩短生产周期的重要方法。 进行工序同期化的措施有: ①提高设备的生产效率。可以通过改装设备、改变设备型号、同时加工几 个制件来提高生产效率; ②改进工艺装备。采用快速安装卡具、模具,减少装夹零件的辅助时间; ③改进工作地布置与操作方法,减少辅助作业时间; ④提高工人的工作熟练程度和效率; ⑤详细地进行工序的合并与分解。首先将工序分成几部分,然后根据节拍 重新组合工序,以达到同期化的要求,这是装配工序同期化的主要方法。 工序同期化以后,可以根据新确定的工序时间来计算各道工序的设备需要量,它可以用下式计算: m(i)=t(i)/r 式中:mi—第i道工序所需工作地数(设备台数),ti—第i道工序的单件时间定额(分)包括工人在传送带上取放制品的时间。一般来说,计算出的设备数不是整数,所取的设备数为大于计算数的邻近整数。若某设备的负荷较大,就应转移部分工序到其它设备上或增加工作时间来减少设备的负荷。

北邮实验二 指令流水线相关性分析

北京邮电大学 计算机学院 《计算机系统结构》课程实验 2015年4月

实验二指令流水线相关性分析 一、实验类别:验证实验 二、实验目的:通过使用WINDLX模拟器,对程序中的三种相关现 象进行观察,并对使用专用通路,增加运算部件等技术对性能的影响进行考察,加深对流水线和RISC处理器的特点的理解。 三、实验学时:4 四、实验组人数:1/1 五、实验设备环境:WinDLX模拟器可以装入DLX汇编语言程序, 然后单步、设置断点或者连续执行该程序。CPU的寄存器、流水线、I/O和存储器都可以使用图形的方式表示出来。模拟器还提供了对流水线操作的统计功能。该模拟器对理解流水线和RISC处理器的特点很有帮助。 六、实验原理:指令流水线中主要有结构相关、数据相关、控制相 关。相关影响流水线性能。 七、教学要点与学习难点:三种相关及其解决办法 八、实验内容和要求:使用WinDLX模拟器,对求阶乘程序Fact.s 做分析 九、实验步骤: (1)观察程序中出现的数据/控制/结构相关。指出程序中出现上述现象的指令组合。 (2)考察增加浮点运算部件对性能的影响。 (3)考察增加forward部件对性能的影响。 (4)观察转移指令在转移成功和转移不成功时候的流水线开销注意:除(2)以外,浮点加、乘、除部件都只有一个;本问题中所有浮点运算部件的延时都请设定为4个周期。

十、实验过程: 同实验一、选择File/Load Code or Data,窗口中会列出目录中所有汇编程序。按如下步骤操作,可将这两个文件装入主存。 ?点击fact.s ? 点击select 按钮?点击input.s ? 点击select按钮?点击load按钮 以下3个相关的观察实验(floating为1,4) 数据相关及指令组合: 在第27个周期里,Clock Cycle Diagram窗口的时空图和Pipeline窗口中的流图第一次出现了橘黄色的R-Stall。点击Pipeline的橘黄色框,出现的Information about seqi r5,r3,0xa中有图: lbu r3,0x0(r2)要在WB周期写回r3中的数据,而下一条指令seqi r5,r3,0xa 要在intEX周期中读取r3中的数据。发生了写读相关。所以为了避免冲突,seqi r5,r3,0xa的intEX指令延迟了一个周期进行。 相关指令组合 控制相关及指令组合: 在第四时钟周期,第一条命令正处于MEM段,第二条命令处于intEX段,第四条命令处于IF段,而第三条命令处于"aborted"。

指令流水线技术研究

指令流水线技术研究 摘要:流水线技术是当前指令集处理器设计中广泛采用的技术。首先介绍了有关流水线的基础知识,包括概念、特点、分类及其主要性能指标。然后提出了三条流水线理想假设,并由此得出了指令流水线设计的三大挑战,从而指出了在指令流水线设计时应重点解决的三大问题和设计方法。最后是对该技术的总结与展望。 关键字:指令流水线;概念;性能指标;理想假设;处理器设计; 前言 流水线技术是提高系统吞吐率的一项强大的实现技术,并且不需要大量重复设置硬件。20世界60年代早期的一些高端机器中第一次采用了流水线技术。第一个采用指令流水线的机器是IBM7030(又称作Stretch计算机)。后来的CDC 6600同时采用了流水线和多功能部件。 到了20世纪80年代,流水线技术成为RISC处理器设计方法中最基本的技术之一。RISC设计方法的大部分技术都直接或者间接以提高流水线性能为目标。从此以后,流水线技术也被有效地应用到CISC处理器的设计中。Intel i486是IA32体系结构中的第一个流水线实现。Digital的VAX和Motorola的M68K的流水线版本在商业上也取得了成功。 流水线技术是当前指令集处理器设计中广泛采用的技术。在这里我们将重点放在(标量)流水线处理器的设计。流水线处理器设计中的许多方法和技术,例如用于检测和化解相关的流水线互锁机制,都是标量处理器设计的基本方法。 1 流水线基础 加快机器语言的解释过程提高机器的运算速度是设计计算机的基本任务之一。这可以通过两个途径来实现。一个途径是提高器件的速度,采用更好的算法,增加指令内各微操作的并行程度,减少解释过程所需要的拍数等多项措施来加快机器指令的解释。另一个途径则是采用重叠和流水方法,同时解释两条、多条以至整段程序,从而加快整个机器语言程序的解释。流水线技术是目前广泛应用于

北邮大三计算机体系结构实验二指令流水线相关性分析

实验二指令流水线相关性分析 1、实验目的 通过使用WINDLX模拟器,对程序中的三种相关现象进行观察,并对使用专用通路,增加运算部件等技术对性能的影响进行考察,加深对流水线和RISC处理器的特点的理解。 2、实验原理 指令流水线中主要有结构相关、数据相关、控制相关。相关影响流水线性能。  3、 实验步骤 (1) 观察程序中出现的数据/控制/结构相关。指出程序中出现上述现象的指令组合。 数据相关指令: lbu r3,0x0(r2) seqi r5,r3,0xa 不采用定向技术

lbu r3,0x0(r2)要在WB周期写回r3中的数据,而下一条指令seqi r5,r3,0xa 要在intEX周期中读取r3中的数据。发生了写读相关。所以为了避免冲突,seqi r5,r3,0xa的intEX指令延迟了一个周期进行。 控制相关指令: addi r1, r0 , 0x1000 jal InputUnsigned movi2fp f10,r1 sw SaveR2[r0],r2 跳转指令,从执行的Fact.s中的movi2fp指令跳至Input.s中的Unsigned标号处。开始输入处理 结构相关指令:

add r1,r1, r3 addi r2, r2, 0x1 addi r2, r2, 0x1 该指令与它前面的一条指令 add r1,r1, r3发生了结构相关。由于上一条指令由于数据相关需要停4个周期,在ID段后停滞,不能进入intEX段,故addi r2,r2,0x1 就不能进入ID段,译码部分已经被占用。故发生了结构相关。 (2) 考察增加浮点运算部件对性能的影响。 1个浮点运算单元 3个浮点运算单元

指令流水线的计算

若指令流水线把一条指令分为取指、分析和执行三部分,且三部分的时间分别是t取指=2ns ,t 分析=2ns,t 执行=1ns。则100 条指令全部执行完毕需 (4) ns。 (4)A.163 B.183 C.193 D.203 答案:D 本类题有两类: 第一类是各指令段,有同步时间,即有指令流操作周期.当某指令段执行完毕后,必须等到下一个操作周期来临时,才能执行下一条指令的相同段.第一题与2005年的题就是这样.其计算公式是: (指令所分段数-1)*指令流操作周期 +指令数*指令流操作周期. 第二类是各指令段,没有同步时间,每段执行完毕,不需要等待,直接执行下一条执令相同的段.2006的题就是这个.其计算方法是 第一条指令执行时间+(指令数-1)*各指令段执行时间中最大的执行时间 ========================================================== 本题为第二类:(2+2+1)+(100-1)*2=203 指令流水线的计算 1.现有四级指令流水线,分别完成取指、取作的时间依次为数、运算、传送结果四步操作。若完成上述操9ns、10ns、6ns、8ns。则流水线的操作周期应设计为(1)n s。(1)A.6B.8C.9D.10 试题解析:取最大的那个微指令时间作为流水线操作周期。答案:D 2.若每一条指令都可以分解为取指、分析和执行三步。已知取指时间t取指=4△t,分析时间t分析=3△t,执行时间t执行=5△t。如果按串行方式执行完100条指令需要(2)△t。如果按照流水方式执行,执行完100条指令需要(3)△t。 (2)A.1190B.1195C.1200D.1205(3)A.504B.507C.508D.510 试题解析:串行执行时,总执行时间=100×(t取指+ t分析+ t执行) =100×12△t=1200△t。 连续两条指令的执行时间差为t执行= 5△t,因此100条指令的总执行时间=(t取指+ t分析+ t执行)+99×t执行= 507△t。 答案:(2)C(3)B

自动化生产流水线节拍、设备利用率计算

自动化生产流水线节拍 流水线的负荷系数又称编程效率,其值越大,表明流水线的生产效率越高。 流水线上总负荷系数可按下列公式计算: η=T/(N×Pt) 其中η为负荷系数 Pt为生产节拍=计划期有效工作时间/计划期产品产量 =标准总加工时间/作业员人数 =有限机种的标准总加工时间/有限机种台数 N为工位数 T为所有工位完成一个节拍所用时间之合 一般以工作地(机器)作计算单元的,流水线的负荷系数不应低于0.75;以操作工人作计算单位的,其流水线的负荷系数应在0.85-0.9以上。 举个例子 某一新开设的丁恤衫制衣厂,生产目标为每日1000件T恤杉、每日工作8h。生产工序和每个工序的日产量如表所示 工序名称8H产量 1装袋320 2缝肩1000 3缝领500 4缝袖950 5上袖400 6上领480 7车边1050 8开门900 9钉纽950 ①计算这条生产线的生产节拍Pt Pt=H/Q=8×60/1000=0.48min/件 ②计算每个工序所需的标准作业时间,结果如表5-8 ③计算每个工位所需的工位数,结果列于表5-8 例如,第一个工序的作业时间 第一个工序理论上所需的工位数= 15/0.48=3.1个 工序名称作业之间计算工位数实际工位 1 1.5 3.1 3 2 0.48 1 1 3 0.96 2 2 4 0.51 1.1 1 5 1.2 2.5 3 6 1.0 2.1 2 7 0.46 0.95 1 8 0.53 1.1 1 9 0.51 1.05 1 合计7.15 14.90 15 ④计算出理论上该生产线所需的最小工作位数,即

Nmin=[T/Pt]+1=[7.15/0.48]+1=15个 ⑤计算该生产线平衡后的平均负荷率 η=T/(N×Pt)×100%=7.15/(15×0.53) ×100%=89.9& 依照工序流程安排生产线,首先要按照每个工序的难易程度,计算出各工序所需的工作位数目,务必使各工序每小时的总产量大致相同,才能得到一条子衡的生产线,例1中该生产线平衡后实际的节拍应为0.53min(瓶颈工作地节拍),平衡后的工序负荷率为89.9%。 流程的“节拍”(Cycle time)是指连续完成相同的两个产品(或两次服务,或两批产品)之间的间隔时间。换句话说,即指完成一个产品所需的平均时间。节拍通常只是用于定义一个流程中某一具体工序或环节的单位产出时间。如果产品必须是成批制作的,则节拍指两批产品之间的间隔时间。在流程设计中,如果预先给定了一个流程每天(或其它单位时间段)必须的产出,首先需要考虑的是流程的节拍。在机械加工生产线的设计中,节拍是设计的一个很重要的因素。生产节拍的平衡很重要。生产节拍的公式为 t=60Tβ/N 式中t为生产节拍,T 为一年基本工时,一般规定,按一班制工时为2360h/年,按两班制工时为4650h/年;β为复杂系数,一般取为0.65-0.85;N为生产线加工工件的年生产纲领。机械加工生产线的主要分类有:单一产品固定节拍生产线、单一产品非固定节拍生产线、成组产品可调节生产线、柔性制造生产线。

关于ARM指令流水线知识

关于ARM指令流水线知识 (周方辉) 2012/10/22 目录 1 参考文献 (2) 1.1 内部参考文献 (2) 1.2 外部参考文献 (2) 2 名词解释 (2) 3 指令执行三步骤 (2) 4 指令流水线(ARM指令) (3) 4.1 三级指令流水线 (3) 4.2 五级指令流水线 (5) 4.3 六级指令流水线 (6) 4.4 其它级指令流水线 (6)

1参考文献 1.1内部参考文献 内部参考文献指的是周方辉自生的百度博文中的文件。 无内部参考文献。 1.2外部参考文献 外部参考文献指的是相对于上述内部参考文献以外的文件。 无外部参考文献 2名词解释 CPI:指令周期数,一段时间内走过的指令时钟数除以被执行的指令条数,CPI>=1。 F:Fetch的缩写,取指令的意思,用在分析指令流水线中。 D:Decode,解指令码,用在分析指令流水线中。 E:Execute,执行指令,用在分析指令流水线中。 M:Memory,内存操作。 W:W riteback回写。 S:Stall,拖延clock。 L:Linkret,连接返回。 A:Adjust,调整流水线。 DI:Decode IRQ解析中断指令。 EI:Execute IRQ执行中断指令。 I:Interlock,内部锁状态。 3指令执行三步骤 一般计算机指令码与数据码没有区别,存在内存中,都属于二进制数字信息。指令码和数据码的区别是一般用PC指针从内存中读取的数据为指令码,否则就当数据码处理。 到目前为止,一般计算机执行指令是用CPU部件来执行的,通常分成: 1、获取指令,通过PC指针,从内存中获取指令码; 2、解析指令,使用CPU内部的指令解码器对指令码进行解析,从而得知指令功能。

1、设一条流水线的执行过程分成取指令、分析指令和执行指令三个阶段

1、设一条流水线的执行过程分成取指令、分析指令和执行指令三个阶段,每个阶段所需的时间分别为t、t和2t,分别求出下列各种情况下,连续执行N条指令所需的时间。 (1)顺序执行方式; (2)只有取指令和执行指令重叠执行; (3)取指令、分析指令和执行指令重叠执行; 2、有一条流水线如下所示 (1)求连续输入10 条指令,该流水线的实际吞吐率和效率; (2)该流水线的瓶颈在哪一段?请采取2种不同的措施消除此“瓶颈”。对于你所给出的新流水线,计算连续输入10 条指令时,其实际吞吐率和效率; 3、在改进的DLX 流水线上运行如下代码序列: LOOP: LW R1, 0(R2) ADDI R1, R1, # 1 SW 0(R2), R1 ADDI R2, R2, # 4 SUB R4, R3, R2 BNEZ R4, LOOP 其中,R3 的初始值是R2+396。假设:在整个代码序列的运行过程中,所有的存储器访问都是命中的,并且在一个时钟周期中对同一个寄存器的读操作和写操作可以通过寄存器“定向”。问: (1)在没有任何其它定向(或旁路)硬件的支持下,请画出该指令序列执行的流水线时空图。假设采用排空流水线的策略处理分支指令,且所有的存储器访问都可以命中Cache,那么执行上述循环需要多少个时钟周期? (2)假设该DLX 流水线有正常的定向路径,请画出该指令序列执行的流水线时空图。假设采用预测分支失败的策略处理分支指令,且所有的存储器访问都可

以命中Cache,那么执行上述循环需要多少个时钟周期? (3)假设该DLX 流水线有正常的定向路径,请对该循环中的指令进行调度。注意可以重新组织指令的顺序,也可以修改指令的操作数,但是不能增加指令的条数。请画出该指令序列执行的流水线时空图,并计算执行上述循环需要的时钟周期数? 4.根据需要展开下面的循环并且进行指令调度,直到没有任何延迟。指令的延迟如表: Code: Loop: LD F0,0(R1) MULTD F0,F0,F2 LD F4,0(R2) ADDD F0,F0,F4 SD 0(R2),F0 SUBI R1,R1,8 SUBI R2,R2,8 BNEQZ R1,LOOP 5.列举下面循环中的所有相关,包括输出相关,反相关,真相关和循环相关。

arm五级流水线

ARM流水线关键技术分析与代码优化 时间:2009-03-30 10:15:21 来源:单片机与嵌入式系统作者:大连理工大学邱铁西方迟宗正 引言 流水线技术通过多个功能部件并行工作来缩短程序执行时间,提高处理器核的效率和吞吐率,从而成为微处理器设计中最为重要的技术之一。ARM7处理器核使用了典型三级流水线的冯·诺伊曼结构,ARM9系列则采用了基于五级流水线的哈佛结构。通过增加流水线级数简化了流水线各级的逻辑,进一步提高了处理器的性能。 ARM7的三级流水线在执行单元完成了大量的工作,包括与操作数相关的寄存器和存储器读写操作、ALU操作以及相关器件之间的数据传输。执行单元的工作往往占用多个时钟周期,从而成为系统性能的瓶颈。ARM9采用了更为高效的五级流水线设计,增加了2个功能部件分别访问存储器并写回结果,且将读寄存器的操作转移到译码部件上,使流水线各部件在功能上更平衡;同时其哈佛架构避免了数据访问和取指的总线冲突。 然而不论是三级流水线还是五级流水线,当出现多周期指令、跳转分支指令和中断发生的时候,流水线都会发生阻塞,而且相邻指令之间也可能因为寄存器冲突导致流水线阻塞,降低流水线的效率。本文在对流水线原理及运行情况详细分析的基础上,研究通过调整指令执行序列来提高流水线运行性能的方法。 1 ARM7/ARM9流水线技术 1.1 ARM7流水线技术 ARM7系列处理器中每条指令分取指、译码、执行三个阶段,分别在不同的功能部件上依次独立完成。取指部件完成从存储器装载一条指令,通过译码部件产生下一周期数据路径需要的控制信号,完成寄存器的解码,再送到执行单元完成寄存器的读取、ALU运算及运算结果的写回,需要访问存储器的指令完成存储器的访问。流水线上虽然一条指令仍需3个时钟周期来完成,但通过多个部件并行,使得处理器的吞吐率约为每个周期一条指令,提高了流式指令的处理速度,从而可达到O.9 MIPS/MHz的指令执行速度。 在三级流水线下,通过R15访问PC(程序计数器)时会出现取指位置和执行位置不同的现象。这须结合流水线的执行情况考虑,取指部件根据PC取指,取指完成后PC+4送到PC,并把取到的指令传递给译码部件,然后取指部件根据新的PC取指。因为每条指令4字节,故PC值等于当前程序执行位置+8。 1.2 ARM9流水线技术 ARM9系列处理器的流水线分为取指、译码、执行、访存、回写。取指部件完成从指令存储器取指;译码部件读取寄存器操作数,与三级流水线中不占有数据路径区别很大;执行部件产生ALU运算结果或产生存储器地址(对于存储器访问指令来讲);访存部件访问数据存储器;回写部件完成执行结果写回寄存器。把三级流水线中的执行单元进一步细化,减少了在每个时钟周期内必须完成的工作量,进而允许使用较高的时钟频率,且具有分开的指令和数据存储器,减少了冲突的发生,每条指令的平均周期数明显减少。 2 三级流水线运行情况分析 三级流水线在处理简单的寄存器操作指令时,吞吐率为平均每个时钟周期一条指令;但是在存在存储器访问指令、跳转指令的情况下会出现流水线阻断情况,导致流水线的性能下降。图1给出了流水线的最佳运行情况,图中的MOV、ADD、SUB指令为单周期指令。从T1开始,用3个时钟周期执行了3条指令,指令平均周期数(CPI)等于1个时钟周期。

相关主题
文本预览
相关文档 最新文档