770 likes | 960 Views
第八章 流水技术. 第一节 流水线工作原理 第二节 标量流水技术 第三节 向量流水技术. 第一节 流水线工作原理. 流水工作方式 :将一个计算任务细分成若干个子任务,每个子任务由专门的部件处理,多个计算任务依次进行并行处理。. 一、流水线的分类. 操作部件级,指令级,处理器级 单功能,多功能 静态,动态 线性,非线性 标量,向量. 二、流水线的性能. 1. 吞吐率:单位时间内流水线能处理的任务数量。 对于线性流水线: D t =max{ t 1 ,…, t i ,…, t m }+ t l 最大吞吐率:流水线达到不间断流水的稳定状态后可获得的吞吐率。.
E N D
第八章 流水技术 第一节 流水线工作原理 第二节 标量流水技术 第三节 向量流水技术
第一节 流水线工作原理 流水工作方式:将一个计算任务细分成若干个子任务,每个子任务由专门的部件处理,多个计算任务依次进行并行处理。
一、流水线的分类 • 操作部件级,指令级,处理器级 • 单功能,多功能 • 静态,动态 • 线性,非线性 • 标量,向量
二、流水线的性能 1. 吞吐率:单位时间内流水线能处理的任务数量。 • 对于线性流水线: Dt=max{t1,…,ti,…,tm}+tl • 最大吞吐率:流水线达到不间断流水的稳定状态后可获得的吞吐率。
实际吞吐率 对于线性流水线,完成n个任务所需时间为T=mDt+(n-1)Dt,实际吞吐率为:
2. 加速比——流水方式的工作速度与等效的顺序工作方式时间的比值。对于线性流水线:
3. 使用效率:——工作时间的时空区与流水线中各段总的时空区之比。对于线性流水线:
例 假定将CPU分成上述5个阶段,存储器访问需要2ns时间,寄存器操作需要1ns,ALU运算时间为2ns,求流水方式和非流水方式下执行以下4条指令所需的时间。 lw $1,$2,$3 sw $4,$5,$6 add $7,$8,$9 beq $10,$11,3000
答: 在非流水的情况下,每个步骤所需的时间: 每条指令的执行周期定为8ns。4条指令的执行时间是4x8=32ns。 在流水的情况下,流水周期定为2ns,指令执行为8个周期。
三种相关性 • 1. 资源相关(结构相关) • 解决方法:增加资源 • 2. 数据相关(RAW、WAR、WAW) • 解决方法:停顿、编译检测、旁路相关专用通路 • 3. 控制相关。 • 解决方法:提前判断、转移延迟槽等
消除数据相关性影响方法之一——编译的方法。消除数据相关性影响方法之一——编译的方法。
解决数据相关性的方法之二——由硬件监测相关性以及前向专用通道相关性的表示MEM/WB.RegisterRd = ID/EX.RegisterRs=$2
改进转移指令执行性能的方式——将转移指令的执行在流水线中提前进行改进转移指令执行性能的方式——将转移指令的执行在流水线中提前进行
四、流水线的调度 ——非线性流水线的调度方法 预约表 禁止表 F = {1, 5, 6, 8} 冲突向量 C = 10110001
调度状态转换图 00000000 10110001 10110001 00101100 10110001 10111101 00010110 10110001 10110111
调度方案比较 习题:5,6
第二节 标量流水技术 指令级并行性:指令序列中的并行性。 基本块 循环级并行性:循环递归之间的并行性。 例: for (i=1; i<=1000; i=i+1) x[i] = x[i] + s; 编译后变成: loop: LD F0, 0(R1); F0=array element ADDD F4,F0,F2; add scalar in F2 SD 0(R1),F4; store result SUBI R1,R1,8; decrement pointer 8 bytes BNEZ R1,loop; branch if R1!=zero
执行时的情况 假定LD指令的执行需2拍,ADDD执行需3拍,有一个转移延迟槽。 loop: LD F0, 0(R1) 1 stall 2 ADDD F4,F0,F2 3 stall 4 stall 5 SD 0(R1),F4 6 SUBI R1,R1,8 7 BNEZ R1,loop 8 stall 9
执行时的情况 指令调度后: loop: LD F0, 0(R1) stall ADDD F4,F0,F2 SUBI R1,R1,8 BNEZ R1,loop SD 8(R1),F4 执行时间减少到6个时钟周期。
执行时的情况 将上述程序展开3次之后 loop: LD F0, 0(R1) 2 ADDD F4,F0,F2 3 SD 0(R1),F4 1 LD F6,-8,0(R1) 2 ADDD F8,F6,F2 3 SD -8(R1),F8 1 LD F10,-16(R1) 2 ADDD F12,F10,F2 3 SD -16(R1),F12 1 LD F14,-24(R1) 2 ADDD F16,F14,F2 3 SD -24(R1),F16 1 SUBI R1,R1,#32 1 BNEZ R1,loop 2 未调度时,执行时间为27个周期,平均每个迭代6.8个周期。
执行时的情况 调度后: loop: LD F0, 0(R1) LD F6,-8,0(R1) LD F10,-16(R1) LD F14,-24(R1) ADDD F4,F0,F2 ADDD F8,F6,F2 ADDD F12,F10,F2 ADDD F16,F14,F2 SD 0(R1),F4 SD -8(R1),F8 SD -16(R1),F12 SUBI R1,R1,#32 BNEZ R1,loop SD 8(R1),F16 执行时间为14个周期,平均每个迭代3.5个周期。
指令流水处理中的相关性 (1) 数据相关(真相关)。如果满足以下两个条件,则称指令j与指令i是数据相关的: A. 指令i产生的结果被指令j使用; B. 指令j与指令k数据相关,而指令k与指令i数据相关。
如何解决数据相关? 编译可以消除某些数据相关。上述程序简单展开的结果是: loop: LD F0, 0(R1) ADDD F4,F0,F2 SD 0(R1),F4 SUBI R1,R1,#8 LD F6,0(R1) ADDD F8,F6,F2 SD 0(R1),F8 SUBI R1,R1,#8 LD F10,0(R1) ADDD F12,F10,F2 SD 0(R1),F12 SUBI R1,R1,#8 LD F14,0(R1) ADDD F16,F14,F2 SD 0(R1),F16 SUBI R1,R1,#8 BNEZ R1,loop 这里,相关性都来自减法指令。它使得指令只能顺序执行,而且指令数量多。
指令流水处理中的相关性 (2) 名字相关。名字相关发生在当两条指令使用相同的寄存器或存储单元(称为名字)时。但是在指令之间不存在涉及该名字的数据流。在指令i及其后的指令j之间存在两种名字相关性。 A. 反相关。当指令j写一个寄存器,而指令i读这个寄存器时发生反相关。反相关对应于WAR险象,这种险象的检测使得反相关指令对保持其原有的顺序。 B. 输出相关。输出相关发生于指令i和指令j写相同寄存器或存储器单元时。指令的顺序必须保持。输出相关对应于WAW险象,可通过检测手段发现。
解决名字相关的方法: 寄存器更名(Register rename)。 loop: LD F0, 0(R1) ADDD F4,F0,F2 SD 0(R1),F4 LD F6,-8(R1) ADDD F8,F6,F2 SD -8(R1),F8 LD F10,-16(R1) ADDD F12,F10,F2 SD -16(R1),F12 LD F14,-24(R1) ADDD F16,F14,F2 SD -24(R1),F16 SUBI R1,R1,#32 BNEZ R1,loop 例如对于上述循环的例子,如果不进行寄存器重新命名,其名字相关的情况如下所示: loop: LD F0, 0(R1) ADDD F4,F0,F2 SD 0(R1),F4 LD F0,-8(R1) ADDD F4,F0,F2 SD -8(R1),F4 LD F0,-16(R1) ADDD F4,F0,F2 SD -16(R1),F4 LD F0,-24(R1) ADDD F4,F0,F2 SD -24(R1),F4 SUBI R1,R1,#32 BNEZ R1,loop 这些名字相关迫使指令序列只能按序执行。在经过了寄存器重新命名之后,名字相关就被消除,而只剩下数据相关。
指令流水处理中的相关性 (3) 控制相关。控制相关决定了转移指令与其它指令之间的执行顺序。程序中除了开始的第一个基本块之外,其它每条指令都对某些分支指令有控制相关性,通常必须保持这种控制相关性。 控制相关导致两个基本约束: • A. 一条与一个分支相关的指令不能移动到这个分支指令之前而使这条指令不受该分支的控制。 • B. 一条与一个分支不相关的指令不能移动到这个分支之后而使这条指令受到该分支指令的控制。 上例中循环展开时取消了一些控制指令,因而消除了一些控制相关。
如何解决控制相关? 两种保持控制相关性的方法:(1) 按序执行;(2) 检测控制或分支险象,保证与分支指令控制相关的指令在分支的方向明确之后才执行,而与分支指令不相关的指令则可以提前或者延迟执行。 控制相关本身不是必须保持不变的本质因素。必须保持不变的是程序的两个特性:异常行为和数据流。 例如: BEQZ R2,L1 LW R1,0(R2) L1: 这里只存在控制相关,不存在数据相关。 习题:7
二、指令的动态调度 • 静态调度:用编译调度 • 动态调度:用硬件调度 • 基本思想:无序执行——打破指令执行的顺序限制。 • 有序指令启动的问题: DIVD F0,F2,F4 ADDD F10,F0,F8 SUBD F12,F8,F14 第三条指令不能提前启动。
退偶结构 • 动态指令执行可以提高程序执行速度。 • 例:采用专用的load部件和store部件,使得访存操作可以不受运算操作的影响。
无序指令启动的方法——记分牌方法——Tomasulo法无序指令启动的方法——记分牌方法——Tomasulo法 1. 记分牌方法 • 记分牌的构成: • (1) 指令状态表。 • (2) 功能部件状态表。 • (3) 寄存器结果状态表。 • 四个执行阶段:启动、读操作数、执行、写结果 • (1) 启动规则:无结构冲突,没有WAW相关 • (2) 读操作数规则:操作数具备——消除RAW相关 • (3) 写结果规则:前面指令已读取操作数或者无数据相关——消除WAR相关
例 • 一个具有五个功能部件的CPU,包括一个整数部件(Integer)、两个乘法部件(Mult1, Mult2)、一个加法部件(Add)和一个除法部件(Divide)。假定以下指令序列: LD F6,34(R2) LD F2,45(R3) MULTD F0,F2,F4 SUBD F8,F6,F2 DIVD F10,F0,F6 ADDD F6,F8,F2 • 这里LD指令由整数部件执行(无流水功能),加法和减法都由加法部件执行,乘法和除法运算操作由相应的部件执行。
2. Tomasulo调度法 • 特点: • 寄存器更名——消除名字相关 • 分布式保存站——并行调度消除调度瓶颈 • 写回控制——写写相关时最后一条指令写入 • 命令队列——使取指令与启动执行退耦
三、分支预测 • 静态 • 永远不转移 • 永远转移 • 后向转移 • 动态 • 1位 • 2位 • 多位(1级,2级)
2级预测:根据多次转移情况选择预测状态(1,1)预测器2级预测:根据多次转移情况选择预测状态(1,1)预测器
分支目标缓存——快速形成分支目标地址或者目标指令。分支目标缓存——快速形成分支目标地址或者目标指令。 图中: 目标缓存——分支目标地址 预测PC——分支指令地址标记 预测状态位——预测状态的编码