计算机体系结构(国防科大)-第三章-流水线技术
1 流水线基本概念
1.1 基本概念
计算机中的流水线:
- 指令流水线
- 功能部件流水线
流水技术:
- 分解成子过程
- 子过程可并行
时空图:时间-空间
流水线特点:
- 子过程称为流水线的“级”或“段”,“段”的数目称为流水线的“深度”;
- 各功能段时间基本相同;
- 流水线需要一定的通过时间才能稳定;
- 适合大量重复的时序过程。
1.2 流水线分类
单功能与多功能流水线:
- 单功能:完成一种固定功能的流水线;
- 多功能:各段可以进行不同的连接,从而完成不同的功能。
静态和动态流水线
- 静态:同一时间内,各段只能实现同一种功能的连接方式;
- 动态:同一时间内,某些段正在实现某种运算时,另一些段却在实现另一种运算。
部件级、处理机级和处理机间流水线:
- 部件级:又叫运算操作流水线,把处理机的算术逻辑部件分段,使得各种数据类型的操作能够进行流水;
- 处理机级:又叫指令流水线,是把解释指令的过程按照流水方式处理。
- 处理机间流水线:又叫宏流水线,是由两个以上的处理机串行地对同一数据流进行处理,每个处理机完成一项任务。
标量流水处理机和向量流水处理机:
- 标量流水处理机:处理机不具有向量数据表示,仅对标量数据进行流水处理。
- 向量流水处理机:处理机具有向量数据表示,并通过向量指令对向量的各元素进行处理。
线性流水线和非线性流水线:
- 线性:流水线各段串行连接,没有反馈回路;
- 非线性:流水线除有串行连接的通路外,还有反馈回路(存在调度问题 )。
2 MIPS基本流水线
2.1 MIPS的一种简单实现
分段方式:取指令->指令译码/读寄存器->执行/有效地址计算->存储器访问/分支完成->写回
2.2 基本MIPS流水线
实现方式:
- 每一个周期为流水线的一段;
- 每个时钟周期启动一条指令。
实现流水技术应解决的一些问题:
- 各段在同一时钟周期内使用不同的寄存器
- PC计算问题(分支指令的影响)
- 合理划分流水段,每段的操作在一个周期内完成
- 流水线寄存器设计:
- 为防止寄存器中的值在为流水线中某条指令所用时被流水线中其它的指令所重写,可在流水线各段之间设置流水线寄存器文件,也称锁存器;
- 流水线寄存器文件的命名;
- 段A与段B之间的流水线寄存器文件称为A/B;
- 流水线寄存器的作用:当指令在流水线中流动时,其数据和控制信息也在同步地向前流动。
- 流水线寄存器的构成(见PPT)。
MIPS流水线中的操作:只要知道每一流水段在各指令下进行何种操作,就知道了整个流水线的操作。
MIPS流水线中多路选择器的控制,如何控制四个多路选择器:
- ALU输入端的两个MUX由ID/EX.IR所指出的指令类型控制;
- IF段的MUX由EX/MEM.Cond域的值控制;
- WB段的MUX由当前指令类型(Loda/ALU)控制。
2.3 流水线性能分析
三项性能指标:
- 吞吐率:单位时间内流水线完成的任务或输出结果的数量;
- 消除瓶颈方式:①细分;②重复设置硬件资源。
- 加速比:流水线与等功能的非流水线速度之比。
- 效率:流水线设备利用率。在时空图上,效率就是n个任务所占时空区与m个段总的时空区之比。
- 通吐率、加速比和效率的关系:
- 效率是实际加速比S与最大加速比m之比。
E = n△t0/T流水=mn△t0/(T流水m)= S/m
- 当△t0不变时,流水线的效率与吞吐率呈正比。为提高效率而采取的措施,也有助于提高吞吐率。
E = n△t0/T流水= (n/T流水) ·△t0=TP△t0
流水线的若干问题:
- 单条指令执行时间并不能减少,但可以提高吞吐率;
- 增加流水线深度,可以提高流水线性能;
- 流水线深度受限于流水线的延迟和额外开销;
- 需要用高速锁存器作为流水线寄存器;
- Earle缓存器。
- 指令之间存在的相关,限制了流水线的性能。
Earle锁存器:
- 对时钟扭曲不敏感(相对而言),一般是两级门延迟,避免了数据通过锁存器时可能产生的时钟扭曲;
- 在锁存器中可以执行两级逻辑运算,而不会增加锁存器的延迟时间,可以隐藏锁存器产生的额外开销。
3 流水线中的相关
相关:相邻或相近的两条指令因存在某种关联,后一条指令不能在原先指定的时钟周期开始执行。消除相关的基本方法——暂停(暂停流水线中某条指令及其后面所有指令的执行,该指令之前的所有指令继续执行)。
相关分类:
- 结构相关:指令在重叠执行过程中,硬件资源满足不了指令重叠执行的要求,发生资源冲突时,将产生“结构相关”;
- 数据相关:因一条指令需要用到前面指令的结果而无法与产生结果的指令重叠执行。
- 控制相关:遇到分支指令和其它会改变PC值得指令时,会发生控制相关。
3.1结构相关
导致结构相关的原因:
- 功能部件不是全流水;
- 重复设置的资源不足。
eg:当数据和指令存在同一存储器中时,访存指令会引起存储器访问冲突。
解决方法:
- 插入暂停周期(流水线气泡);
- 将指令存储器和数据存储器分离。
解决结构冲突方法:
- 所有功能单元完全流水化;
- 设置足够多的硬件资源(代价很大)。
3.2 数据相关
数据相关产生原因:当指令在流水线中重叠执行时,流水线有可能改变指令读/写操作数的顺序,使之不同于它们在非流水实现时的顺序,这将导致数据相关。
消除数据相关方法:
- 向流水线中插入暂停周期;
- 通过定向技术减少数据相关带来的暂停
- 定向(forwarding),也称旁路(bypassing)。思想:将计算结果从其产生的地方直接送到真正需要它的地方,就可以避免暂停,即:通过增加旁路,提前得到想要数据。一个结果不仅可以从某一功能单元的输出定向到自身的输入,而且还可以定向到其它功能单元的输入。在MIPS中,任何流水寄存器到任何功能单元的输入都可能需要定向路径,将形成复杂的旁路网络。两条指令访问同一存储单元,也可能引起数据相关,例如访问数据Cache失效时。本章仅讨论寄存器数据相关。
数据相关分类:
- 先写后读(RAW)
- 先读后写(WAR):
- MIPS流水线不会出现这种相关;
- 当有些指令在流水段后半部分读源操作数,另一些指令在流水线前半部分写结果,可能引起这种类型的相关。
- 写后写(WRW):
- MIPS流水线不会出现这种相关。
- 当流水线暂停某条指令的执行时,其后的指令可以继续前进时,可能引起这种类型的相关。
- 读后读(RAR):不引起数据相关。
需要暂停的数据相关:
- 并非所有数据相关都可以通过定向技术解决;
- 增加流水线“流水线互锁”部件,当互锁硬件发现这种相关后,就暂停流水线,直到相关消除。这种情况下,暂停的时钟周期数称为“载入延迟”。
对数据相关的编译调度方法:编译器可以通过重新排列代码的顺序来消除暂停,这种技术就是“流水线调度”或“指令调度”;
对MIPS流水线控制的实现:
- 指令发射:指令从流水线的译码段进入执行段的过程称为指令发射。
- 检测数据相关:
- ID段(指令译码)可以检测所有数据相关;
- 在使用一个操作数的时钟周期的开始(EX和MEM段的开始)检测相关,并确定必须的定向;
- 流水线相关硬件可以检测到的各种相关情况。
- 定向逻辑的实现:
- 所有的定向都是从ALU/DM的输出到ALU、DM或0检测单元的输入。
- 设计旁路网络需要考虑的问题:①需要比较哪些信息?②ALU输入端应采用多少个输入的MUX?
3.3 流水线控制相关
分支指令的实现:
- 一旦分支指令转移成功,正确的地址要在MEM段的末端才会被写入PC;
- 一旦ID段检测到分支指令,就暂停执行其后的指令,直到分支指令达到MEM段,确定新的PC为止;
- 分支转移成功将导致MIPS流水线暂停3个周期。
减少分支开销的途径:
- 在流水线中尽早判断分支转移是否成功;
- 转移成功时,尽早计算出转移目标地址。
- 上述两种途径必须同时采用,缺一不可。
eg:
- 分支开销减少1拍:在ID段增加一个加法器,计算分支目标地址。
- 分支开销再减少1拍:将分支判断结果和目标地址提前到DI/EX站前。
分支指令的行为特点:
- 各种能改变PC值的指令的执行频度:
- 条件分支:整数程序:14 ~ 15%;浮点程序:3 ~ 12%。其中,向前分支与向后分支的比:3:1;
- 无条件分支:≤4%(绝大多数)。
- 条件分支转移成功的概率:向前转移成功:60%,向后转移成功:85%。
减少流水线分支损失方法:
- 冻结或排空流水线:在流水线中停住或删除分支后的指令,直到知道转移目标地址。
- 预测分支转移失败:流水线继续照常流动,如果分支转移成功,将分支指令后的指令转换为空操作,并从分支目标处开始取指令执行;否则照常执行。
- 预测分支转移成功:始终假设分支成功,直接从分支目标处取指令执行(对MIPS流水线没有好处)。
- 延迟分支:分支开销为n的分支指令后紧跟有n个延迟槽,流水线遇到分支指令时,按照正常方式处理,顺带执行延迟槽中的指令,从而减少分支开销。
什么样的指令能放入分支延迟槽?三种调度方法:
- 从前调度:被调用度的指令必须与分支结果无关。
- 从目标处调度:必须保证在分支失败时,执行被调度的指令不会导致错误,可能需要复制指令。
- 从失败处调度:必须保证在份额之成功时,执行被调度的指令不会导致错误。
4 实例分析:MIPS R4000
4.1 MIPS R4000的整型流水线
流水线结构:
- 超流水线结构。
- 访存操作流水化。
- 指令序列在流水线中的重叠执行过程:定向+插入暂停周期。
- 载入延迟为两个时钟周期。
- R4000流水线的定向路径远多于MIPS流水线、
- 基本分支延迟为3个时钟周期。
- 分支处理策略:单周期延迟分支;从失败处调度。
4.2 MIPS R4000的浮点流水线
流水线结构:
- 8段
- 多功能非线性
4.3 MIPS R4000的流水线性能分析
引起流水线暂停的4个原因:
- 载入暂停;
- 分支暂停;
- 浮点结果暂停;
- 浮点结构性暂停;
5 向量处理机
概念:具有向量数据表示和相应向量指令的流水线处理机称为向量流水处理机,也称向量处理机。与之对应的是标量处理机,不支持向量数据表示,没有提供向量指令。
5.1 向量处理机速度评价方法:
- 由于一条指令最多得到一个结果,标量处理机通常用每秒执行多少条指令(MIPS)来衡量机器的运算速度。
- 向量处理机用每秒取得多少浮点运算结果来衡量机器速度,以MFLOPS作为测量单位。
- 采用MFLOPS可以忽视Load、store、分支、测试等类型指令的影响。
- 一般认为,在标量计算机中执行一次浮点运算,平均需3条指令。因此,如果要把这两种速度指标放在一起比较,就应把MFLOPS乘以一个系数,以得到相应的MIPS。
- 比较法:选择一台速度指标得到公认的机器作为标准机,给定一些典型的基准程序,分别在标准机和被测机上求解。
5.2 向量机举例——CRAY-1
- 向量链接技术:一个向量功能部件得到的结果直接送入另一个向量功能部件的操作数寄存器时所发生的连接过程称为链接。
- 当两条指令出现“写后读”相关时,若它们不存在功能部件冲突和向量寄存器(源或目的)冲突,就有可能把他们所用的功能部件头尾相接,形成一个链接流水线,进行流水处理。
- 链接特性实际上是把流水线“定向”的思想引入到向量执行过程的结果。
向量链接应考虑的问题:
- 设定合适的向量功能部件和操作数寄存器;
- 链接时机问题
- 只有在前一条向量指令的第一个结果元素送入结果向量寄存器的哪一个时钟周期才可以进行链接;
- 只有当前一条向量指令全部执行完毕,释放相应的向量寄存器资源后才能执行后面的向量指令。
- 所有可以链接执行的向量指令的向量长度应相等。