Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
4.MIPS处理器设计-流水线王超
中国科学技术大学计算机学院高能效智能计算实验室
2020年春
内容提要
流水线技术原理
流水线的分类
MIPS的五级流水线实现
流水线的性能分析
流水线的“依赖”及其处理结构相关
数据相关
控制相关
1 流水线基本概念
1.1产品生产流水线
(1) 一个问题
假设某产品的生产需要4道工序,该产品生产车间以
前只有1个工人,1套生产该产品的机器。该工人工
作8小时,可以生产120件(即每4分钟生产1件)。
要将该产品日产量提高到480件,如何能实现目标?
(2) 两种解决方案
方案一:增加3名工人、3套设备。
方案二:产品生产采用流水线方式,分为4道工序;增加3名工人,每人负责一道工序。
(3) 两种方案的工作过程对比
两种方案中,单件产品的生产时间均不变。
但在稳定情况下,
方案一:每4分钟,4件产品同时进入流水线,4件成
品同时离开流水线,需要增加3套设备。
方案二:每分钟,1件产品进入流水线,1件成品离开
流水线,不需要增加任何设备。
(4) 方案二的主要特点
每件产品还是要经过4道工序处理,单件产品的加工
时间并没有改变,但它将不同产品的不同步骤重叠
在一起,使得每件产品的产出时间从表面上看是从
原来的4分钟缩减到1分钟,提高了产品的产出率。
1.2 洗衣店流水线例子
A, B, C, D to wash, dry, and fold;
Washer takes 30 minutes
Dryer takes 30 minutes
Folder takes 30 minutes
A B C D
(1) 串行工作的洗衣店
洗衣店用 6小时完成了4个任务(洗衣店吞吐率0.67t/h); 4个同学的等待时间均为1.5小时; Washer使用2小时(效率为0.33);Dryer使用2小时(0.33) ;Folder使用2小时(
0.33)
A
B
C
D
30 30 30 30 30 30 30 30 30 30 30 30
6 PM 7 8 9 10 11 Midnight
任务顺序
(2) 流水工作的洗衣店X
洗衣店用3小时完成了4个任务(1.33t/h); 4个同学各等待了1.5小时; Washer使用2小时(0.66);Dryer使用2小时(0.66) ;Folder使用2小
时(0.66) ;
A
B
C
D
6 PM 7 8 9 10 Midnight
任务顺序
30 30 30 30 30 30
1.3 洗衣店流水线——洗衣店Y
A, B, C, D to wash, dry, and fold;
Washer takes 30 minutes
Dryer takes 40 minutes
Folder takes 20 minutes
A B C D
(1) 串行工作的洗衣店Y
洗衣店用 6小时完成了4个任务(0.67t/h); 4个同学各等待了1.5小时; Washer使用2小时(0.33);Dryer使用2小时40分(0.44) ;Folder使用
1小时20分(0.22) ;
A
B
C
D
30 40 20 30 40 20 30 40 20 30 40 20
6 PM 7 8 9 10 11 Midnight
任务顺序
(2) 流水工作的洗衣店Y
洗衣店用3.5小时完成了4个任务(1.14t/h); 4个同学各等待了1.5小时; Washer使用2小时(0.57);Dryer使用2小时40分(0.76) ;Folder使
用1小时20分(0.38) ;
A
B
C
D
6 PM 7 8 9 10 11 Midnight
任务顺序
30 40 40 40 40 20
流水线中多个任务是并行处理的;
流水线不能缩短单个任务的响应时间,但可以提高吞吐率;
吞吐率和效率(设备利用率)成正比;
流水线速度限制于最慢流水站的速度;
最大加速比 = 流水站数 流水站速度不匹配
流水线“填充”和“排空”时间
30 40 40 40 40 20
(3) 洗衣店的结论
吞吐率 等待时间 效率(设备利用率)
串行均匀 0.67 t/h 1.5 h 0.33 0.33 0.33
流水均匀 1.33 t/h 1.5 h 0.66 0.66 0.66
串行非均匀 0.67 t/h 1.5 h 0.33 0.44 0.22
流水非均匀 1.14 t/h 1.5 h 0.57 0.76 0.38
20世纪最大的发明之一
流水线 流水线之前,汽车工业完全是手工作坊型的 . 每
装配一辆汽车要728个人工小时,当时汽车的年产量大约12辆.这一速度远不能满足巨大的消费市场的需求.所以使得汽车成为富人的象征。
1913年,福特提出在汽车组装中的流水线,汽车底盘在传送带上前行.前行中,逐步装上发动机,操控系统,车厢,方向盘,仪表,车灯,车窗玻璃、车轮,一辆完整的车组装成了。第一条流水线使每辆T型汽车的组装时间由原来的12小时28分钟缩短至10秒钟,生产效率提高了4488倍!
流水线是科学管理的一种体现 科学管理之父 弗雷德里克·温斯洛·泰勒
搬运生铁块试验、铁锹试验、金属切削实验
1. 3.计算机中的流水线
指令流水线
功能部件流水线 (浮点)
Godson3~9 Pentium4 ~31 ARM7~3
MIPS/ARM9/PowerPC 405 ~ 5 ARM 10 6级 ARM 11 8级
ARM Coretex A8 13级 A9 8级
1.4.流水技术
将重复的时序过程分解为若干子过程,每个子过程都可有效地在
其专用功能段上与其它子过程同时执行,这种技术称为流水技术。
1.5.时-空图
从时间和空间两个方面描述流水线的工作过程,横坐
标表示时间,纵坐标表示各流水段。
1.6.流水线的特点
流水过程由多个相关的子过程组成,这些子过程称为流水线
的“级”或“段”。段的数目称为流水线的“深度”。
每个子过程由专用的功能段实现,各功能段的时间应基本相
等,通常为1个时钟周期(1拍)。否则,消耗时间长的功能
段将成为流水线的瓶颈,会造成流水线的阻塞或断流。
流水线需要经过一定的填充时间才能稳定。
流水技术适合于大量重复的时序过程。
流水也是一种并行的手段。
1.单功能流水线和多功能流水线
按流水线所完成的功能分类
单功能流水线,是指只能完成一种固定功能的流水线。
多功能流水线,是指各段可以进行不同的连接,从而完成不同的功能。
2.流水线的分类
TI ASC的多功能流水线
2.静态流水线和动态流水线
按同一时间内流水段的连接方式划分
静态流水线,是指在同一时间内,流水线的各段只能按同一种功能的连接方式工作。
动态流水线,是指在同一时间内,当某些段正在实现某种运算时,另一些段却在实现另一种运算。
2.流水线的分类
动、静态流水线时空图
3.部件级、处理机级及处理机间流水线
– 按流水的级别划分
– 部件级流水线,又叫运算操作流水线,是把处理机的算术逻辑部件分段,使得各种数据类型的操作能够进行流水。
– 处理机级流水线,又叫指令流水线,是把解释指令的过程按照流水方式处理。
– 处理机间流水线,又叫宏流水线,是由两个以上的处理机串行地对同一数据流进行处理,每个处理机完成一项任务。
JPEG 编码的例子
宏流水线-JPEG
JPEG 编码的例子
宏流水线-神经网络
4.标量流水处理机和向量流水处理机
– 按照数据表示来进行分类
– 标量流水处理机,是指处理机不具有向量数据表示,仅对标量数据进行流水处理。
– 向量流水处理机,是指处理机具有向量数据表示
5.线性流水线和非线性流水线
– 按照是否有反馈回路来进行分类
– 线性流水线是指流水线的各段串行连接,没有反馈回路。
– 非线性流水线是指流水线中除有串行连接的通路外,还有反馈回路。
– 存在流水线调度问题。
6.顺序流动流水线和乱序流动流水线
– 按照输出端任务流出顺序与输入端任务流入顺序是否相同划分
– 乱序流动流水线也可称为无序流水线、错序流水线
流水线中多个任务是并行处理的;
流水线不能缩短单个任务的响应时间,但可以提高吞吐率;
吞吐率和效率(设备利用率)成正比;
流水线速度限制于最慢流水站的速度;
最大加速比 = 流水站数 流水站速度不匹配
流水线“填充”和“排空”时间
30 40 40 40 40 20
复习:流水线的若干结论
吞吐率 等待时间 效率(设备利用率)
串行均匀 0.67 t/h 1.5 h 0.33 0.33 0.33
流水均匀 1.33 t/h 1.5 h 0.66 0.66 0.66
串行非均匀 0.67 t/h 1.5 h 0.33 0.44 0.22
流水非均匀 1.14 t/h 1.5 h 0.57 0.76 0.38
29
复习:流水线的分类
单功能流水线:只能完成一种功能的流水线,如浮点加法流水线。
多功能流水线:流水线的各段可以进行不同的连接,从而使流水线在不同的时间完成不同的功能。
静态流水线:在某一时间段内,流水线的各段只能按同一种功能的连接方式工作,即只有当输入是一串相同性质的操作时其性能才能得到发挥。
动态流水线:在某一段时间内,某些段正在实现某类操作(定点乘),其他段却在实现另一类操作(浮点加)。
线性流水线:流水线的各段串行连接,没有反馈回路。
非线性流水线:流水线中除了串行的通路,还有反馈回路。
顺序流水线:流水线的流出顺序与其流入顺序相同。
乱序流水线:流水线的流出顺序与其流入顺序不同。
内容提要
流水线技术原理流水线的分类流水线的性能分析MIPS的五级流水线实现流水线的“依赖”及其处理结构相关:哈佛结构数据相关:
• 编译技术:插入nop,指令重排,寄存器重命名• forwarding技术• Interlock技术
控制相关• 编译技术:延迟分支• 硬件优化:提前完成,投机,预测
三项性能指标:吞吐率、加速比和效率
1.吞吐率
是衡量流水线速度的重要指标
吞吐率是指单位时间内流水线所完成的任务数或输出结果的数量。
最大吞吐率:TPmax是指流水线在达到稳定状态后所得到的吞吐率。
实际吞吐率:设流水线由m段组成,完成n个任务的吞吐率称为实际吞吐率,记作TP。
3.流水线性能分析
(1)最大吞吐率
假设流水线各段的时间相等,均为△t0,则:
TPmax = 1/△t0
假设流水线各段时间不等,第i段时间为△ti ,则:
TPmax = 1/max{△ti }
– 最大吞吐率取决于流水线中最慢一段所需的时间,该段成为流水线的瓶颈
– 消除瓶颈的方法
– 细分瓶颈段
– 重复设置瓶颈段
最大吞吐率
(2)实际吞吐率
若各段时间相等(假设均为△t0),则完成时间
T流水 = m△t0+(n-1)△t0 (m=深度,n=任务数)
实际吞吐率
实际吞吐率-均匀流水线
若各段时间不等(假设第i段为△ti),则完成时间
T = ∑△ti+(n-1)△tj
这里,△tj=max{△ti }
i=1
m
实际吞吐率-非均匀流水线
非均匀流水线的时空图
2. 加速比
加速比是指流水线速度与等功能的非流水线速度之比。
根据定义可知,加速比S = T非流水/T流水
若流水线为m段,每段时间均为△t0,则
T非流水 = nm△t0,T流水 = m△t0 + (n-1)△t0
加速比
3.效率
效率指流水线的设备利用率(部件运行时间与总时间的比率)。
由于流水线有通过时间(填充时间)和排空时间,所以流水线的各段并非一直满负荷工作,E<1
若各段时间相等,则各段效率也相等
即e1 = e2 = e3 =… = n△t0/T流水
整个流水线效率
效率
通过时间和排空时间
3.效率
从时-空图上看,效率就是n个任务所占的时空区与m个段
总的时空区之比
E=(Σei)/m=Σ(Tei/T流水)/m= ΣTei/(T流水×m)
根据这个定义,可以计算流水线各段时间不等时的流水线
效率
n 个任务占用的时空区E =━━━━━━━━━━━
m 个段总的时空区
效率在时空图上的表示
4. 吞吐率、加速比和效率的关系
TP = n/T流水 S=T非流水/T流水 最大加速比m
E = n△t0/T流水=mn△t0/(T流水m)= S/m
效率是实际加速比S与最大加速比m之比。
E = n△t0/T流水= (n/T流水) ·△t0=TP△t0
当△t0不变时,流水线的效率与吞吐率呈正比。为提高效率而采取的措施,也有助于提高吞吐率。
性能参数之间的关系
MIPS的五级流水线实现
46
面向流水线实现的MIPS指令集
指令字等长适于取指和译码
指令格式简单源操作数位置固定,因此可以在译码的同时取操作数(读寄
存器),否则要增加一级流水线段。
只有Load/Store访存意味着可以在执行阶段计算访存地址,然后在下一阶段访存。
假设:如果R-type指令也可访存,则变为取指、译码、地址计算、访存、执行、写回等几个阶段
操作数在内存中要“字对齐”因此在取操作数时不需要访问存储器多次
op(6 bits) rs(5 bits) rt(5 bits) rd(5 bits) shamt(5 bits) funct(6 bits)
op(6 bits) rs(5 bits) rt(5 bits) addr/immediate(16 bits)
R-type
I-type
op(6 bits) rs(5 bits) rt(5 bits) addr(16 bits)J-type
op(6 bits) addr(26 bits)
47
MIPS的5级流水线划分
单周期?多周期?
流水线的时空图
设计流水线CPU的数据通路基于单周期 or 多周期?
寄存器?ALU?
存储器?
50
指令数据通路划分
Instruction
memory
Address
4
32
0
AddAdd
result
Shift
left 2
Instruction
Mux
0
1
Add
PC
0Writedata
Mux
1
Registers
Readdata 1
Readdata 2
Readregister 1
Readregister 2
16Sign
extend
Writeregister
Writedata
Readdata
Address
Data
memory1
ALUresult
Mux
ALU
Zero
IF: Instruction fetch ID: Instruction decode/
register file read
EX: Execute/
address calculation
MEM: Memory access WB: Write back
51
流水线的段寄存器
Instructionmemory
Address
4
32
0
AddAdd
result
Shiftleft 2
I ns
t ruc
t ion
IF/ID EX/MEM MEM/WB
Mux
0
1
Add
PC
0Writedata
Mux
1
Registers
Readdata 1
Readdata 2
Readregister 1
Readregister 2
16Sign
extend
Writeregister
Writedata
Readdata
1
ALUresult
Mux
ALU
Zero
ID/EX
Datamemory
Address
有哪些寄存器?
52
流水线的段寄存器
Instructionmemory
Address
4
32
0
AddAdd
result
Shiftleft 2
I ns
t ruc
t ion
IF/ID EX/MEM MEM/WB
Mux
0
1
Add
PC
0Writedata
Mux
1
Registers
Readdata 1
Readdata 2
Readregister 1
Readregister 2
16Sign
extend
Writeregister
Writedata
Readdata
1
ALUresult
Mux
ALU
Zero
ID/EX
Datamemory
Address
寄存器命名方式:IF/ID.IR;ID/EX.A;
EX/MEM.Aluout;MEM/WB.MDR
53
load指令的取指阶段
Instructionmemory
Address
4
32
0
Add Addresult
Shiftleft 2
Ins t
ruct io
n
IF/ID EX/MEM MEM/WB
Mux
0
1
Add
PC
0Writedata
Mux
1
Registers
Readdata 1
Readdata 2
Readregister 1
Readregister 2
16Sign
extend
Writeregister
Writedata
Readdata
1
ALUresult
Mux
ALU
Zero
ID/EX
I n s tr u c tio n fe tc h
lw
Address
Datamemory
lw $s1,100($s2)
NP
CIR
54
load指令的译码阶段
Instruction
memory
Address
4
32
0
AddAdd
result
Shift
left 2
Instr
uc t
ion
IF/ID EX/MEM
Mux
0
1
Add
PC
0Writedata
Mux
1
Registers
Readdata 1
Readdata 2
Readregister 1
Readregister 2
16Sign
extend
Writeregister
Writedata
Readdata
1
ALUresult
Mux
ALU
Zero
ID/EX MEM/WB
I n s t r u c tio n d e c o d e
lw
Address
Data
memory
lw $s1,100($s2)
55
load指令的执行阶段
Instructionmemory
Address
4
32
0
Add Addresult
Shiftleft 2
Instr
uct
ion
IF/ID EX/MEM
Mux
0
1
Add
PC
0Writedata
Mux
1
Registers
Readdata 1
Readdata 2
Readregister 1
Readregister 2
16Sign
extend
Writeregister
Writedata
Readdata
1
ALUresult
Mux
ALU
Zero
ID/EX MEM/WB
Execution
lw
Address
Datamemory
lw $s1,100($s2)
NP
CA
BIm
m
NPC’
Co
nd
AL
UO
ut
B
56
load指令的访存阶段
I i
i
l t
ti
I
i
i t
i
i
i
t
r
nstruct onmemory
Address
4
32
0
Add Addresult
Shftef 2
Ins
r uc
ton
F/ID EX/MEM
Mux
0
1
Add
PC
0Wrtedata
Mux
1
Regsers
Readdata 1
Readdata 2
Readregister 1
Readregister 2
16Sgn
extend
Wrteregister
Wrtedata
Readda a
Datamemory
1
ALUresult
Mux
ALU
Ze o
ID/EX MEM/WB
M e m o r y
lw
Address
r
t
t
i
i
li
lw $s1,100($s2)
57
load指令的写回阶段
Instructionmemory
Address
4
32
0
Add Addresult
Shiftleft 2
I nstr u
ctio
n
IF/ID EX/MEM
Mux
0
1
Add
PC
0Writedata
Mux
1Registe s
Readda a 1
Readda a 2
Readregster 1
Readregster 2
16Sign
extend
Writedata
ReaddataData
memory
1
ALUresut
Mux
ALUZero
ID/EX MEM/WB
W r ite b a c k
lw
Writeregster
Address
lw $s1,100($s2)
MD
RA
LU
Ou
t
58
Lw指令在流水线中的执行
Instructionmemory
Address
4
32
0
AddAdd
result
Shiftleft 2
I ns
t ruc
t ion
IF/ID EX/MEM MEM/WB
Mux
0
1
Add
PC
0Writedata
Mux
1
Registers
Readdata 1
Readdata 2
Readregister 1
Readregister 2
16Sign
extend
Writeregister
Writedata
Readdata
1
ALUresult
Mux
ALU
Zero
ID/EX
Datamemory
Address
?
59
流水线的改正版(lw指令)
Instructionmemory
Address
4
32
0
Add Addresult
Shiftleft 2
Inst
r uct
ion
IF/ID EX/MEM MEM/WB
Mux
0
1
Add
PC
0Writedata
Mux
1Registers
Readdata 1
Readdata 2
Readregister 1
Readregister 2
16Sign
extend
Writeregister
Writedata
Readdata
1
ALUresult
Mux
ALUZero
ID/EX
Address
Datamemory
数据通路由谁控制?
60
段间寄存器
Instructionmemory
Address
4
32
0
Add Addresult
Shiftleft 2
Inst
r uct
ion
IF/ID EX/MEM MEM/WB
Mux
0
1
Add
PC
0Writedata
Mux
1Registers
Readdata 1
Readdata 2
Readregister 1
Readregister 2
16Sign
extend
Writeregister
Writedata
Readdata
1
ALUresult
Mux
ALUZero
ID/EX
Address
Datamemory
NP
CIR
NP
CA
BIm
m
NPC’
Co
nd
AL
UO
ut
B
AL
UO
ut
MD
R
IR IR IR
流水线的时空图
CC5周期的流水线状态
63
各类指令的完成时间?
Instruction
memory
Address
4
32
0
AddAdd
result
Shift
left 2
Instr
uct
ion
IF/ID EX/MEM MEM/WB
Mux
0
1
Add
PC
0Writedata
Mux
1
Registers
Readdata 1
Readdata 2
Readregister 1
Readregister 2
16Sign
extend
Writeregister
Writedata
Readdata
1
ALUresult
Mux
ALU
Zero
ID/EX
Address
Data
memory
ld指令X个周期st指令X个周期R-type指令X个周期Beq指令X周期
多周期V.S.流水线
64
R-type指令完成时间:结构冲突
R-type指令能否4个周期完成,节省WB段? 例:当前指令为ld,下一条指令为R-type。CC5?
流水段
MIPS 流水线的每个流水段的操作(示意,不要求)
任何指令类型
ALU 指令(R类/I类) Load/Store 指令 分支指令
IF
ID
EX
IF/ID.IR ← Mem[PC];
PC ← (if PCSrc {EX/MEM.NPC’} else {PC+4});
ID/EX.A ← Regs[IF/ID.IR25...21]; ID/EX.B ← Regs[IF/ID.IR20...16];
ID/EX.NPC ← IF/ID.NPC; ID/EX.IR ← IF/ID.IR;
ID/EX.Imm ← (IF/ID.IR15)16##IR15...0;
EX/MEM.IR ← ID/EX.IR;
EX/MEM.ALUOut ← ID/EX.A op ID/EX.B;或EX/MEM.ALUOut ← ID/EX.A op ID/EX.Imm;EX/MEM.cond ← 0;
EX/MEM.IR ← ID/EX.IR;
EX/MEM.B ←ID/EX.B;
EX/MEM.ALUOutput ← ID/EX.A + ID/EX.Imm;
EX/MEM.cond ← 0;
EX/MEM.NPC’←ID/EX.NPC+ID/EX.Imm<<2;
EX/MEM.cond ← (ID/EX.A == ID/EX.B);
IF/ID.NPC ← PC+4;
流水段
MIPS 流水线的每个流水段的操作(续)
任何指令类型
ALU 指令 Load/Store 指令 分支指令
MEM
WB
MEM/WB.IR ←EX/MEM.IR;
MEM/WB.ALUOut ← EX/MEM.ALUOut;
MEM/WB.IR ← EX/MEM.IR;
MEM/WB.MDR ← Mem[EX/MEM.ALUOut];或Mem[EX/MEM.ALUOut] ← EX/MEM.B;
Regs[MEM/WB.IR15...11]
← MEM/WB.ALUOut;(R)
或
Regs[MEM/WB.IR20...16]
← MEM/WB.ALUOut;(I)
Regs[MEM/WB.IR20...16]
← MEM/WB.MDR;
PCSrc ←EX/MEM.cond &EX/MEM.Branch;
流水线中的控制信号
复习:单周期的控制信号
6位OP产生8个信号,包括ALUop(不包括Jump) R-Type:2位ALUop和func组合产生ALU控制选择(四位) PCSRC信号由BRANCH和ALU ZERO信号共同确定
MemtoReg
MemRead
MemWrite
ALUOp
ALUSrc
RegDst
PC
Instructionmemory
Readaddress
Instruction[31– 0]
Instruction [20– 16]
Instruction [25– 21]
Add
Instruction [5– 0]
RegWrite
4
16 32Instruction [15– 0]
0
Registers
WriteregisterWritedata
Writedata
Readdata 1
Readdata 2
Readregister 1
Readregister 2
Signextend
ALUresult
Zero
Datamemory
Address Readdata
Mux
1
0
Mux
1
0
Mux
1
0
Mux
1
Instruction [15– 11]
ALUcontrol
Shiftleft 2
PCSrc
ALU
AddALU
result
流水线的控制信号和单周期是否一样?
op域(6位)译码产生的控制信号:8个
RegDst:选择rt或rd作为写操作的目的寄存器
• R-type指令(1)与 I-type指令二选一(0)
RegWrite:寄存器写操作控制
ALUSrc:ALU的第二个操作数来源
• R-type指令(0)与 l-type指令(1)
(含branch指令)二选一
ALUOp:R-type指令(2位)
MemRead:存储器读控制,load指令
MemWrite:存储器写控制,store指令
MemtoReg:目的寄存器数据来源
• R-type(I类ALU)指令与load指令二选一
Branch:是否分支指令(产生PCSrc)
PCSrc:nPC来源控制,顺序与分支成功二选一
“是否beq指令(Branch)”& “ALU的Zero状态有效”
复习:单周期控制信号生成
70
Signal
name
R-type lw
(31)
sw
(35)
beq
inputs op5(26) 0 1 1 0
op4 0 0 0 0
op3 0 0 1 0
op2 0 0 0 1
op1 0 1 1 0
op0(31) 0 1 1 0
outputs RegDst 1 0 x x
ALUSrc 0 1 1 0
MemtoReg 0 1 x x
RegWrite 1 1 0 0
MemRead 0 1 0 0
MemWrite 0 0 1 0
Branch 0 0 0 1
ALUop1 1 0 0 0
ALUop0 0 0 0 1
复习:控制信号例子
目的寄存器编号Rd/Rt
R-type指令(1) load指令(0)
ALU二操作数来源 R-type指令(0) l-type指令(1)
目的寄存器来源 MEM(1) ALU(0)
目的寄存器写 存储器读 存储器写 是否为Branch
ALUOP 2位 + 6位Func
4位ALU 控制信号
流水线控制信号
为何没有PC写入信号?
72
流水线控制信号
所有控制信号名及其功能与非流水线版相同取指:读IM,写PC(每个周期写入一次, 不需控制信号)译码/寄存器读:没有控制信号执行/地址计算:RegDst,ALUOp,ALUSrc
访存:Branch(=>PCSrc),MemRead,MemWrite,写回:MemtoReg,RegWrite
流水线段寄存器:每个周期写入一次,不需要单独的写控制
需要将控制分配给不同的流水线段
73
控制的传递
需要控制缓存:类似load指令的目的寄存器号传递
Control
EX
M
WB
M
WB
WB
IF/ID ID/EX EX/MEM MEM/WB
Instruction
74
流水线寄存器的控制
PC
Instructionmemory
Inst r
uction
Add
Instruction[20– 16]
Mem
toR
eg
ALUOp
Branch
RegDst
ALUSrc
4
16 32Instruction[15–0]
0
0
Mux
0
1
AddAdd
result
RegistersWriteregister
Writedata
Readdata 1
Readdata 2
Readregister 1
Readregister 2
Signextend
Mux
1
ALUresult
Zero
Writedata
Readdata
Mux
1
ALUcontrol
Shiftleft 2
RegW
rite
MemRead
Control
ALU
Instruction[15– 11]
6
EX
M
WB
M
WB
WBIF/ID
PCSrc
ID/EX
EX/MEM
MEM/WB
Mux
0
1
Mem
Wri
te
Address
Datamemory
Address
相 关
76
流水线的“相关”
冲突(hazard,冒险),依赖(dependencies )
结构相关:当指令在重叠执行的过程中,硬件资源满足不了指令重叠执行的要求,发生资源冲突时将产生结构相关。
数据相关:当一条指令需要用到前面指令的执行结果,而这些指令均在流水线中重叠执行时,就可能引起数据相关。
控制相关:当流水线遇到分支指令和其他会改变PC值的指令时,会发生控制相关。
77
结构相关
典型的结构相关由访存和寄存器造成
问:访存相关和寄存器相关的例子?
MEM REG REGMEMALU
MEM REG REGMEMALU
MEM REG REGMEMALU
MEM REG REGMEMALU
C1 C2 C3 C4 C5 C6 C7 C8
LOAD
指令1
指令2
指令3
78
解决方案1:流水线停顿(stall)
气泡(bubble):流水线停顿一个周期实现:不改变PC,重新取指
MEM REG REGMEMALU
MEM REG REGMEMALU
MEM REG REGMEMALU
MEM REG REGMEMALU
C1 C2 C3 C4 C5 C6 C7 C8
LOAD
指令1
指令2
指令3
79
解决方案2:访存结构冲突消除
访存结构相关化解:哈佛结构
MEM REG REGMEM
D
ALU
MEM REG REGMEMALU
MEM REG REGMEMALU
MEM
I
REG REGMEMALU
C1 C2 C3 C4 C5 C6 C7 C8
LOAD
指令1
指令2
指令3
结构相关
1. 数据相关简介
实例: SUB $2, $1 ,R3
AND $12, $2 ,$5
OR $13, $6 ,$2
ADD $14, $2 ,$2
SW $15, 100($2)
产生原因:当指令在流水线中重叠执行时,流水线有可能改变指令读/写操作数的顺序,使之不同于它们在非流水实现时的顺序,这将导致数据相关。
数据相关
82
Instructionmemory
Address
4
32
0
Add Addresult
Shiftleft 2
Inst
r uct
ion
IF/ID EX/MEM MEM/WB
Mux
0
1
Add
PC
0Writedata
Mux
1Registers
Readdata 1
Readdata 2
Readregister 1
Readregister 2
16Sign
extend
Writeregister
Writedata
Readdata
1
ALUresult
Mux
ALUZero
ID/EX
Address
Datamemory
NP
CIR
NP
CA
BIm
m
NPC’
Co
nd
AL
UO
ut
B
AL
UO
ut
MD
R
IR IR IR
SUB $2, $1 ,R3
AND $12, $2 ,$5
OR $13, $6 ,$2
问:$2的正确值在哪?
83
Instructionmemory
Address
4
32
0
Add Addresult
Shiftleft 2
Inst
r uct
ion
IF/ID EX/MEM MEM/WB
Mux
0
1
Add
PC
0Writedata
Mux
1Registers
Readdata 1
Readdata 2
Readregister 1
Readregister 2
16Sign
extend
Writeregister
Writedata
Readdata
1
ALUresult
Mux
ALUZero
ID/EX
Address
Datamemory
NP
CIR
NP
CA
BIm
m
NPC’
Co
nd
AL
UO
ut
B
AL
UO
ut
MD
R
IR IR IR
SUB $2, $1 ,R3
AND $12, $2 ,$5
OR $13, $6 ,$2
ADD $14, $2 ,$2
问:$2的正确值在哪?
84
Instructionmemory
Address
4
32
0
Add Addresult
Shiftleft 2
Inst
r uct
ion
IF/ID EX/MEM MEM/WB
Mux
0
1
Add
PC
0Writedata
Mux
1Registers
Readdata 1
Readdata 2
Readregister 1
Readregister 2
16Sign
extend
Writeregister
Writedata
Readdata
1
ALUresult
Mux
ALUZero
ID/EX
Address
Datamemory
NP
CIR
NP
CA
BIm
m
NPC’
Co
nd
AL
UO
ut
B
AL
UO
ut
MD
R
IR IR IRSUB $2, $1 ,R3
AND $12, $2 ,$5
OR $13, $6 ,$2
ADD $14, $2 ,$2
SW $15, 100($2)
85
数据相关(哪个周期数据可用?)
86
数据相关分类
写后读相关(RAW):j的执行要用到i的计算结果,j可能在i写入其计算结果之前就先行对保存该结果的寄存器进行读操作。“读”快,“写”慢
写后写相关(WAW):j和i的目的操作数一样,写入顺序错误,在目标寄存器中留下的是i的值而不是j的值。后面的“写”快,前面的“写”慢
读后写相关(WAR):j可能在i读取某个源寄存器的内容之前就先对该寄存器进行写操作,导致i读出的是错误的数据。后面的“写”快,前面的“读”慢
流水线何时会产生WAW和WAR相关?
ADDD F4,F0,Name(ALU指令访存)LD F0,0(R1)
WAW和WAR相关
RD
ADD指令提前写回
88
RAW的判断规则
EX段
MEM段
消除RAW
Stall
硬件控制,动态技术(流水线互锁 Interlock)
编译技术,静态技术• 插入NOP
• 调度无关指令:兼容性问题(新旧版本“延迟槽”数可能不同)
硬件和软件实现的区别
逻辑上直到C6,数据才可用
90
消除RAW:数据定向技术
forwarding,bypassing(定向或旁路,硬件)数据从实际存放的位置直接传到需要的位置
MEM REG REGMEMALU
MEM REG REGMEMALU
MEM REG REGMEMALU
MEM REG REGMEMALU
C1 C2 C3 C4 C5 C6 C7 C8
ADD
SUB
AND
指令
MIPS = Microprocessor without Interlocked Piped Stages
Forwarding
PCInstruction
memory
Registers
Mux
Mux
Control
ALU
EX
M
WB
M
WB
WB
ID/EX
EX/MEM
MEM/WB
Datamemory
Mux
Forwardingunit
IF/IDIn
stru
ct io
n
Mux
RdEX/MEM.RegisterRd
MEM/WB.RegisterRd
Rt
Rt
Rs
IF/ID.RegisterRd
IF/ID.RegisterRt
IF/ID.RegisterRt
IF/ID.RegisterRs
ADD $1, $2, $3 IF ID EX ME WB
SUB $5, $1, $7 IF ID EX ME WB
XOR $6, $1, $7 IF ID EX ME WB
OR $7, $1, $7 IF ID EX ME WB
PCInstruction
memory
Registers
Mux
Mux
Control
ALU
EX
M
WB
M
WB
WB
ID/EX
EX/MEM
MEM/WB
Datamemory
Mux
Forwardingunit
IF/ID
Inst
ruct io
n
Mux
RdEX/MEM.RegisterRd
MEM/WB.RegisterRd
Rt
Rt
Rs
IF/ID.RegisterRd
IF/ID.RegisterRt
IF/ID.RegisterRt
IF/ID.RegisterRs
AB
AL
UO
ut
AL
UO
ut
MD
R
R-Type+ R-Type
LW $1, 45($2) IF ID EX ME WB
SUB $8, $6, $7 IF ID EX ME WB
ADD $5, $7, $1 IF ID EX ME WB
PCInstruction
memory
Registers
Mux
Mux
Control
ALU
EX
M
WB
M
WB
WB
ID/EX
EX/MEM
MEM/WB
Datamemory
Mux
Forwardingunit
IF/ID
Inst
ruct io
n
Mux
RdEX/MEM.RegisterRd
MEM/WB.RegisterRd
Rt
Rt
Rs
IF/ID.RegisterRd
IF/ID.RegisterRt
IF/ID.RegisterRt
IF/ID.RegisterRs
AB
AL
UO
ut
AL
UO
ut
MD
R
LW+ R-Type
PCInstruction
memory
Registers
Mux
Mux
Control
ALU
EX
M
WB
M
WB
WB
ID/EX
EX/MEM
MEM/WB
Datamemory
Mux
Forwardingunit
IF/ID
Inst
ruct io
n
Mux
RdEX/MEM.RegisterRd
MEM/WB.RegisterRd
Rt
Rt
Rs
IF/ID.RegisterRd
IF/ID.RegisterRt
IF/ID.RegisterRt
IF/ID.RegisterRs
AB
AL
UO
ut
AL
UO
ut
MD
R
ADD $1, $2, $3 IF ID EX ME WB
SUB $8, $6, $7 IF ID EX ME WB
LW $5, 45($1) IF ID EX ME WB
R-Type+ LW
PCInstruction
memory
Registers
Mux
Mux
Control
ALU
EX
M
WB
M
WB
WB
ID/EX
EX/MEM
MEM/WB
Datamemory
Mux
Forwardingunit
IF/ID
Inst
ruct io
n
Mux
RdEX/MEM.RegisterRd
MEM/WB.RegisterRd
Rt
Rt
Rs
IF/ID.RegisterRd
IF/ID.RegisterRt
IF/ID.RegisterRt
IF/ID.RegisterRs
AB
AL
UO
ut
AL
UO
ut
MD
R
LW $1, 30($2) IF ID EX ME WB
SUB $8, $6, $7 IF ID EX ME WB
LW $5, 45($1) IF ID EX ME WB
LW+LW
PCInstruction
memory
Registers
Mux
Mux
Control
ALU
EX
M
WB
M
WB
WB
ID/EX
EX/MEM
MEM/WB
Datamemory
Mux
Forwardingunit
IF/ID
Inst
ruct io
n
Mux
RdEX/MEM.RegisterRd
MEM/WB.RegisterRd
Rt
Rt
Rs
IF/ID.RegisterRd
IF/ID.RegisterRt
IF/ID.RegisterRt
IF/ID.RegisterRs
AB
AL
UO
ut
AL
UO
ut
MD
R
R-Type+SW
ADD $1, $2, $3 IF ID EX ME WB
SW $5, 30($1) IF ID EX ME WB
SW $6, 45($1) IF ID EX ME WB
PCInstruction
memory
Registers
Mux
Mux
Control
ALU
EX
M
WB
M
WB
WB
ID/EX
EX/MEM
MEM/WB
Datamemory
Mux
Forwardingunit
IF/ID
Inst
ruct io
n
Mux
RdEX/MEM.RegisterRd
MEM/WB.RegisterRd
Rt
Rt
Rs
IF/ID.RegisterRd
IF/ID.RegisterRt
IF/ID.RegisterRt
IF/ID.RegisterRs
AB
AL
UO
ut
AL
UO
ut
MD
R
R-Type+BEQ
ADD $1, $2, $3 IF ID EX ME WB
BEQ $1, $4, Offset IF ID EX ME WB
98
Forwarding之后的时空图
IM Reg
IM Reg
CC 1 CC 2 CC 3 CC 4 CC 5 CC 6
Time (in clock cycles)
sub $2, $1, $3
Program
execution order
(in instructions)
and $12, $2, $5
IM Reg DM Reg
IM DM Reg
IM DM Reg
CC 7 CC 8 CC 9
10 10 10 10 10/– 20 – 20 – 20 – 20 – 20
or $13, $6, $2
add $14, $2, $2
sw $15, 100($2)
Value of register $2 :
DM Reg
Reg
Reg
Reg
X X X – 20 X X X X XValue of EX/MEM :
X X X X – 20 X X X XValue of MEM/WB :
DM
Forwarding之后每个时钟周期都能执行一条指令!
PCInstruction
memory
Registers
Mux
Mux
Control
ALU
EX
M
WB
M
WB
WB
ID/EX
EX/MEM
MEM/WB
Datamemory
Mux
Forwardingunit
IF/ID
Inst
ruct io
n
Mux
RdEX/MEM.RegisterRd
MEM/WB.RegisterRd
Rt
Rt
Rs
IF/ID.RegisterRd
IF/ID.RegisterRt
IF/ID.RegisterRt
IF/ID.RegisterRs
AB
AL
UO
ut
AL
UO
ut
MD
R等等,还有问题吗?
PCInstruction
memory
Registers
Mux
Mux
Control
ALU
EX
M
WB
M
WB
WB
ID/EX
EX/MEM
MEM/WB
Datamemory
Mux
Forwardingunit
IF/ID
Inst
ruct io
n
Mux
RdEX/MEM.RegisterRd
MEM/WB.RegisterRd
Rt
Rt
Rs
IF/ID.RegisterRd
IF/ID.RegisterRt
IF/ID.RegisterRt
IF/ID.RegisterRs
AB
AL
UO
ut
AL
UO
ut
MD
R
R-Type+SW
ADD $1, $2, $3 IF ID EX ME WB
SW $1, 30($3) IF ID EX ME WB
SW $1, 45($4) IF ID EX ME WB
问题出在哪?怎么解决?
PCInstruction
memory
Registers
Mux
Mux
Control
ALU
EX
M
WB
M
WB
WB
ID/EX
EX/MEM
MEM/WB
Datamemory
Mux
Forwardingunit
IF/ID
Inst
ruct io
n
Mux
RdEX/MEM.RegisterRd
MEM/WB.RegisterRd
Rt
Rt
Rs
IF/ID.RegisterRd
IF/ID.RegisterRt
IF/ID.RegisterRt
IF/ID.RegisterRs
AB
AL
UO
ut
AL
UO
ut
MD
R
LW+SW
LW $1, 56($2) IF ID EX ME WB
SW $1, 45($3) IF ID EX ME WB
SW $1, 45($4) IF ID EX ME WB
问题出在哪?怎么解决?
102
从流水线到相关的修改
Instructionmemory
Address
4
32
0
Add Addresult
Shiftleft 2
Inst
r uct
ion
IF/ID EX/MEM MEM/WB
Mux
0
1
Add
PC
0Writedata
Mux
1Registers
Readdata 1
Readdata 2
Readregister 1
Readregister 2
16Sign
extend
Writeregister
Writedata
Readdata
1
ALUresult
Mux
ALUZero
ID/EX
Address
Datamemory
NP
CIR
NP
CA
BIm
m
NPC’
Co
nd
AL
UO
ut
B
AL
UO
ut
MD
R
IR IR IR
数据通路MUX
如何判断
LW $1, 45($2) IF ID EX ME WB
ADD $5, $7, $1 IF ID EX ME WB
ADD $5, $7, $1 I F ID EX ME WB
PCInstruction
memory
Registers
Mux
Mux
Control
ALU
EX
M
WB
M
WB
WB
ID/EX
EX/MEM
MEM/WB
Datamemory
Mux
Forwardingunit
IF/ID
Inst
ruct io
n
Mux
RdEX/MEM.RegisterRd
MEM/WB.RegisterRd
Rt
Rt
Rs
IF/ID.RegisterRd
IF/ID.RegisterRt
IF/ID.RegisterRt
IF/ID.RegisterRs
AB
AL
UO
ut
AL
UO
ut
MD
R
LW+ R-Type
还有问题吗?
104
Forwarding无法解决的RAW
Reg
IM
Reg
Reg
IM
CC 1 CC 2 CC 3 CC 4 CC 5 CC 6
Time (in clock cycles)
lw $2, 20($1)
Programexecutionorder(in instructions)
and $4, $2, $5
IM Reg DM Reg
IM DM Reg
IM DM Reg
CC 7 CC 8 CC 9
or $8, $2, $6
add $9, $4, $2
slt $1, $6, $7
DM Reg
Reg
Reg
DM
Interlock(互锁):解决LW相关
检测数据依赖:在ID段!
stall:“freeze up and bubble down”
冻结其前面的流水段:IF,ID
• 增加两个控制信号:PCWrite和IF/IDWrite– 阻止更新PC和IF/ID
– 使之持续重复相同的操作
向EX流水段插入气泡• 将ID/EX的控制清零
– 使功能部件暂停一个周期,再重新发出控制
106
Interlock
PCInstruction
memory
Registers
Mux
Mux
Mux
Control
ALU
EX
M
WB
M
WB
WB
ID/EX
EX/MEM
MEM/WB
Datamemory
Mux
Hazarddetection
unit
Forwardingunit
0
Mux
IF/ID
Inst
ruct
ion
ID/EX.MemReadIF
/ID
Write
PC
Write
ID/EX.RegisterRt
IF/ID.RegisterRd
IF/ID.RegisterRt
IF/ID.RegisterRt
IF/ID.RegisterRs
Rt
Rs
Rd
RtEX/MEM.RegisterRd
MEM/WB.RegisterRd
interlock
bubble down
freeze up
ld?
107
控制相关假设指令3是一条条件转移指令
必须待指令2的结果出现后(第7个时间单元),才能决定下一条指令是4(条件不满足,no taken)还是15(条件满足,taken)。
延迟槽(delay slot)
流水线冻结(freeze)与排空(flush,将IR置0)
108
优化Beq指令的完成时间
PC
Instructionmemory
Inst r
uction
Add
Instruction[20– 16]
Mem
toR
eg
ALUOp
Branch
RegDst
ALUSrc
4
16 32Instruction[15–0]
0
0
Mux
0
1
AddAdd
result
RegistersWriteregister
Writedata
Readdata 1
Readdata 2
Readregister 1
Readregister 2
Signextend
Mux
1
ALUresult
Zero
Writedata
Readdata
Mux
1
ALUcontrol
Shiftleft 2
RegW
rite
MemRead
Control
ALU
Instruction[15– 11]
6
EX
M
WB
M
WB
WBIF/ID
PCSrc
ID/EX
EX/MEM
MEM/WB
Mux
0
1
Mem
Wri
te
Address
Datamemory
Address
如何让BEQ指令在第三和第五个周期内完成?
109
降低延迟开销
PCInstruction
memory
4
Registers
Mux
Mux
Mux
ALU
EX
M
WB
M
WB
WB
ID/EX
0
EX/MEM
MEM/WB
Datamemory
Mux
Hazarddetection
unit
Forwardingunit
IF.Flush
IF/ID
Signextend
Control
Mux
=
Shiftleft2
Mux
add $3, $2, $3;
beq $3, $4, 72;
。。。
BEQ在ID段结束,分支延迟槽=1
110
分支优化技术-降低开销
延迟分支(delayed branch):编译调度 按一定的模式向延迟槽(delay slot)中填入某些指令 无论分支是否成功,延迟槽中的指令都将被执行
延迟分支的来源 使用分支前的指令填充(从前调度) 以分支目标指令填充(从目标处调度) 以分支不发生时的下一条指令填充(从失败处调度)
减少转移损失—延迟转移,编译器
.....
I0: R1+R2R3
I1: BRGT R5,R6, jump:
I2: R4+R7R8
.....
jump:
将代码重新安排如下:
.....
I1: BRGT R5,R6, jump:
I0: R1+R2R3
I2: R4+R7R8
.....
jump:
延迟转移是一个体系结构特性。
也就是说是软硬之间的一个协
议。硬件会执行任何跟在转移
指令后面的指令,不管转移是
否发生。软件负责调度一条有
用指令填入这个槽。若不能找
到有用指令就在代码中填入
NOP指令。
112
从前调度
延迟分支的来源 使用分支前的指令填充(从前调度)
Not Taken(分支不成功):
1 ADD
2 IF
3 STALL
4 SUB
5 ADD
调度前
Taken(分支成功):
1 ADD
2 IF
3 STALL
4 ADDSUB
ADD
Not Taken(分支不成功):
1 IF
2 ADD
3 SUB
4 ADD
调度后
Taken(分支成功):
1 IF
2 ADD
3 ADDSUB
ADD
113
从目标处调度
延迟分支的来源 以分支目标指令填充(从目标处调度)
Not Taken(分支不成功):
1 SUB
2 XXX
3 ADD
4 IF
5 STALL
6 YYY
调度前
Taken(分支成功):
1 SUB
2 XXX
3 ADD
4 IF
5 STALL
6 SUB
Not Taken(分支不成功):
1 SUB
2 XXX
3 ADD
4 IF
5 SUB
6 YYY
调度后
Taken(分支成功):
1 SUB
2 XXX
3 ADD
4 IF
5 SUB
114
从失败处调度
延迟分支的来源 以分支不发生时的下一条指令填充(从失败处调度)
Not Taken(分支不成功):
1 ADD
2 IF
3 STALL
4 SUB
5 YYY
调度前
Taken(分支成功):
1 ADD
2 IF
3 STALL
4 YYY
Not Taken(分支不成功):
1 ADD
2 IF
3 SUB
4 YYY
调度后
Taken(分支成功):
1 ADD
2 IF
3 SUB
4 YYY
YYY
YYY
三种延迟分支方法的要求及效果
调度策略 对调度的要求 其作用前提
从前调度被调度的指令必须与分支结果无关
任何情况
从目标处调度
必须保证在分支失败时执行被调度的指令不会导致错误
分支成功时
从失败处调度
必须保证在分支成功时执行被调度的指令不会导致错误
分支失败时
通过分支成功与否选择合适的调度策略!问题:如何提前知道分支是否成功?
控制相关=>分支=>降低分支开销(硬)=>延迟分支(软)
120
分支优化技术-分支预测
问题:如果能够提前知道分支是否成功,采取相应的措施,可以提高性能。
分支预测技术(Prediction)静态预测:投机执行(Speculation)
• Taken
• Not Taken
• 向后转移taken,向前转移not taken
动态预测:分支预测器(Branch predictor)• 一位饱和计数器(saturating counter)
• 两位饱和计数器
静态预测,编译器
大多数RISC微处理器一般都采用了静态转移预测。3种:
预测总是不会发生转移(预测分支失败)。
• 这是最简单最经济的转移预测策略。
• 在转移实际发生之前,它预测指令执行是顺序的。
预测转移总是发生(预测分支成功) 。
• 只要转移指令在实际中进行转移的百分比远高于没有发生转移的情况,这种转移预测策略可以很好的工作。
对于向后的转移预测转移会发生,向前的转移预测转移不会发生。
• 这种预测策略与循环的结构非常匹配。在循环中,如果向后的转移用于迭代,向前的转移用于退出循环。由于迭代次数很多,而退出只有一次,那么这种预测对循环是非常准确的。
预测成功和预测失败应该采取什么策略?
122
MIPS:预测分支失败
R e g
R e g
C C 1
T im e (in c lock cyc le s)
4 0 be q $ 1 , $ 3 , 72
P ro gra m
e xe cu tion
o rde r
( in ins tru ctio ns )
IM R e g
IM D M
IM D M
IM D M
D M
D M R e g
R e g R e g
R e g
R e g
R e gIM
4 4 a n d $ 1 2 , $ 2 , $ 5
4 8 or $ 1 3 , $ 6 , $ 2
5 2 a d d $ 1 4 , $ 2 , $ 2
7 2 lw $ 4 , 5 0 ($ 7 )
C C 2 C C 3 C C 4 C C 5 C C 6 C C 7 C C 8 C C 9
R e g
动态预测,预测器
动态转移预测基于实际运行时的转移历史:
1位转移预测缓冲器。将所有转移指令地址放入一个缓冲器并配置一个状态
位用于记录这条指令是否发生了转移。
• 当取到一条新的转移指令时,查看缓冲器是否有这条指令。如果这条指令不在缓冲器,静
态的预测这条指令并在指令的状态输出已知时更新缓冲器。如果指令已在缓冲器中,根据
以前状态预测这条指令。如果预测正确,那是最好的;否则,更新缓冲器中的状态位。
2位转移预测缓冲器。
• 转移预测过程与1位时相同,只是用两个状态位跟踪转移历史。
• 只有当连续两次预测不成功时才修改转移预测的方向。
• 用两位的目的是在特定条件下,如嵌套循环退出时,实现滞后作用。
以硬件复杂性和成本为代价,动态转移预测可以稍微提高转移预测的精度。
动态分支预测(2位)
2位预测器流程图:无时序 状态图:有时序
00
11
01
10
00
11
01
10
实际的取指流水线
发挥分支预测器的效益
分支规律,预测准确率可达90%以上
数据预排序,提升分支预测的有效性
相关总结
结构相关 原因:硬件资源不足产生的冲突 解决方案:等待(软件编译器,硬件Stall) 解决方案:哈佛结构(存储器相关)
数据相关 原因:数据依赖 解决方案:等待(软件编译器,硬件Stall) 解决方案:定向路径(RAW相关) 解决方案:流水线互锁(LW+指令)
控制相关 原因:分支指令引起的PC冲突 解决方案:等待(软件编译器,硬件Stall) 解决方案:延迟分支(三种调度方法) 解决方案:分支预测(一位、两位)
PCInstruction
memory
Registers
Mux
Mux
Control
ALU
EX
M
WB
M
WB
WB
ID/EX
EX/MEM
MEM/WB
Datamemory
Mux
Forwardingunit
IF/IDIn
stru
ct io
n
Mux
RdEX/MEM.RegisterRd
MEM/WB.RegisterRd
Rt
Rt
Rs
IF/ID.RegisterRd
IF/ID.RegisterRt
IF/ID.RegisterRt
IF/ID.RegisterRs
AB
AL
UO
ut
AL
UO
ut
MD
R
格式:SUB->ADD: EX/MEM.ALUOUT->ID/EX.A
LW $1, 45($3)
ADD $1, $1, $4
SW $1, 5($3)
练习:画出下边指令序列中的定向路径
SUB $1, $5, $4
ADD $1, $1, $4
BEQ $1, $4, Offset
流水线中的多发技术
133
流水线中的多发技术
通过减少流水线的停顿提升性能CPI (Cycles per Instruction)=1
IPC (Instructions Per Cycle)
如何使得IPC>1?在一个时钟周期内流出多条指令
常见的多发技术(Multiple issue) 超标量技术(SuperScalar)超长指令字技术 (Very Long Instruction Word)
超流水线技术(SuperPipeline)SIMD技术(Single Instruction Multi Data)
134
1、超标量技术( SuperScalar )
在任一时刻取指并执行一条指令的简单的处理器被称为“简单标量处理器”
超标量:指在每个时钟周期内可同时发射并执行多条指令系统结构要求:处理机中配置多个功能部件和指令译码电
路,以及多个寄存器端口和总线,以便能实现同时执行多个操作
编译器支持
动态指令集调度记分牌
Tomasulo
A Two-Way Superscalar Pipeline
功能部件
译码电路
寄存器端口和总线Reg Reg Reg
Reg Reg Reg
2、Superpipeline
超流水线=深度流水线
在一个时钟周期内实现更细的流水段
137
3、超长指令字技术
静态指令集调度VLIW把多条能并行操作的指令组合成一条具有多个
操作码字段的超长指令(指令字长可达几百位),由这条超长指令控制VLIW机中多个独立工作的功能部件,由每一个操作码字段控制一个功能部件,相当于同时执行多条指令。
超长指令字(VLIW)技术和超标量技术都是采用多条指令在多个处理部件中并行处理的体系结构,在一个时钟周期内能流出多条指令。
138
VLIW datapath
PCInstruction
memory
4
Registers
Mux
Mux
ALU
Mux
Datamemory
Mux
40000040
Sign
extend Signextend
ALU Address
Writedata
注意:两个通路的不对称性
139
四种流水技术比较
Superscalar vs. VLIW
指令长度短动态控制硬件设计复杂编译器简单二进制兼容性好芯片功耗高芯片面积大芯片成本高需要多的寄存器
指令长度长静态控制译码、发射指令的硬件设计简单编译器复杂二进制兼容性差芯片功耗低芯片面积小芯片成本低需要更多的寄存器
动态指令集调度Pentium Pro Pentium II,III,IV, AMD Athlon, MIPS R10K R12K, Sun UltraSpac, PowerPC 603,G3,G4,G5,Alpha 21264
静态调度Itanium Transmeta: Crusoe
指令级并行V.S.数据级并行单指令多数据SIMD
SIMD Instructions
MD-technique
Multiple data operands per operation
奔腾MMX、 SSE、 GPU、DSP、银河、天河、神威
Vector instruction:
for (i=0, i++, i<64)
c[i] = a[i] + 5*b[i];
c = a + 5*b
Assembly:
set vl,64
ldv v1,0(r2)
mulvi v2,v1,5
ldv v1,0(r1)
addv v3,v1,v2
stv v3,0(r3)
问题与总结
146
CPU设计方法:ISA,数据通路,控制信号,状态机,测试与评估(功能、性能)
ISA的实现模式 单周期:指令周期(定长)由一个机器周期组成。
多周期:指令周期(变长)由多个机器周期组成。每个功能部件只在特定机器周期执行。
流水线:指令周期(变长)由多个机器周期(流水级)组成,每个功能部件完成不同指令的相同阶段的执行。
思考: 单周期和流水线的关系?
流水线中实现一个周期访存(取指,取数)的前提条件是什么?
流水线执行第一条指令时,IF在取指,其他段在做什么?
各流水段的控制信号何时生成与释放?
寻址方式如何实现的?哪些寻址方式适合流水线?
如果R-type指令也可访存,则应如何设计流水线?
MIPS能否采用“取指、译码、执行”三段流水线?
Stall原因与判断规则?如何实现stall?
小结
147
单周期、多周期、流水线
注意:
多周期和流水线指令周期都不定长,但流水线每个周期“流出”一条指令。
148
例:假设部件延迟MEM=2ns, R-Type ALU=2ns,Reg=1ns,其他部件没有延时。某程序编译生成100条指令,其中LW 20%,SW 20%,R-Type ALU 40%,BEQ 20%。采用MIPS的5级流水线,并假设LW互锁和分支延迟如下,其他无开销。有一半的LW执行后为R-Type ALU,因此需要互锁1个周期;分支延迟为1个周期,采用等待策略;求这段代码在单周期、多周期、流水线三种方式的性能对比。
思路:单周期:每个时钟周期=?每条指令需要多少周期?总共需要
多少周期?
多周期:每个时钟周期=?每条指令需要多少周期?总共需要多少周期? LW=? SW=? R-Type =? BEQ=?
流水线:每个时钟周期=? 无开销总共需要多少周期? LW互锁需要加多少?分支延迟需要加多少?
练习:单周期 vs. 多周期 vs.流水线
152
解答:设MEM=2ns,ALU和加法器=2ns,Reg=1ns,其他部件没有延时。单周期:周期为所有操作时间之和,8ns
• 执行100条指令所需的时间为8ns×100=800ns
多周期:周期按操作时间最长的阶段定义,2ns• LW-5个周期=10ns SW-4个周期=8ns
• ALU-4个周期=8ns 分支-3个周期=6ns
• 执行100条=10*20+8*20+8*40+6*20=800ns
流水线:周期按操作时间最长的阶段定义,2ns• 执行100条=10+99*2=208ns,加性能损失2ns*10+2ns*20=268ns
性能对比• 多周期=单周期=800ns
• 流水线性能=268ns,加速比=2.99
单周期实现 vs. 流水线性能
作业
思考理想流水线加速比=?IPC=?
为何单周期、多周期的控制信号不需要buffer,而流水线的控制信号需要buffer?
哪些情形可能造成流水线stall,有哪些解决方案?
影响流水线性能发挥的因素有哪些,可以采用哪些手段减小这些因素的影响?
指令流水线中在哪个阶段会产生什么相关?
为何MIPS只有I-type指令访存?
典型的流水线的多发射技术有哪些?
作业COD4: 4.12,4.13,4.16,4.18,4.20.1,4.20.2,4.21.1
中国科学技术大学计算机学院嵌入式系统实验室(西活科住物业对面)高效能智能计算实验室 (中科大苏州研究院)
主要研究方向: 基于分布式系统, GPU,FPGA的神经网络、图计算加速 人工智能和深度学习(寒武纪)芯片及智能计算机
课程问题、研究方向问题、实验室问题 欢迎大家邮件[email protected]
http://staff.ustc.edu.cn/~cswang
联系方式