标量流水技术

Download Report

Transcript 标量流水技术

第四章
指令级并行技术
1
第一节
流水线技术基础
一、流水线基本原理
1、流水线的工作原理
*基本思想:细化指令执行过程,使各操作阶段均可重叠
取指(IF)
执行(EX)
译码(ID)
访存(MEM)
写回(WB)
*工作原理:各功能段可重叠完成指令操作
段(级) 填入
流水
写回 WB
访存MEM
执行 EX
I1
译码 ID
I1 I2
取指 IF I1 I2 I3
0
1
2
3
4
排空
…
I2 I3 I4 I5
In
… In
I3 I4 I5
… In
I4 I5
… In
I5
… In
I1
I2
I3
I4
I5
I1
I2
I3
I4
CISC/RISC段不同
5
n
拍
n+4
程序执行时间—T串行=n·(mΔt), T流水=mΔt+(n-1)Δt
2
回下页
2、流水线的基本要求
*要求1:各流水段的操作相互独立
←重叠所需
方法—增设段间寄存器(分离OP),增设数据通路(跨段OP)
EX
DM
MEM
MEM/WB
ID
ALU
EX/MEM
ID,REG
ID/EX
IF
IF/ID
PC,IM
REG
WB
拍时钟
*要求2:各流水段的操作同步
方法—设置公共时钟,拍长=max{段i时长}
*要求3:各流水段的操作无冲突
方法—增设流水线控制器,解决结构/数据/控制冒险
拍时钟
流水线控制器
转上页
MEM
MEM/WB
指令
状态
EX
EX/MEM
ID
ID/EX
IF/ID
IF
WB
硬件
状态
3
3、流水线的分类(属性)
*按处理级别分类:操作级、指令级、处理机级(宏流水)
*按功能分类:单功能、多功能
*按工作方式分类:静态、动态
段
动态→多功能
单功能→静态
段
S6
I1 I2 … In
I① I② …
S5
I① I② …
S4
I1 I2 … In
S3
I1 I2 … In
S2
I1 I2 … In
S1 I1 I2 … In
I① I② …
拍
S6
I1 I2 … In I① I② …
S5
I① I② …
S4
I1 I2 … In
S3
I1 I2 … In
S2
I1 I2 … In
S1 I1 I2 … In
I ① I② …
拍
*按连接方式分类:线性、非线性
ID
MUX
IF
EX
MEM
WB
*按控制方式分类:顺序流动、乱序流动
4
回7页
4、流水线的性能指标
*吞吐率:TP=任务数/处理n个任务总时间
实际吞吐率—
n
TP  mt ( n1) t
TP max  1 t
最大吞吐率— n→∞
时,
吞吐率优化方法—增加段数m、减少Δt,Δt=max{Δt
i}
Δt1
S1
流水线例:
Δt1
S2
3Δt1
S3
Δt1
S4
优化方法:细化部件,或并联设置多套部件
Δt1
Δt1
S1
S2
Δt1
S3a
Δt1
3b
Δt1
S3c
Δt1
S4
Δt1
3Δt1
S3a
S3b
MUX
Δt1
S2
MUX
Δt1
S1
S4
S3c
5
回7页
*加速比:SP=串行执行时间/流水执行时间
实际加速比—
nmt
SP 
 nm
m  n 1
mt  ( n 1) t
最大加速比— 当n→∞时,SP →m
加速比优化方法—增加段数m
*效率:即流水线设备的利用率,E=任务时空区/总时空区
实际效率—
E
nmt
n

m( mn1) t mn1
对于线性流水线,E  S P / m  TP  t
最大效率— 当n→∞时,E →1
效率优化方法—增加任务数量n
6
回下页
*性能分析:下图静态、加乘双功能流水线中,加法功能使
用3个段,分析流水方式实现∏(ai+bi)的性能,其中i=1~4
S1
S2
S3
S4
S5
MUX
x
y
z
S6
算法— 段
① ② ③ ④
㈠ ㈡
㈢
S6
S5
① ② ③ ④
S4
㈠ ㈡
㈢
S3
㈠ ㈡
㈢
S2
㈠ ㈡
㈢
㈠ ㈡
㈢
S1 ① ② ③ ④
1
2
3
4
5
6
7
8
9
10 11 12
13 14
15 16 17
性能—TP=7/(17Δt),SP=1.88,E=26.4%
分析—①指令数n小,填入、排空时间过多
②静态流水,排空后才能切换功能
③数据冒险,排除(如暂停)后才继续流水
7
转4页
转5页
转上页
拍
5、流水线段数选择
假设:各功能段总延迟为T、总价格为a,
流水线段数为m,段间锁存器延迟为d 、价格为b
*性能分析:
吞吐率— TP  t / m1 d
总价格— C=a+bm
性能/价格— PCR  TP / C 
1  1
t / m  d a  bm
*段数选择:针对PCR,对m求导,选择PCR极大值时的m
PCR
m0 
m0
t a
d b
m
8
二、流水线冒险及其处理
1、相关与冒险
*相关(dependencd):指令间存在的依赖关系
*相关类型:数据相关、名相关(反相关/输出相关)、控制相关
I2: R0=[(R6)+20]
①
I3: R2=(R0)+(R1)
②
I4: R1=(R0)+25
③
I5: R1=(R3)+20
I2: R0=(R1)-25
①—(正)相关
②—反相关
③—输出相关
④—控制相关
I3: JNZ I5
④
I4: R1=(R1)+50
I5:
*冒险(Hazard,冲突):因相关引起的指令流水异常现象
*冒险类型:结构冒险、数据冒险、控制冒险
9
回11页
回13页
2、结构冒险处理
*结构冒险类型:①功能部件争用,②数据通路冲突
*处理方法:①重复设置、或推后使用(低频率冲突时)
②采用多总线通路、或专用通路
*访存冲突处理:①增设一个MEM,②增设数据MOB(仅CISC
需),
数据通路
③增设指令预取缓冲器,④串行访问主存
L2 Cache
OF
转
移
JEU
浮
点
FPU
ALU
定
EX 点
WB
寄存
器组
……
ID
信号形成
译码器
WB
存储顺序
缓冲器MOB
OF
WB
L1 D-Cache
L1 I-Cache
L1 I-Cache
总 后
线 端
BIU
前端
总线
IF
IR
指令预取缓冲器
思考:为什么RISC不需要设置MOB?
10
主
存
2、数据冒险处理
*数据冒险类型:写后读(RAW)、读后写(WAR)、写-写(WAW)
产生原因— (正相关)
(反相关)
(输出相关)
冒险检测—指令译码时检测,与流水线中指令比较
拍 1
2 3 4
5 6
I1:R1=R2+R3 IF ID EX MEM WB
I2:R4=R1+R3
IF ID EX MEM WB
指令
写R1
读R1
*写后读(Read After Write, RAW)冒险处理:任选一种
①后推法—相关及后继指令暂停执行(停顿c拍[硬件决定])
拍
1 2 3 4
5 6 7
8 9
I1 IF ID EX MEM WB
I2
IF ID
EX MEM WB
I3
IF
ID EX MEM WB
I
IF
×
ID
×
EX
MEM
WB
×
√
流水线控制器
√
11
转9页
②转发法—段结果可直接传送到后续段(减少停顿x拍)
拍
4
MEM
EX
ID
5
6
7
WB
MEM WB
EX MEM WB
IF
MUX
1 2 3
I1 IF ID EX
I2
IF ID
I3
IF
I
相关专用通路
ID
EX
MEM
WB
流水线控制器
③乱序流动法—无RAW相关的后继指令先执行(无需停顿)
流入顺序
I1: R3=R1+R2
I2: R4=R3+R5
I3: R5=R1*R2
I4: R4=R2+R6
支持乱序流动的流水线
指令窗口
IF
ID
EX
MEM
流水线控制器
WB
流出顺序(乱序)
I1: R3=R1+R2
I3: R5=R1*R2
I4: R4=R2+R6
I2: R4=R3+R5
缺点:会产生新的数据冒险类型(WAR及WAW)
示例—WAR(I2→I3的R5),WAW(I2→I4的R4)
*读后写(WAR)、写-写(WAW)冒险处理:(稍后讨论)
动态调度法—消除相关、或转化为RAW,寄存器重命名
12
3、控制冒险处理
控制相关(分支/跳转指令)产生,指令译码时检测
指令
拍
顺序型 I1:CMP R1,R2
转移型 I2:JNZ TEST1
XX型 Ix:???
1 2 3 4
5
6 7
IF ID EX MEM WB
IF ID EX MEM WB
IF
8
PC←地址x
读PC(新)
*冒险处理:任选一种
①冻结法—后继指令暂停执行(停顿m-1拍),又称排空法
指令
拍
顺序型 I1:CMP R1,R2
转移型 I2:JNZ TEST1
XX型 Ix:???
1 2 3 4
5
6 7 8
IF ID EX MEM WB
IF ID EX MEM WB
IF
IF
PC←地址x
读PC(新)
性能优化:①尽早判断转移是否成功 ←如ID段判断
②尽早计算转移目标地址 ←如ID段增设ALU
13
转9页
②延迟分支法—延迟槽中尽量为有效指令、均被执行
延迟分支=分支指令+n个延迟槽
指令
拍
转移指令i
延迟槽中指令
延迟槽中指令
延迟槽中指令
延迟槽中指令
分支目标指令(x或i+5)
1 2 3
IF ID EX
IF ID
IF
4
MEM
EX
ID
IF
5
WB
MEM
EX
ID
IF
6
7
WB
MEM
EX
ID
IF
WB
MEM
EX
ID
延
迟
槽
实现方法:编译时重排序指令、或插入NOP指令
顺序指令I1~I5
转移指令I6
顺序指令I7~I9
不采用延迟分支技术
顺序指令I1~I5中与I6有相关的指令
转移指令I6
延迟槽(I1~I5中与I6无相关的指令或空指
令)
顺序指令I7~I9
采用延迟分支技术
14
③预测法—预测转移方向,执行后继指令;
猜错时回头并执行另一方向指令
拍
指令
转移指令i
预测指令y
预测指令y+1
预测指令y+2
预测指令y+3
实际指令z
1 2 3
IF ID EX
IF ID
IF
4
MEM
EX
ID
IF
5
WB
MEM
EX
ID
IF
6
WB
MEM
EX
ID
IF
7
PC←x或i+1
猜对时—继续(PC不变)
猜错时—回头(PC←i+1)
z=x+4或i+1
预测PC←y(设y=x)
预测方法:静态预测(按OP及DF),动态预测(按转移历史)
实现方法:预测处理(IF段预测、WB段确认),
误预测处理(现场保存、回头),
转移历史管理(信息保存、刷新)
性能优化:提高准确率,减少延迟
15
回32页
第二节
指令动态调度技术
一、动态调度基本思想
*动态调度思想:指令可乱序执行、乱序完成,减少停顿
*动态调度原理:
—数据流技术的应用
①用指令窗口按序保存多条指令
②优先执行(乱序)操作数就绪的指令
流水线例:
取指
译码
取数
指令行号(窗口中)
取指部件
PC
译码器
(一条I)
按序
指缓
(多条I)
执行
写回
操作数就绪的指令
指令窗口
(多条I)
按序
乱序
ALUs
(一条I)
按序
乱序
取数部件
寄存器组
存数部件
Cache或主存
16
二、记分牌动态调度技术
—集中式
*核心思想:
无结构冒险时,尽早执行无数据冒险的指令
*结构组织:
增设状态记录控制器,用作指令窗口及控制器
译码器
(
)
取指
部件
制状
态
牌器记
记录
分控
整数部件
浮点加
浮点乘
RF
浮点除
*调度原理:
①集中记录流水线中指令、部件及REG的状态(记分牌)
②统一调度流水线中各指令执行过程(控制部件)
17
回20页
回下页
*状态记录控制器组织:
状态记录—设置指令、部件及REG状态表,
更新各状态表的状态(操作完成时)
指令
ID
F1=[A1] √
F3=F1+F2 √
F4=F1*F3 √
F5=F2-F4 √
来源部件
指令状态表
OF DIS EX WB
√ √ √
√
√
F1
取数
F2
名称
取数
存数
加法
乘法
F3
加法
功能部件状态表
忙 操作 DR SR1 SR2 SR1来源 SR2来源 SR状态
1 LD F1
N*
0
1 ADD F3 F1 F2 取数
NY
1 MUL F4 F1 F3 取数
加法
NN
寄存器FLR状态表
F4
F5
乘法
加法
F6
F7
F8
执行控制—根据状态,检测数据冒险,控制各部件操作
(无相关指令的操作先执行)
18
转上页
三、Tomasulo动态调度技术
—分布式
*核心思想:
①分布式检测冒险、解决RAW冒险(操作数就绪即可执行)
├→指令操作分解成多个部件操作+数据传递操作
└→各个部件记录操作及数据需求、控制操作实现
②寄存器重命名技术解决WAR、WAW冒险
指令串:
F0=F1+F2
F3=F0-F1
F2=F4*F5
F6=F4+F2
F3=F5-F1
REG重命名
指令串:
F0=F1+F2
S=F0-F1
T=F4*F5
F6=F4+ T
F3=F5-F1
(操作数缓存)
(REG重命名)
(REG重命名)
19
1、结构组织
*分布式指令窗口的组织:
组成—有保留站、取数缓冲器、存数缓冲器3种
功能—均可保存多条指令的操作需求
译码器
指令窗口
ALUs
译码器
保留站RS
ALUs
(一条I)
(多条I)
(一条I)
(一条I)
(多条I)
(一条I)
寄存器组
存数部件
源
Addr
取数部件
取数缓冲器 寄存器组
FLR
FLB(多条I)
取数部件
存数缓冲器
SDB(多条I)
存数部件
指令操作分解—
①指令操作表示:n个部件操作+数据传递操作
②传递操作表示:来源部件、接收部件的关联
③部件操作表示:操作需求、数据需求(来源部件编号)
20
转17页
回23页
回下页
*指令操作记录的组织:
数据来源部件—可产生操作数的部件,此处指异步产生
译码器
(一条I)
①
保留站RS
ALUs
(多条I)
(一条I)
①
③
① ⑤
取数缓冲器
FLB(多条I)
②
寄存器组FLR
④
④
存数缓冲器
SDB(多条I)
注:⑴FLB访存延迟较大(异步输出),FLB为数据来源部件
⑵ALU产生(乱序)的数据用RS行号索引,RS为数据来源部件
⑶FLR仅暂存(立即输出)、传递(异步输出)数据,异步输出
可用REG重命名表示,FLR非数据来源部件
数据传递操作的表示—
数据来源部件:FLB、RS,每行标有站号(从1编号)
数据接收部件:RS、SDB、FLR,每行设置站号项
21
回下页
转上页
指令操作的记录—
分布式指令窗口用各部件的状态表实现,
指令操作需求记录到相关部件的状态表项中,
操作完成状态用状态表项的“忙”位或“有效”位表示
忙位=0时—操作已完成(→代替有效位)
忙位=1时—操作未完成
指令串例:
F0=[A1]
[A2]=F1
F2=F1+5
[A3]=F2
名称
F0
F1
F2
…
FLR状态表
忙 来源 数据
0→1 0001 ?
0
*
25H
0→1 1010 ?
FLB状态表
有效 地址
0001 FLB1 0→1 A1
0010 FLB2 0
*
…
…
站号 名称
SDB状态表
有效 来源 地址 数据
SDB1 0→1 0000 A2
25H
SDB2 0→1 1010 A3
?
…
注:来源=0000表示数据有效
名称
保留站RS状态表
有效 操作 S1来源 S1值 S2来源 S2值
1010 0→1 ADD 0000 25H 0000 05H
1011 0
1000 0
站号
22
转上页
*数据传递通路的组织:
采用公共数据总线CDB为宜(RAW冒险的转发法实现)
*分布式控制机构的组织:
①控制器在译码时分解指令操作、保存到相应指令窗口
指令缓冲器 (按序)
(多条指令)
译码器
(按序)
(一条指令)
(按序)
地址
取指部件
保留站RS 控 (乱序)
(多条指令) 制
ALUs
(一条指令)
CDB
取数缓 控
冲器FLB 制
取数部件
寄存器组 控
制
FLR
存数缓 控
冲器SDB 制
取数部件
②各部件检查状态表中所有操作需求的数据状态,
控制数据已就绪操作需求的执行
23
回下页
转20页
*分布式动态调度的流水线结构:
BIU(←→Cache或主存)
取数部件
站号
0110
… 取数缓冲
0010
器FLB
0001
地址
控制
取数部件
取指部件
控制 站号 地址 数据
存数缓冲器SDB
指令队列
忙位 站号
数据
寄存器FLR
译码器
F7
…
F0
FLR总线
站号 源1值 站号 源2值 控制 A1
A2
A3
站号
M1 站号 源1值 站号 源2值 控制 1000
M2
1001
保留站
加法器
乘/除法器
24
回下页 转上页 回28页
回39页
CDB
站号
1010
1011
1100
公
共
数
据
总
线
2、动态调度原理
控制器译码时处理冒险,各部件调度并控制操作消除冒险
*REG的RAW冒险处理:
冒险存在条件—指令源操作数部件(REG)的忙位=1时
RAW冒险处理—取REG的站号项到指令操作部件中
├→取来源部件数据(REG重命名)
指令串 I1:F1=F0+5
I2:F2=F1+F0
└→从CDB接收(转发法)
I3:F0=F3+F4
保留站RS状态表
站号
有效 操作 S1站号 S1值 S2站号 S2值
1010 0→1 ADD
0000 25H
0000 05H
1011 0→1 ADD
1010
?
0000 25H
FLR状态表
名
称 忙
来源
数据
F0 0
*
25H
?
F1 0 →1 1010
F2 0 →1 1011
?
RAW冒险消除—FLB数据到达或ALU完成时(CDB上数据有效),
相关部件(站号匹配)接收数据、修改状态
1010 1→0 ADD
1011 1
ADD
0000
0000
25H
2AH
0000
0000
05H
25H
F1 1→0
F2 1
1010
1011
2AH
?
25
转上页
回下页
回28页
*REG的WAR冒险处理:
--控制器译码时实现
冒险存在条件—指令具有源操作数时
WAR冒险处理—缓存操作数,或转化为RAW冒险
REG的状态
指令操作部件
所取内容
WAR冒险处理结果
忙位=0时
忙位=1时
REG的数据项
REG的站号项
已消除
转化为RAW冒险
WAR冒险消除—已消除(译码时),或同RAW冒险消除
26
转上页 回下页
回28页
*REG的WAW冒险处理:
--控制器译码时实现
冒险存在条件—指令目的操作数部件(REG)的忙位=1时
WAW冒险处理—取指令所占RS站号到REG的站号项中
└→接收最后指令结果(REG重命名)
指令串 I1:F1=F0+5
I2:F1=F0*F2
保留站RS状态表
站号
有效 操作 S1站号 S1值 S2站号 S2值
1010 0 →1 ADD
0000 25H
0000 05H
1011 0 →1 ADD
0000 25H
0000 23H
FLR状态表
名
称 忙
来源
数据
F0 0
*
25H
F1 0 →1 1010
1011
?
F2 0
*
23H
WAW冒险消除—已消除(译码时)
27
转上页
回下页
※动态调度示例—
①冒险处理:译码时控制器实现
指令序列
I1:F1←(FLB1)
译码时的控制器动作(冒险处理)
F1站号项←0001 (等待接收FLB1的数据)
F1忙位项←1
(操作未完成[数据不可用])
I2:F1←(F1)*(F4)
M1源1站号项←0001
I3:F4←(F2)*(F3)
(等待接收FLB1[REG重命名]
通过CDB接收[转发法])
M1源2值项←F4数据项 ([缓存操作数])
F1站号项←1000 (仅接收M1结果[REG重命名])
F1忙位项←1
(操作未完成)
M2源1值项←F2数据项、源2值项←F3数据项
F4站号项←1001(等待接收M2结果)
F4忙位项←1
(操作未完成)
②指令调度:执行前保留站实现
部件派遣操作数已就绪(阻塞未就绪)的指令/操作
调度结果:M2(I3)先于M1(I2)执行(乱序派遣+后推法)
转24页 转25页 转26页 转上页
28
*MEM的数据冒险处理:
--动态存储器地址判别技术
核心思想—基于存储一致性模型,按序完成有冲突操作
MEM的RAW冒险—
冒险存在条件:指令源操作数(MEM)地址与SDB中地址相同
准备读←┘ 尚未写←┘
RAW冒险处理:当前指令起被阻塞(不进入FLB,后推法),
或操作放入FLB、直接取SDB中数据(转发法)
RAW冒险消除:SDB匹配行的操作完成时,当前指令进入FLB
SDB状态表
有效 来源 地址 数据
SDB1 1→0 0000 A2
aa
SDB2 0
*
*
*
…
名称
FLB状态表
有效 地址
0001 FLB1 0→1 A2
0010 FLB2 0
*
…
…
站号 名称
29
回下页
回31页
MEM的WAR冒险—
冒险存在条件:目的操作数(MEM)地址与FLB中地址相同
准备写←┘
尚未读←┘
WAR冒险处理:当前指令起被阻塞(不进入SDB,后推法)
WAR冒险消除:FLB匹配行的操作完成时,当前指令进入SDB
MEM的WAW冒险—
冒险存在条件:目的操作数(MEM)地址与SDB中地址相同
准备写←┘
尚未写←┘
WAW冒险处理:当前指令起被阻塞(不进入SDB,后推法)
WAW冒险消除:SDB匹配行的操作完成时,当前指令进入SDB
30
转上页
回下页
3、动态调度技术小结
*结构组织:增设RS/FLB/SDB(含状态表及控制机构)
指缓
译码器 控制器
RS
控制
ALU
CDB
FLB
控制
FLR
控制
SDB
控制
*调度原理:控制器译码时转化指令操作、处理数据冒险,
各部件随时接收数据、调度并控制自身操作
指令
源操作数的REG忙位=0时, REG数据项
→RS/SDB/FLR的值/站号项
REG忙位=1时, REG站号项
目的操作数REG忙位=0时,
RS站号 →FLR的站号项
REG忙位=1时, 或FLB站号
源操作数的MEM地址≠SDB中地址时,
MEM地址→FLB
MEM地址 = SDB中地址时,
译码器暂停(FLB阻塞/)
目的操作数MEM地址 = FLB中地址时,
译码器暂停(SDB阻塞)
MEM地址 = SDB中地址时,
MEM地址≠FLB/SDB中地址时,MEM地址→SDB
31
转29页
转上页
第三节
动态分支预测技术
*分支预测的目标:分支是否发生、分支目标地址
一、采用分支历史表BHT预测
*BHT的组织: 有效位 分支指令地址 转移历史
位数由预测算法决定
*预测算法:饱和计数预测、2级自适应预测(历史模式+计数)
预测:
00
不转移 不转移
预测:
转移
不转移
10
转移
不转移
转移
不转移
01
转移
转移
11
分支
地址
…
…
…
XX
…
…
…
…
…
预
测
分支
历史
*预测处理流程:①分支预测—IF段,用当前指令地址查询BHT
②状态更新—EX段,依实际结果修改历史信息
*预测性能分析:预测不转移时—无需停顿(PC=PC+1)
预测转移时—停顿≥1拍(分支目标地址未知)
32
转15页
回34页
二、采用分支目标缓冲器BTB预测
*BTB的组织:预测时,可立即获得分支目标地址
有效位 分支指令地址 转移历史
分支目标地址
顺序、转移指
令(首次)时
*预测处理流程:
①IF段,用当前PC查BTB,命中时预测PC,否则PC←PC+1
控制流
转移历史
当前PC
取指(IF)
查BTB
命中
动态
预测
不命中
预测转移(PC=ee)
预测不转移(PC=PC+1)
置PC
预测不转移(PC=PC+1)
②ID段,对不命中的分支指令,重新预测,
IF段预测错误时,进行误预测处理(含置PC)
译码(ID)
分支指令
顺序指令
静态 IF预测错
预测 IF预测对
误预测
处理
(PC=反方向)
33
回下页
③EX段,根据实际转移方向更新转移历史
控制流
转移历史
当前PC
取指(IF)
命中
查BTB
动态
预测
分支指令
顺序指令
置PC
预测不转移(PC=PC+1)
不命中
译码(ID)
预测转移(PC=ee)
预测不转移(PC=PC+1)
静态 IF预测错
预测 IF预测对
误预测 (PC=反方向)
处理
…
执行(EX)
更新BTB
预测错误
预测正确
*预测算法:2种,动态预测、静态预测
静态预测例
相对寻址方式
非相对寻址方式
预测转移
目标地址比PC小的指令 CALL/RET/JMP指令
预测不转移 目标地址比PC大的指令 非CALL/RET/JMP指令
34
回41页
转上页
转32页
*误预测处理:
硬件支持—(分支现场保护及恢复)
①设置后援寄存器保存可能被破坏的状态
②预测执行不写结果(最多到达EX段)
处理方法—恢复流水线各段状态(IF段结束时状态),
重置PC(预测方向的反方向)
*预测性能分析:IF段预测正确—无需停顿
IF段预测错误—停顿1拍(回头延迟)
EX段异于预测—停顿≥2拍
*预测性能优化:BTB增设分支目标指令字段(存储几条指令),
以减少回头延迟、利于超标量流水
有效位 分支指令地址 转移历史 分支目标地址 分支目标处指令(串)
35
三、推测执行技术
*目标:同时支持多路分支预测技术、数据流分析技术
│
└→可能猜错←┬→乱序执行←┘
└──────→需解决
1、推测执行技术原理
*基本思想:①允许采用预测方法取指令
②允许指令乱序执行,但不写结果
保证可
以回头
③必须按序确认后,才写结果
指令串示例
I1: JNZ I7
I2: MOV F1,[F2]
I3: ADD F3,F4
I4: SUB F5,F1
I5: INC F2
段
WB
EX
OF
ID
IF
段
I1
I2 I3
I1
I3 I2 I5 I4
I1 I2 I3
I5 I4
I1 I2 I3 I4 I5 I6
I1 I2 I3 I4 I5 I6
猜测正确的时-空图
拍
WB
EX
OF
ID
IF
I1
I1
I1 I2 I3
I1 I2 I3 I4
I7
I1 I2 I3 I4 I5 I7
猜测错误的时-空图
36
回下页
拍
*实现思路:
①增设再定序缓冲器(ROB),实现指令窗口、动态调度
(乱序执行)及结果暂存功能;
②流水线增加确认 段,按序确认指令(含误预测处理)
操作数就绪
保留站RS
(多条指令)
乱序
ALUs
(一条指令)
行号
乱序
按序
程序次序
再定序缓 存数缓
译码器
指令窗口
冲SDB
(一条指令)
按序
(多条指令) 冲器ROB
确认
(一条指令)
临时FLR
取数缓冲FLB
目的地址
分支预
源地址
测BTB
寄存器组FLR
取数部件
存数部件
乱序
指令缓冲器
(多条指令)
PC
取指部件
说明:RS已等价于就绪指令队列,可减少ROB→ALU的派遣延迟
37
回39页
回下页
转上页
2、再定序缓冲器ROB
*组成:由大小固定的环形队列组成;
按序保存译码后、写结果前的所有指令及执行结果
再定序缓冲器(ROB)
源1
源2
有
指令
项号 效
地址 项号 值 地址 项号 值
1
0 LD [F1+9]
2
1 ADD
F2
0
aa
F3
0
bb
3
1 SUB
F5
0
dd
F4
0
cc
4
1 JNZ
5
1 IMUL
F2
0
aa
F7
0
ee
… 0
目的
地址
F2
F4
F6
LOOP1
[F1]
值
aa
cc
?
dd
状态
已写回
已确认
已派遣
未派遣
已执行
注:①为实现乱序派遣功能,须设置“源值”字段
②为实现暂存结果功能,须设置“目的值”字段
③由于乱序派遣,ROB可作为数据来源部件(用项号索引)
*特点:①源域、目的域取代了FLB、SDB
②REG重命名时,ROB项号可代替RS、FLB站号
38
转上页
回40页
回下页
回48页
*推测执行的流水线结构:
BIU(←→Cache或主存)
取指部件
取数部件
存数部件
指令队列
确认(按序)
项号
01 控制 操作 源项号 源地址 源值 目的地址 目的值
…
再定序缓冲器ROB
译码器
40
A1 源1值 源2值 控制 ROB项号
A2
A3
保
留
站
加法器
数据
F7
…
寄存器FLR F1
F0
源1值 源2值 控制 ROB项号 M1
M2
乘/除法器
公共数据总线CDB
说明:①保留站仅用作就绪指令队列;②按序确认后才写结果(到FLR或主存)
*ROB派遣时机:RS有空闲位置、ROB中有操作数就绪指令
39
转37页
回41页
转上页
转24页
3、流水线确认段
*确认段工作过程:
①按序判断ROB中各指令(所含全部微指令)的状态;
②若当前指令状态为已执行,按确认规则确认该指令,
否则,当前段无操作(被阻塞);
③若确认结果为通过,置指令状态为已确认(可写结果);
否则,按不通过处理规则处理该指令
*确认规则及不通过处理规则:
指令
确认
确认规则
指令执行异常
(CPU产生异常)
不通过
指令执行正常
转移型指令
顺序型
预测错误
预测正确 指令
通过
不通过 ①清除ROB中所有后续指令(含当前指令)
处理规则 ②触发异常处理
②进行误猜测处理
40
转38页
回49页
回下页
4、PII CPU的动态执行技术
*技术核心:多路分支预测+数据流控制+推测执行
主存
前端总线
总线接口单元(BIU)
L1 I-Cache 16K
IFU1 预取流式缓冲器
IFU2 指令长度译码器
DEC1 译码器对齐段
DEC2 译码 译码 译码
器0
器1 器2
DEC3 译码后指令队列
ROB
RAT/分配器
L2 Cache
L1 D-Cache 16K
存储顺序缓冲器(MOB)
Next IP
转移目标
缓冲器
返回堆栈
缓冲器
误预测
微指令序
列器MIS
静态转移
预测
预
测
错
误
端口4
存储数据执行单元
端口3
存储地址执行单元
端口2
装入执行单元
端口1
保留站
(RS)
端口0
DIS
再定序缓冲器(ROB),即微操作缓冲池
EX MMX ALU MMX移位器
简单IEU和JEU
内
部
公
共
总
线
MMX乘法器
复杂IEU MMX ALU
简单FPU 复杂FPU
WB
RR
RET
IA寄存器组
41
转34页
转39页
转上页
CDB
RAT
后端总线
第四节
多指令流出技术
*指令级并行性(ILP):指令序列中的并行性
表示—ILP(m,n)=m*n,其中,m—每个时钟启动的次数,
n—每次启动的指令/操作个数
特征—ILP*CPI=1
*多指令流出思想:可同时流出多个指令/操作,核心是发射
取指
a条
译码
b个
发射
≤n个
执行
冲突类型—同一时钟内、不同时钟间的冲突
发射策略—无冲突时发射、有冲突时可发射
*多指令流出技术:
超标量(superscalar)、VLIW(Very Long Instruction Word)
a=b,b≥n(可乱序流出)
a=1,b=n(按序流出)
42
回下页
一、超标量技术
*基本思想:多指令动态流出(硬件检测冲突)、并行执行
1、基于静态调度的超标量技术
*指令完成策略:按序完成
*指令发射策略:无冲突时发射,指令按序流出
*硬件结构:多套指令部件,增设冲突检测电路(HC)
IF
ID
OF
EX1
WB
OF
EX2
WB
HC
IF
ID
同时取指—由指令预取部件实现(如提高宽度、指令分离)
冲突检测—可分两步检测(同一时钟内、不同时钟间)
指令流出—同时、按序流出无冲突的多条指令
└→无需增加硬件←┘
43
转上页
回下页
2、基于动态调度的超标量技术
*指令完成策略:乱序完成(可处理冲突)
*指令发射策略:有冲突时可发射,指令按序流出
*硬件结构:多套指令部件,扩充指令窗口容量
IF
IF
ID
ID
指
令
窗
口
OF
EX1
WB
OF
EX2
WB
DIS
冲突检测—由动态调度的DIS完成
指令流出—同时流出多条指令(可存在冲突)
├→不限制指令类型 → 各保留站结构分离
└→处理多条指令/TC → 并行处理电路
*乱序发射策略:需先行指令窗口支持,IF段乱序取指
44
转上页
3、PII CPU的超标量流水技术
特征—哈佛结构+DIB,3路超标量,动态执行技术
主存
前端总线
总线接口单元(BIU)
L1 I-Cache 16K
IFU1 预取流式缓冲器
IFU2 指令长度译码器
DEC1 译码器对齐段
存储顺序缓冲器(MOB)
Next IP
分支目标
缓冲器
返回堆栈
缓冲器
误预测
微指令序 预
列器MIS 测
错
DEC3 译码后指令队列
ROB
RAT/分配器
端口4
存储数据执行单元
端口3
存储地址执行单元
端口2
装入执行单元
静态分支
预测
端口1
保留站
(RS)
端口0
DIS
再定序缓冲器(ROB),即微操作缓冲池
EX MMX ALU MMX移位器
简单IEU和JEU
内
部
公
共
总
线
MMX乘法器
复杂IEU MMX ALU
简单FPU 复杂FPU
WB
RR
RET
IA寄存器组
45
回下页
回47页
回48页
回49页
CDB
RAT
L2 Cache
L1 D-Cache 16K
IF
DEC2 译码 译码 译码
器0
器1 器2
后端总线
超标量流水线组成—12个段,以再定序缓冲器ROB为核心
IFU1 IFU2 DEC1 DEC2 DEC3 RAT
取指
⑴IFU1
译码
ROB
派遣
DIS
EX
WB
执行
RR
RET
确认 写回
取指单元段1
每次从L1-I$取出一个块(32B),装入预取流式缓冲器(S=2个块)
预取流式缓冲器的空闲≥1个块时
⑵IFU2 取指单元段2
每次从预取流式缓冲器取出16B信息(起始位置任意);
对16B信息预译码、标志指令边界(3条指令);
若发现转移指令,则进行动态分支预测(指令地址送BTB)
指令被取走时
※取指段特征—按需动作(非按拍动作),按序流动
46
转上页
⑶DEC1 译码段1
每次从IF段取3条IA指令,按一定次序旋转(对应译码器结构)
⑷DEC2 译码段2
每次同时译码3条指令,形成≤6个uop(118 bit/uop)
↓
(结构为复杂/简单/简单)
↓
(4+1+1,复杂指令通过MIS翻造)
⑸DEC3 译码段3
每次接收≤6个uop,按程序顺序排队(DIQ);
若发现转移型uop、且BTB缺失,则进行静态分支预测;
DIQ空闲≥6个uop时
(含IF段误预测修正)
※译码段特征—CISC→RISC,按需动作,按序流动
47
转45页
回下页
⑹RAT 寄存器别名表和分配器段
--按序发射
每拍取3个uop,将uop中的IA寄存器,转换为内部寄存器
(如ROB“目的值”字段)←┘
△此段消除/转化了WAR冒险、消除了WAW冒险
⑺ROB 再定序缓冲器段
每拍接收3个uop、按序存放在ROB中
△ROB为环形缓冲区,管理各个uop(收数据、改状态)
⑻DIS 派遣段
--乱序派遣
每拍RS从ROB以次序任意拷贝多个OPD就绪的uop到相应端口;
RS在EX单元可用时,发送相应端口的uop至EX单元
△此段消除了RAW冒险
※派遣段特征—冒险处理,按需动作→按拍动作,
按序流动→乱序流动
48
转45页
转38页
转上页
⑼EX 执行段
各部件执行uop,结果送上CDB;若uop为分支操作,更新BTB
⑽WB 写回段
ROB从CDB接收执行结果、修改状态
※执行段特征—乱序执行,部件时延可不等(动态流水线)
⑾RR 回收就绪段(确认段)
按程序顺序、以IA指令为单位,对所含uop进行确认;
处理分支误预测、异常(清除部分或全部ROB)
※确认段特征—RISC→CISC,乱序流动→按序流动
⑿RET 回收段
将IA指令的结果写回IA寄存器,或通知MOB完成写L1$;
清除ROB中该IA指令对应的uop(有效位复位)
49
转45页
转40页
二、超长指令字(VLIW)技术
*基本思想:多操作静态流出(软件检测冲突)、并行执行
段
WB-2
I2
I4
I6
WB-1
I1
I3
I5
段
I2
I4
I6
I8
EX-2
WB
I1
I3
I5
I7
I1
I2
I3
EX-1
EX-2
I2
I4
I6
I8
I1
I2
I3
I4
ID-2
I1
I3
I5
I7
I1
I2
I3
I4
EX-1
ID-1
I1
I2
I3
I4
ID
IF-2 I2 I4 I6 I8
I1
I2
I3
I4
IF
IF-1 I1 I3 I5 I7
拍(时钟)
拍(时钟)
VLIW流水线 ILP(1,2)
超标量流水线 ILP(1,2)
*VLIW工作原理:操作并行
*VLIW硬件结构:
RF (寄存器堆)
主
LD/ST1
存
指令中OP字段:
LD/ST2
LD/ST1
FADD
LD/ST2
FADD
FMUL
FMUL
50
回下页
*VLIW优化编译技术:
局部调度—表调度法(基本块范围内的调度)
全局调度—
路径调度法—对非主路径(低频率)通过块拷贝(粒度组
合)维持语义、开发并行性;
渗透调度法—通过等价交换,将无相关操作不断提前,
便于实现表调度法;
软件流水法—展开循环体后调度(不同次循环可重叠)
*VLIW与超标量的比较:
多流出
方式
冲突
检测
超标量
动态
硬件
VLIW
静态
软件
冒险处理
静态调度
动态调度
静态调度
执行
处理器实例
方式
按序 Sun SPARCⅡ/Ⅲ
乱序 PⅢ/4, Power2
按序 Trimedia, i860
51
转上页
三、超级流水技术
*基本思想:流水线启动速度<1个时钟,串行执行
△超级流水技术不属于多指令流出技术
*工作原理:快速流动(拍<1个时钟)
段
WB2
WB1
EX2
EX1
ID2
ID1
IF2
IF1
I2
I1
I2
I1
I4
I3
I2
I1
I4
I3
I6
I5
I2
I1
I4
I3
I6
I5
I8
I7
超标量流水线 ILP(1,2)
拍(时钟)
段
WB-2
WB-1
EX-2
EX-1
ID-2
ID-1
IF-2
IF-1
时钟
I1
I2
I3
I1
I2
I3
I1
I2
I1
I4
I4
I3
I5
I6
I5
I7
I2
I3
I4
I5
I6
I7
I8
I9
超级流水线 ILP(2,1)
拍
*硬件要求:增加流水线深度(段数),处理数据和控制冒险
52
*超标量超流水线:采用超标量和超级流水技术的流水线
*几种流水线性能比较:
加速比
超标量处理机
3.0
2.0
超标量超流水处理机
1.0
超流水处理机
指令并行度
0.0
1
2
3
4
5
6
原因分析—
a)指令并行度较小时,性能因并行性提高较快,
指令并行度较大时,性能因数据冒险提高较慢;
b)超级流水的启动延迟、转移损失、部件冲突均比超标量大
53
四、指令级并行开发的软件技术
*主要技术:块内调度及循环展开、块间调度,
VLIW、EPIC(显式并行指令计算)等
*循环展开后调度技术:
基本思想—循环体展开几次后,进行等价语义交换
展开方法—对不同次循环的指令,减少数据相关性
如使用不同寄存器、成倍增长偏移量
实现开销—代码长度增加,寄存器数量增多
思考:如何协调展开次数、硬件成本间的矛盾?
答:满足分支延迟槽中指令要求即可,常展开一次
54
标量流水技术总结
(1)提高操作级流水线性能的方法
*结构方面:细化功能部件,增加流水线深度,
采用多功能、动态、线性、乱序流动方式
*软件方面:指令重排序、循环展开、VLIW,
延迟转移
*硬件方面:增设冲突部件、控制器(处理冒险[后推/旁路]),
超级流水
*技术方面:分支预测、动态调度、推测执行
(2)提高指令级流水线性能的方法
超标量流水、VLIW、超标量超级流水
55
第四章课后复习思考题
1、流水线的工作原理、基本实现要求?有哪些分类?
2、流水线的性能指标?提高性能指标的方法是什么?
3、流水线有哪几种冒险?产生原因?有哪些解决方法?
4、动态调度的基本原理?Tomasulo算法实现乱序执行的原理
(指结构组织、冒险处理、指令调度方面)?
5、动态分支预测的硬件支持、处理流程?如何处理误猜测?
6、推测执行的基本思想?实现原理(指硬件配置、处理流程)?
7、指令级并行技术有哪几种?基本思想各是什么?
8、PⅡ CPU动态执行技术的关键技术?它们如何组织到流水线
中?编一段x86汇编程序(如循环),说明CPU执行这些指令的
过程。
56