3-2 流水线技术

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


功能部件不是完全流水或者资源不够用。 例如访存冲突
结构冲突举例:访存冲突
例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

采用延迟转移技术。
EX
MEM
WB

IF
3、控制冲突

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

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


处理分支指令最简单的方法:“冻结”或者 “排空”流水线。
简单处理分支指令:分支成功的情况
i:
j:
ADD
SUB
F2,F6,F4
F6,F0,F8

输出相关:如果指令j和指令i写相同的名, 则称指令i和j发生了输出相关。
i: j: ADD SUB F6,F2,F4 F6,F0,F8
名相关的特点及解决办法

特点:

名相关的两条指令之间并没有数据的传送。 如果一条指令中的名改变了,并不影响另外一条 指令的执行。 通过改变指令中操作数的名来消除名相关。 对寄存器操作数进行换名称为寄存器换名。 既可用编译器静态实现,也可用硬件动态完成。
有些指令的写结果操作提前了,而且有些指令 的读操作滞后了。

指令被重新排序了。
读后写冲突在前述5段流水线中不会发生。读操 作(在ID段)在写结果操作(在WB段)之前。
(2)数据相关冲突的解决办法
1 i: IF i+1: 2 ID IF 3 EX ID 4 5 6 7 8 9
MEM WB EX MEM
计算机系统结构
张长明
hdjsjxtjg@126.com ncepubd
3.4 流水线的相关与冲突
3.4.1 一条经典的5段流水线
IF ID EX MEM WB

每一个流水段的时间延迟为一个周期;

在各段之间设有锁存器(流水寄存器)。
各功能段对于不同指令类型执行的操作
指令类型 功能段
运算类指令
取指令
ALU
2、数据相关冲突

当相关的指令靠得足够近时,它们在流水线中
的重叠执行或者重新排序会改变指令读/写操 作数的顺序,从而导致的程序执行逻辑上错误
的现象称为数据相关冲突。
举例:
ADD SUB XOR AND OR R1,R2,R3 R4,R1,R5 R6,R1,R7 R8,R1,R9 R10,R1,R11 1 i: IF i+1: i+2: i+3: i+4: 2 ID IF 3 EX ID IF 4 5
3.4.2 相关
2、名相关

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


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

反相关:如果指令j写的名与指令i读的名相 同,则称指令i和j发生了反相关。如
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
调度后的代码
时间(时钟周期) 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
采用定向技术后的流水线数据通路
LOAD/STORE
取指令
转移类指令
取指令
IF
ID
EX
译码,读寄存器 译码,读寄存器 译码,读寄存器
执行运算 计算存储器有效 计算转移目标地 地址 址,设置条件码 读存储器/写存 若条件成立,转 储器 移目标地址送PC 空操作
MEM
空操作
WB
计算结果写回寄 读入数据写入寄 存器 存器
3.4.2 相关

解决办法:换名技术

例如:考虑下述代码 DIV F2,F6,F4 ADD
SUB
F6,F0,F12
F8,F6,F14
进行寄存器换名(F6换成S)后,变成: DIV F2,F6,F4
ADD
SUB
S,F0,F12
F8,S,F14
3、控制相关

控制相关是指由分支指令引起的相关。

为了保证程序应有的执行顺序,必须严格按控制 相关确定的顺序执行。
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
写后读冲突(RAW):在 i 写入之前,j 先去读。
j 读出的内容是错误的。这是最常见的一种数据
冲突,它对应于真数据相关。
数据相关冲突的3种类型
写后写冲突(WAW):在 i 写入之前,j 先写。最
后写入的结果是i的。错误!这种冲突对应于输出 相关。 写后写冲突仅发生在这样的流水线中:

WB
i+2: i+3: i+4:

IF
wk.baidu.comID 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
依靠编译器解决数据冲突

让编译器重新组织指令顺序来消除冲突,这种技术称 为指令调度或流水线调度。 例如:表达式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

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

相关有3种类型

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

对于两条指令i(在前,下同)和j(在后, 下同),如果下述条件之一成立,则称指 令j与指令i数据相关。
分支指令 分支目标指令 分支目标指令+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之前进入流水线, 可能发生的数据冲突有:

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


与一条分支指令控制相关的指令不能被移到 该分支之前,否则这些指令就不受该分支控 制了。 如果一条指令与某分支指令不存在控制相关, 就不能把该指令移到该分支之后。
if p1 {
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%!
S1; }; S; if p2 { S2; };
3.4.3 流水线冲突

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


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

结构冲突(资源冲突):流水线中多条指令在 同一时钟周期内争用同一功能部件的现象。即 因硬件资源满足不了指令重叠执行的要求而发 生的冲突。 常见的导致结构相关的原因:
ADD Ra,Rb,Rc
SUB Rd,Re,Rf
SD
Rd,D
IF 停 ID EX MEM WB
调度后执行情况(采用了定向技术)
LD LD LD LD SD Rb,B Rc,C Re,E Rf,F Ra,A 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
流水线中不只一个段可以进行写操作。或者 当先前某条指令停顿时,允许其后续指令继续 前进。
前面介绍的5段流水线不会发生写后写冲突。只在WB 段写寄存器。
数据相关冲突的3种类型
读后写冲突(WAR): 在 i 读之前,j 先写。
i 读出的内容是错误的!由反相关引起。 这种冲突仅发生在这样的情况下:

减少分支延迟的措施

尽早判别转移是否发生,尽早生成转移目标地址。 预取转移成功或不成功两个控制方向上的目标指令。 转移预测技术(提高转移方向的猜准率)。
动态转移预测状态图
减少分支延迟的措施

尽早判别转移是否发生,尽早生成转移目标地址。 预取转移成功或不成功两个控制方向上的目标指令。 转移预测技术(提高转移方向的猜准率)。
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
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

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

数据相关。
例如:下面这一段代码存在数据相关。
Loop: LD F0,0(R1) // F0为数组元素
ADD
SD ADD BNE
F4,F0,F2
F4,0(R1) R1,R1,-8 R1,R2,Loop
// 加上F2中的值
// 保存结果 // 数组指针递减8个字节 // 如果R1≠R2,则分支
相关文档
最新文档