目录
目录
1
第一章 绪论................................................................................................................. 3
1.1 现代 RISC 中的流水线技术........................................................................... 3
1.1.1 超流水线技术.......................................................................................3
1.1.2 超标量技术...........................................................................................4
1.1.3 流水技术在 Pentium 系列微处理器中的实现...................................4
第二章 流水线基础.....................................................................................................7
2.1 流水线概念..................................................................................................... 7
2.1.1 指令重叠...............................................................................................7
2.1.2 流水线...................................................................................................8
2.1.3 流水线的特点.......................................................................................9
2.1.4 流水线的分类.....................................................................................10
2.2 流水线的主要性能....................................................................................... 11
2.2.1 吞吐率.................................................................................................12
2.2.2 加速比和效率.....................................................................................12
第三章 指令流水线设计...........................................................................................15
3.1 流水线理想假设........................................................................................... 15
3.1.1 一致的运算分量.................................................................................15
3.1.2 重复的运算.........................................................................................16
3.1.3 独立的运算.........................................................................................17
3.2 指令流水线................................................................................................... 18
3.2.1 指令流水线设计.................................................................................18
3.2.2 指令集体系结构的影响.....................................................................19
3.2.3 流水线分级的考虑.............................................................................20
3.3 流水线处理器设计....................................................................................... 21
3.3.1 保持流水段均衡.................................................................................21
3.3.2 统一指令类型.....................................................................................22
2
CPU 中指令流水线技术研究
3.3.3 减少流水线停顿.................................................................................26
第四章 流水线中各种相关及中断处理...................................................................27
4.1 流水线中相关............................................................................................... 27
4.2 资源相关....................................................................................................... 27
4.3 数据相关....................................................................................................... 28
4.3.1 指令相关.............................................................................................28
4.3.2 主存空间操作数相关.........................................................................29
4.3.3 通用寄存器组相关.............................................................................29
4.4 控制相关....................................................................................................... 31
4.4.1 猜测法.................................................................................................31
4.4.2 加快和提前形成条件码.....................................................................32
4.4.3 采取转移延迟.....................................................................................32
4.4.4 加快短循环程序的处理.....................................................................32
第五章 中断处理与流水线调度...............................................................................35
5.1 中断处理....................................................................................................... 35
5.2 流水线调度................................................................................................... 35
第六章 总结与展望...................................................................................................39
致谢.................................................................................................................................41
参考文献.........................................................................................................................42
第一章 绪论
3
第一章 绪论
流水线技术是提高系统吞吐率的一项强大的实现技术,并且不需要大量重复
设置硬件。20 世界 60 年代早期的一些高端机器中第一次采用了流水线技术。第一
个采用指令流水线的机器是 IBM7030(又称作 Stretch 计算机)。后来的 CDC 6600
同时采用了流水线和多功能部件。
到了 20 世纪 80 年代,流水线技术成为 RISC 处理器设计方法中最基本的技术
之一。RISC 设计方法的大部分技术都直接或者间接以提高流水线性能为目标。从
此以后,流水线技术也被有效地应用到 CISC 处理器的设计中。Intel i486 是 IA32
体系结构中的第一个流水线实现。Digital 的 VAX 和 Motorola 的 M68K 的流水线版
本在商业上也取得了成功。
流水线技术是当前指令集处理器设计中广泛采用的技术。在这里我们将重点
放在(标量)流水线处理器的设计。流水线处理器设计中的许多方法和技术,例
如用于检测和化解相关的流水线互锁机制,都是标量处理器设计的基本方法。
当前的趋势是朝着超深度流水线的方向发展。流水线的深度已经从不到 10 发展到
超过 20.深度流水是获得高速始终频率的必要条件,这是提高处理器性能的一个非
常有效的方法。有迹象表明。这种趋势还将持续下去。
1.1 现代 RISC 中的流水线技术
1.1.1 超流水线技术
超流水线(Super Pipeline)技术是 RISC 采用的一种并行处理技术。他通过
细化流水,增加级数和提高主频,使得在每个机器周期内能完成一个甚至两个浮
点操作。其实质就是以时间换取空间。超流水机器的特征就是在所有的功能单元
都才用流水,并有更高的时钟频率和更深的流水深度。
4
CPU 中指令流水线技术研究
1.1.2 超标量技术
超标量(Super Scalar)技术是 RISC 采用的有一种处理技术。它通过内装多
条流水线来同时执行多个处理。其实质就是以空间换取时间。流水线实现中的问
题及解决:
流水线实现的一个问题是使流水线连续不断地流动,即不出现流断,才能获
得高效率。断流的原因很多,除了编译生成的目标程序不能发挥流水结构的作用,
或者存储系统不能及时供应连续流动所需的指令和操作数外,主要还与出现了相
关、转移以及中断指令有关。解决局部性相关有两种方法:退后法和通路法;解
决全局性相关有三种方法:猜测转移分支、加快和提前形成条件码、加快短循环
程序处理。
1.1.3 流水技术在 Pentium 系列微处理器中的实现
流水线技术早在 Intel 的 X86 芯片中均得到了实现。而 Pentium 系列 CPU 产
品更是一个高级的超标量处理器。它是建筑在两个通用的整型流水线和一个可流
水作业的浮点单元上的,这使处理器能够同时执行两条整型指令。一个对软件透
明的动态分支预测机制能够使分支的流水线阻塞达到最小化。奔腾处理器可以在
一个时钟周期内完成两条指令,一个流水线完成一条指令。第一个逻辑管道称之
为“U”管道,第二个称之为“V”管道。在任何一条给定的指令译码期间,它安
排的后面两条指令将被检查。并且,如果有可能,第一条指令被安排到“U”管道
执行,第二条指令被安排到“V”管道执行。如果不能,则第一条指令被安排到“U”
管道执行,“V”管道中不安排指令运行。指令在两个管道中运行与它们顺序执行
所产生的效果是完全一样的。当发生管道阻塞时,后继的指令无法通过被阻塞的
指令所在的任一管道中。
具有 MMX?技术的奔腾处理器为整型流水线增加了一个额外的处理阶段。指令
从代码的高速缓冲区中预取出来,被送入到“预取”(PF)阶段,并且在“提取”
(F)阶段中进行指令的语法分析。 另外, 全部的前缀译码都在 F 阶段中进行。 指
令在先进先出(FIFO)的指令缓冲区中将语法分析与指令译码分开, 这个缓冲区位
于 F 阶段与译码 1(D1)阶段之间。FIFO 缓冲区的空间能够将被处理的指令上升到
四条指令。FIFO 缓冲区是透明的,当它为空时,不增加额外的迟延。在每个时钟
第一章 绪论
5
周期内,可将两条指令压到指令的 FIFO 缓冲区中(根据有效的代码字节,以及其
它因素,如前缀)。然后,再将成对的指令从 FIFO 缓冲区中弹出来,送到 D1 阶段
中。由于指令的平均执行效率为每个时钟周期内不超过两条指令,所以 FIFO 通常
是满的。只要 FIFO 是满的,就可以防止在指令提取和进行语法分析时产生的阻塞。
如果发生了这样的阻塞,FIFO 也可以使阻塞不在管道的执行阶段上发生。但如果
FIFO 空,由于流水线中无指令运行,则可能会导致一个执行阻塞。较长的指令或
前缀可能会在 FIFO 入口处产生阻塞。
超流水线(Super Pipeline)在本质上仍为一种流水线技术,但它做了以下的
改进:
1. 流水线条数从奔腾的两条增至三条,还有十一个独立的执行单元并行支持。
2. 在执行中采取了无序执行(out-of-order processing)技术。即当某条指令
需要一些数据而未能立即执行完毕时,它将被剔出流水线并等待数据,CPU 则
马上执行下条指令,就好比在装配线上发现某件产品不太合格,而被淘汰,等
待返工一个道理。这样,可以防止一条指令不能执行而影响了整个流水线的效
率。
3. 在 P6 中将指令划分成了更细的阶段,从而使逻辑设计、工序等等更为简化,
提高了速度。在 486 芯片中,一条指令一般被划分为五个标准的部分,奔腾亦
是如此。而在 P6 中,由于采用了近似于 RISC 的技术,一条指令被划分成了创
纪录的十四个阶段。这极大地提高了流水线的速度。
P6 系列处理器使用动态执行结构。该结构通过硬件寄存器重命名和分支预测
的方法,将乱序执行和推测执行合成在一起。这些处理器有一个有序进入的流水
线,它将 Intel 386 的宏指令支解成简单的微操作(或 UOP)和一个可以处理这些微
操作的乱序的超标量处理器内核。这个乱序的处理器内核包含了几条流水线,连
接了整型、跳转、浮点和内存执行单元。几种不同的执行单元可以集成在同一条
流水线上。例如:一个整型地址逻辑单元和浮点执行单元(加法器、乘法器和除法
器)同享一个流水线。数据高速缓冲区由一个专用的读取端口和其它的存储端口交
错而成。大多数简单操作(整型 ALU,浮点加法,甚至浮点乘法)可以按每时钟周期
完成一至两个操作的吞吐量进行流水作业。浮点除法不可以进入流水线,长迟延
操作可以和短迟延操作并行处理。P6 系列的流水线由三部分构成:有序组织的前
6
CPU 中指令流水线技术研究
端(In-Order Issue Front-end)单元,乱序内核(Out-of-order Core)单元和有
序的退出(In-Order Retirement)单元。
Intel 新近推出的奔腾Ⅲ处理器使用了 P6 中的动态执行技术,包括多分枝预
测、数据流分析、投机执行。同时奔腾Ⅲ处理器具有一个流水线式的浮点运算单
元(FPU),可支持 32 位、64 位和 80 位的浮点运算。最近 Intel 又发表奔腾 4,奔
腾 4 基本的指令流水线长度达到了 20 级,是 P6 架构的 2 倍,也超过了 AMD 的
Athlon。更长的流水线可以使处理器运行在更高的主频下,从而提高处理器的性
能,但有可能带来一些指令执行上的延迟。
第二章 流水线基础
7
第二章 流水线基础
加快机器语言的解释过程提高机器的运算速度是设计计算机的基本任务之
一。这可以通过两个途径来实现。一个途径是提高器件的速度,采用更好的算法,
增加指令内各微操作的并行程度,减少解释过程所需要的拍数等多项措施来加快
机器指令的解释。另一个途径则是采用重叠和流水方法,同时解释两条、多条以
至整段程序,从而加快整个机器语言程序的解释。流水线技术是目前广泛应用于
微处理芯片中的一项关键技术,Intel 公司更是这项技术在微处理器中应用的首先
实现者。
2.1 流水线概念
指令的三种控制方法:顺序方法、重叠方式、流水方式。顺序方法是指各条
机器指令之间顺序串行地执行,而且每条机器指令内部的各个微指令也是串行执
行。这种方法虽然控制简单但速度上不去,机器各部件的利用率低。重叠方式是
指在解释第 K 条指令的操作完成之前就开始解释第 K+1 条指令。通常都是采用一
次重叠,即在任何时候,指令分析部件和指令执行部件都只有相邻两条指令在重
叠解释。这种方式使指令的解释速度有所提高,控制也不太复杂但会出现冲突、
转移、相关等问题,这些都需要在设计时想办法解决。流水方式就是把并行性或
并发性镶嵌到计算机系统里的一中形式。它是把重叠的顺序处理过程分解为若干
过程,每个过程能在专用的独立模块上有效地并发工作的技术。在概念上“流水”
可以看成“重叠”的延伸。不同的是“一次重叠”只是把一条指令的解释分解成
两个子过程,而“流水”则是分解为更多的子过程。
2.1.1 指令重叠
8
CPU 中指令流水线技术研究
一条指令的执行过程可分为取指令、分型与执行三个过程(如图 2.1)。取指
令,取出该指令送到指令寄存器。指令的分析指的是对指令的操作码进行译码,
按寻址方式合地址字段形成操作数真地址,并用此真地址去取操作数,还要为准
备取下一条指令提前形成下一条指令的地址等。指令的执行则是指对操作数进行
运算、处理,或存储运算结果。指令的重叠解释方式指的是,在解释第 k 条指令
的操作完成之前,就开始解释第 k+1 条指令。假设这三个过程分别在 3 个不同的
硬件(指令控制器、分析器和执行部件)上进行,则当第 k 条指令处于分析阶段
的时候,控制器就处于空闲状态,这个时候可以对第 k+1 条指令进行取指令操作,
当第 k 条指令处于执行状态时,分析器就处于空闲状态,这时可以进行对第 k+1
条指令的分析(图 2.2)。很显然,重叠解释的方式并不能加快一条指令的实现,
但是可以加快两条相邻指令以至一段程序的解释。
图 2.1 机器指令的顺序执行方式
图 2.2 指令的重叠解释方式
2.1.2 流水线
流水其实就是重叠的引申,上面谈到的重叠模型实际上就是一个简单的 3 级
流水模型。如果将分析与执行阶段再细分为指令解码、取操作数、执行运算和存
储结果,当第 k+1 条指令在第 k 条指令执行去操作数的时候就可以开始解码,而
不必等到分析 k 完全结束。这样子在一个指令周期内就可以同时执行 5 条指令。
流水线工作方式是把一个重复的过程分解为若干个子过程,每个子过程可以与其
他子过程同时进行。由于这种工作方式与工程中的生产流水线十分相似,因此,