结合Intel 奔腾系列微处理器谈流水线技术

来源:互联网 发布:1.5cm胆结石知乎 编辑:程序博客网 时间:2024/04/30 01:56
加快机器语言的解释过程提高机器的运算速度是设计计算机的基本任务之一。这可以通过两个途径来实现。一个途径是提高器件的速度,采用更好的算法,增加指令内各微操作的并行程度,减少解释过程所需要的拍数等多项措施来加快机器指令的解释。另一个途径则是采用重叠和流水方法,同时解释两条、多条以至整段程序,从而加快整个机器语言程序的解释。流水线技术是目前广泛应用于微处理芯片中的一项关键技术,Intel公司更是这项技术在微处理器中应用的首先实现者。这里主要结合Intel公司的Pentium系列微处理芯片(CPU)对流水线技术的原理及实现技术作了阐述,也附带介绍了超流水线、超标量以及向量流水处理的重要概念。
 
流水线相关概念和问题
    指令的三种控制方法:顺序方法、重叠方式、流水方式。顺序方法是指各条机器指令之间顺序串行地执行,而且每条机器指令内部的各个微指令也是串行执行。这种方法虽然控制简单但速度上不去,机器各部件的利用率低。重叠方式是指在解释第K条指令的操作完成之前就开始解释第K+1条指令。通常都是采用一次重叠,即在任何时候,指令分析部件和指令执行部件都只有相邻两条指令在重叠解释。这种方式使指令的解释速度有所提高,控制也不太复杂但会出现冲突、转移、相关等问题,这些都需要在设计时想办法解决。流水方式就是把并行性或并发性镶嵌到计算机系统里的一中形式。它是把重叠的顺序处理过程分解为若干过程,每个过程能在专用的独立模块上有效地并发工作的技术。在概念上“流水”可以看成“重叠”的延伸。不同的是“一次重叠”只是把一条指令的解释分解成两个子过程,而“流水”则是分解为更多的 子 过 程。
     流 水 线 的 性 能 的主要指标 是 吞 吐 率(throughput)、效 率(efficiency)、流 水 深 度(deep)以 及加速比(speedup)。
     从不同的级别上可对流水线进行不同的分类,这些“分类”对我们理解流水线的概念有着重要的作用。下面就从不同角度对流水线的份类进行讲述:
1 从流水的级别上,可分为部件级、处理机级以及系统级的流水。
2 从流水的功能上,可分为单功能流水线和多功能流水线。
3 从流水的联接上,可分为静态流水线和动态流水线。
4 从流水是否有反馈回路,可分为线性流水线和非线性流水线。
5 从流水的流动顺序上,可分为同步流水线和异步流水线。
6 从流水线的数据表示上,可分为标量流水线和向量流水线。如果机器没有向量数据表示,只对标量数据进行流水处理就称为标量流水线。如果机器具有向量数据表示,设置了相应的向量运算硬件和向量处理指令,能流水地对向量的各元素并行处理就称为向量 流水线。
RISC中的流水技术
一、超流水线技术
超流水线(Super Pipeline)技术是RISC采用的一种并行处理技术。他通过细化流水,增加级数和提高主频,使得在每个机器周期内能完成一个甚至两个浮点操作。其实质就是以时间换取空间。超流水机器的特征就是在所有的功能单元都才用流水,并有更高的时钟频率和更深的流水深度。
二、超标量技术
超标量(Super Scalar)技术是RISC采用的有一种处理技术。它通过内装多条流水线来同时执行多个处理。其实质就是以空间换取时间。
流水线实现中的问题及解决
    流水线实现的一个问题是使流水线连续不断地流动,即不出现流断,才能获得高效率。断流的原因很多,除了编译生成的目标程序不能发挥流水结构的作用,或者存储系统不能及时供应连续流动所需的指令和操作数外,主要还与出现了相关、转移以及中断指令有关。解决局部性相关有两种方法:退后法和通路法;解决全局性相关有三种方法:猜测转移分支、加快和提前形成条件码、加快短暂环程序处理。
流水技术在Pentium系列微处理器中的实现
    流水线技术早在Intel的X86芯片中均得到了实现。而Pentium系列CPU产品更是一个高级的超标量处理器。它是建筑在两个通用的整型流水线和一个可流水作业的浮点单元上的,这使处理器能够同时执行两条整型指令。一个对软件透明的动态分支预测机制能够使分支的流水线阻塞达到最小化。奔腾处理器可以在一个时钟周期内完成两条指令,一个流水线完成一条指令。第一个逻辑管道称之为“U”管道,第二个称之为“V”管道。在任何一条给定的指令译码期间,它安排的后面两条指令将被检查。并且,如果有可能,第一条指令被安排到“U”管道执行,第二条指令被安排到“V”管道执行。如果不能,则第一条指令被安排到“U”管道执行,“V”管道中不安排指令运行。指令在两个管道中运行与它们顺序执行所产生的效果是完全一样的。当发生管道阻塞时,后继的指令无法通过被阻塞的指令所在的任一管道中。
    具有MMX?技术的奔腾处理器为整型流水线增加了一个额外的处理阶段。指令从代码的高速缓冲区中预取出来,被送入到“预取”(PF)阶段,并且在“提取”(F)阶段中进行指令的语法分析。 另外, 全部的前缀译码都在F阶段中进行。 指令在先进先出(FIFO)的指令缓冲区中将语法分析与指令译码分开, 这个缓冲区位于F阶段与译码1(D1)阶段之间。FIFO缓冲区的空间能够将被处理的指令上升到四条指令。FIFO缓冲区是透明的,当它为空时,不增加额外的迟延。在每个时钟周期内,可将两条指令压到指令的FIFO缓冲区中(根据有效的代码字节,以及其它因素,如前缀)。然后,再将成对的指令从FIFO缓冲区中弹出来,送到D1阶段中。由于指令的平均执行效率为每个时钟周期内不超过两条指令,所以FIFO通常是满的。只要FIFO是满的,就可以防止在指令提取和进行语法分析时产生的阻塞。如果发生了这样的阻塞,FIFO也可以使阻塞不在管道的执行阶段上发生
。但如果FIFO空,由于流水线中无指令运行,则可能会导致一个执行阻塞。较长的指令或前缀可能会在FIFO入口处产生阻塞。
所谓“P6系列”的动态执行流水线
    超流水线(Super Pipeline)在本质上仍为一种流水线技术,但它做了以下的改进:
1.流水线条数从奔腾的两条增至三条,还有十一个独立的执行单元并行支持。
2.在执行中采取了无序执行(out-of-order processing)技术。即当某条指令需要一些数据而未能立即执行完毕时,它将被剔出流水线并等待数据,CPU则马上执行下条指令,就好比在装配线上发现某件产品不太合格,而被淘汰,等待返工一个道理。这样,可以防止一条指令不能执行而影响了整个流水线的效率。
3.在P6中将指令划分成了更细的阶段,从而使逻辑设计、工序等等更为简化,提高了速度。在486芯片中,一条指令一般被划分为五个标准的部分,奔腾亦是如此。而在P6中,由于采用了近似于RISC的技术,一条指令被划分成了创纪录的十四个阶段。这极大地提高了流水线的速度。
  P6系列处理器使用动态执行结构。该结构通过硬件寄存器重命名和分支预测的方法,将乱序执行和推测执行合成在一起。这些处理器有一个有序进入的流水线,它将Intel 386的宏指令支解成简单的微操作(或UOP)和一个可以处理这些微操作的乱序的超标量处理器内核。这个乱序的处理器内核包含了几条流水线,连接了整型、跳转、浮点和内存执行单元。几种不同的执行单元可以集成在同一条流水线上。例如:一个整型地址逻辑单元和浮点执行单元(加法器、乘法器和除法器)同享一个流水线。数据高速缓冲区由一个专用的读取端口和其它的存储端口交错而成。大多数简单操作(整型ALU,浮点加法,甚至浮点乘法)可以按每时钟周期完成一至两个操作的吞吐量进行流水作业。浮点除法不可以进入流水线,长迟延操作可以和短迟延操作并行处理。P6系列的流水线由三部分构成:有序组织的前端(In-Order Issue Front-end)单元,乱序内核(Out-of-Order Co
re)单元和有序的退出(In-Order Retirement)单元。
     Intel新近推出的奔腾Ⅲ处理器使用了P6中的动态执行技术,包括多分枝预测、数据流分析、投机执行。同时奔腾Ⅲ处理器具有一个流水线式的浮点运算单元(FPU),可支持32位、64位和80位的浮点运算。最近Intel又发表奔腾4,奔腾4基本的指令流水线长度达到了20级,是 P6架构的2倍,也超过了AMD的Athlon。更长的流水线可以使处理器运行在更高的主频下,从而提高处理器的性能,但有可能带来一些指令执行上的延迟。
                                  总 结
    流水线技术一开始就是在巨型机、大型机上应用,后来Intel公司把这项技术运用于微处理器,这项技术的根本目的就是合理利用现有硬件,提高CPU处理能力。由于使用多种技术包括硬气件发展提高了微处理的运算速度,同时也拓展了微型机的应用范围。随着硬气件的发展以后还会出现这种“自上向下”的发展,今天我们使用的微型机就是往日的巨型机、大型机。新技术会不断产生,目的只有一个:提高计算机的性能。