当前位置:文档之家› 3-2 流水线技术

3-2 流水线技术


IF
ID
IF
EX
MEM
WB
IF ID IF EX ID IF MEM EX ID IF WB MEM EX ID WB MEM EX
stall stall
3、控制冲突

由分支指令引起的延迟称为分支延迟。 分支指令在目标代码中出现的频度很高,性能 损失很大。

据统计,每3~4条指令就有一条是分支指令。 假设:分支指令出现的频度是30%, 流水线理想 CPI=1, 那么:流水线的实际 CPI = 1.9。系统性能损失将 近50%!
分支指令 分支目标指令 分支目标指令+1 分支目标指令+2 分支目标指令+3 IF ID IF EX MEM WB IF ID IF EX ID IF MEM EX ID IF WB MEM EX ID WB MEM EX
stall stall
简单处理分支指令:分支失败的情况
分支指令
分支后继指令 分支后继指令+1 分支后继指令+2 分支后继指令+3
将计算结果写入R1
6
7
8
9
MEM WB EX MEM ID IF EX ID IF
WB MEM WB EX MEM WB ID EX MEM
读R1
WB
(1)数据相关冲突的3种类型

根据指令读访问和写访问的顺序,可以将数据 冲突分为3种类型: 考虑两条指令i和j ,且i在j之前进入流水线, 可能发生的数据冲突有:
写后读冲突(RAW):在 i 写入之前,j 先去读。
j 读出的内容是错误的。这是最常见的一种数据
冲突,它对应于真数据相关。
数据相关冲突的3种类型
写后写冲突(WAW):在 i 写入之前,j 先写。最
后写入的结果是i的。错误!这种冲突对应于输出 相关。 写后写冲突仅发生在这样的流水线中:

WB
i+2: i+3: i+4:
IF
ID
停顿
EX IF
MEM ID IF
WB EX ID
MEM WB EX MEM
WB
解决办法二

设置相互独立的指令存储器和数据存储器或 设置相互独立的指令Cache和数据Cache。
ID 段 Reg EX 段 MEM 段 DM WB 段 Reg
IF 段 IM
流水线寄存器
举例:请为下列表达式生成没有暂停的指令序列: A=B+C ; D=E-F ;
调度前的代码
LD LD ADD SD LD LD SUB SD Rb,B Rc,C Ra,Rb,Rc Ra,A Re,E Rf,F Rd,Re,Rf Rd,D LD LD LD ADD LD SD SUB SD
调度后的代码
Rb,B Rc,C Re,E Ra,Rb,Rc Rf,F Ra,A Rd,Re,Rf Rd,D
调度前执行情况(采用了定向技术)
LD LD SD LD LD Rb,B Rc,C Ra,A Re,E Rf,F IF ID EX MEM WB IF ID EX MEM WB IF ID 停 EX MEM WB IF 停 ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID 停 EX MEM WB
ADD Ra,Rb,Rc
SUB Rd,Re,Rf
SD
Rd,D
IF ID EX MEM WB
3、控制冲突

控制冲突 :指因为程序的执行方向可能被改 变而引起的流水线障碍。
BNEZ NEXT1:SUB ··· NEXT2:AND ···
BNEZ R13,NEXT2 IF ID
R13,NEXT2 R10,R11,R12 R10,R11,R12
WB
i+2: i+3: i+4:
IF
访存
ID IF
EX ID IF
MEM WB EX MEM WB ID EX MEM
WB
解决办法一

插入暂停周期,即停顿一拍流水线。通常是将 后一条指令停顿一拍后再启动。
1 2 ID IF 3 EX ID 4 5 6 7 8 9
i: IF i+1:
MEM WB EX MEM
依靠编译器解决数据冲突

让编译器重新组织指令顺序来消除冲突,这种技术称 为指令调度或流水线调度。 例如:表达式A=B+C计算过程
Rb,B IF ID EX MEM WB
LD
LD
Rc,C
IF
ID
IF
EX
ID IF
MEM
停顿 停顿
WB
EX ID MEM EX WB MEM WB
ADD Ra,Rb,Rc SD Ra ,A
时间(时钟周期) 1 ADD R1,R2,R3 IM 2 Reg 3 4 DM 5 Reg 6
ALU
ALU
SUB R4,R1,R5
IM
Reg
DM
Reg
ALU
XOR R6,R1,R7
IM
Reg
DM
ALU
AND R8,R1,R9
IM
Reg
OR R10,R1,R11
IM
Reg
采用定向技术后的流水线数据通路
WB
i+2: i+3: i+4:

IF
ID IF
EX ID IF
MEM WB EX MEM WB ID EX MEM
WB
后推法(停顿后继指令的执行) 通过定向技术解决写后读冲突 依靠编译器解决数据冲突
定向技术

定向技术也称为旁路技术、相关专用通路技术

关键思想:在某条指令产生计算结果之前,其他 指令并不真正立即需要该计算结果,如果能够将 该计算结果从其产生的地方直接送到其他指令需 要它的地方,那么就可以避免停顿。 i: IF i+1: i+2: i+3: i+4: ID IF EX MEM WB ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB
LOAD/STORE
取指令
转移类指令
取指令
IF
ID
EX
译码,读寄存器 译码,读寄存器 译码,读寄存器
执行运算 计算存储器有效 计算转移目标地 地址 址,设置条件码 读存储器/写存 若条件成立,转 储器 移目标地址送PC 空操作
MEM
空操作
WB
计算结果写回寄 读入数据写入寄 存器 存器
3.4.2 相关
3.4.2 相关
2、名相关

名:指令所访问的寄存器或存储器单元的 名称。 名相关:如果两条指令使用相同的名,但 是它们之间并没有数据流动,则称这两条 指令存在名相关。 名相关有两种:反相关和输出相关。


指令j与指令i之间的两种名相关

反相关:如果指令j写的名与指令i读的名相 同,则称指令i和j发生了反相关。如

相关:两条指令之间存在某种依赖关系。 如果两条指令相关,则它们就有可能不能 在流水线中重叠执行或者只能部分重叠执行。

相关有3种类型

数据相关(也称真数据相关)
名相关 控制相关
3.4.2 相关
1、数据相关


对于两条指令i(在前,下同)和j(在后, 下同),如果下述条件之一成立,则称指 令j与指令i数据相关。
EX
MEM
WB

IF
3、控制冲突

执行分支指令的结果有两种:

分支成功:PC值改变为分支转移的目标地址。在 条件判定和转移地址计算都完成后,才改变PC值。 不成功或者失败:PC的值保持正常递增,指向顺 序的下一条指令。


处理分支指令最简单的方法:“冻结”或者 “排空”流水线。
简单处理分支指令:分支成功的情况


功能部件不是完全流水或者资源不够用。 例如访存冲突
结构冲突举例:访存冲突
例1: ··· i: LOAD i+1: ADD i+2: SUB i+3: AND i+4: OR ··· 1 i: IF i+1: R1, X R2, R3, R4 R5, R6, R7 R8, R9, R10 R11,R12,R13 2 ID IF 3 EX ID 4访存 5 MEM WB EX MEM 6 7 8 9
S1; }; S; if p2 { S2; };
3.4.3 流水线冲突

流水线冲突是指对于具体的流水线来说,由于 相关的存在,使得指令流中的下一条指令不能 在指定的时钟周期执行。 流水线冲突有3种类型:


结构冲突 数据冲突 控制冲突
1、结构冲突

结构冲突(资源冲突):流水线中多条指令在 同一时钟周期内争用同一功能部件的现象。即 因硬件资源满足不了指令重叠执行的要求而发 生的冲突。 常见的导致结构相关的原因:

典型的程序结构—“if-then”结构
if p1 { S1; };
S; if p2 {
S2; };
控制相关带来了以下两个限制:


与一条分支指令控制相关的指令不能被移到 该分支之前,否则这些指令就不受该分支控 制了。 如果一条指令与某分支指令不存在控制相关, 就不能把该指令移到该分支之后。
if p1 {

指令j使用指令i产生的结果;
指令j与指令k数据相关,而指令k又与指令i

数据相关。
例如:下面这一段代码存在数据相关。
Loop: LD F0,0(R1) // F0为数组元素
ADD
相关主题