流水线(Pipeline)介绍
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
结构冲突(资源冲突):流水线中多条指令在同一 时钟周期内争用同一功能部件的现象。即因硬件资 源满足不了指令重叠执行的要求而发生的冲突。 常见的导致结构相关的原因:
功能部件不是完全流水或者资源不够用。
例如访存冲突
9
结构冒险
10
2.2 结构冒险的解决办法
MIPS指令集是为流水线设计的,在设计流水 线过程中能够很容易的避免结构冒险。 但是流水结构中只有一个存储器时,两条指 令同时在一个存储器中预取指令就会发生结 构冒险。
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
如图所示,加法指令后面的取字指令没有等到加法指令写 回R1后再执行,而是提前就获得了R1的数据,减少了等 待时间。
22
转发技术不能解决所有的数据冒险
5
采用相同的功能模块,指令顺序执行和按照流水线 技术执行,在时间上可以看出流水线指令的执行速 度提高了4倍。
6
流水线的基本作用
流水线增大了CPU的指令吞吐量—即单位时 间执行指令的条数,但是它未减少指令各自 的执行时间。实际上流水线技术要对流水线 附加一些控制,因而了增加开销,使单条指 令执行时间略有增加。吞吐量的增大意味着 程序运行的更快,总的执行时间变短,尽管 没有一条指令的执行变快。
流水线的描述:最常用的方法是时间-空间图
横坐标:表示时间,即各个任务在流水线中所
经过的时间 纵坐标:表示空间,即流水线的各个子过程, 也称为级、流水线深度(Stage)
3
流水线时间空间图
4
流水线技术应用到处理器中就是采用流水线 方式执行指令。一个MIPS指令包包含五个处 理步骤: 1.取指令周期(IF) 2.指令译码/读寄存器周期(ID) 3.执行操作/计算地址(EX) 4.从数据存储器中读取操作数(MEM) 5.将结果写回寄存器堆(WB)
15
2.4 数据冒险的解决办法
根据指令中读写访问的顺序,可以将数据冒 险分为三类。分别是: 写后读(RAW) 写后写 (WAW) 读后写 (WAR)
16
写后读冒险(RAW: Read After Write) 在 i 写入之前,j 先去读。j 会错误的获取旧 值。 这对应“真数据相关”,为了确保j可以得到 正确的i值,必须保持程序的顺序。
11
为消除资源冲突而插入的流水线气泡 (Bubble)
时间(时钟周期) 1 load M 2 Reg 3
ALU
4 M
5 Reg
6
7
8
ALU
指令 i+1
M
Reg
M
Reg
ALU
指令 i+2
M
Reg
M
Reg
暂
停
气泡
气泡
气泡
气泡
气泡
ALU
指令 i+3
M
Reg
M
12
解决办法二
设置相互独立的指令存储器和数据存储器或 设置相互独立的指令Cache和数据Cache。
插入阻塞对于流水线来说仍然是暂停了流水 线的执行。既然转发技术无法消除指令序列 中所包含的这种暂停,那么能否让编译器在 进行代码生成时就消除这些潜在的暂停呢? 实际上,编译器的确可以通过重新组织代码 顺序来消除这种暂停。通常称这种重新组织 代码顺序消除暂停的技术为 指令调度 (instruction scheduling)。 原理:相关不一定引起阻塞,只要隔开足够 远•在一个流水线上引起阻塞,在另一个流水 线上不一定引起阻塞,编译优化与机器有关
SUB Rd,Re, Rf SD Rd,D
IF ID 停 EX MEM WB
IF 停 ID EX MEM WB
27
调度后执行情况(采用了转发技术)
LD LD Rb,B Rc,C IF ID EX MEM WB IF ID EX MEM WB
LD
Re,E
IF ID EX MEM WB
IF ID EX MEM WB
7
2.流水线的冒险
尽管流水线可以带来处理器性能上的提高,但是不 是所有的指令就直接可以进行流水线操作,在指令 执行中的下一个周期中的下一条指令不能执行,这 种情况叫做冒险。有三类冒险:
1.结构冒险 2.数据冒险 3.控制冒险 流水线中的冒险会引起流水线停顿,部分指令就要延期执行。
8
2.1 结构冒险
14
时间(时钟周期) 1 DADD R1, R2, R3 IM 2 Reg 3 4 DM 5 Reg 6
ALU
ALU
DSUB 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
AND,OR操作不会暂停,但是DSUB,XOR指 令需要等待DADD在WB阶段写回数据后才 可以执行。
当一条指令试图读取一个由前一条装载指令读入的寄存器时, 就无法使用转发解决数据冒险问题了。
23
对于装载指令的存在,我们采用了插入阻塞 (气泡,)方法解决问题。增加一个冒险检 测单元,一旦发现装载指令后就在其他需要 这个结果的指令前插入阻塞。直到可以使用 转发技术或指令可以得到结果为止。
24
编译器调度(静态调度)
i: DSUB R1,R2,R3 j: DADD R4,R1,R3
17
写后写冲突(WAW: Write After Write) 在 i 写入之前,j 先写。最后写入的结果 i 是 错误的。 这对应“输出相关”,寄存器换名技术可以 消除 i: DSUB R1,R4,R3
j: DADD R1,R2,R3 k: DMUL R6,R1,R7
25
例1 请为下列表达式生成没有暂停的流水线 指令序列: a=b+c ; d=e-f ; 假设载入延迟为1个时钟周期。
两条ALU指令(ADD Ra, Rb,Rc 和 SUB Rd,Re, Rf)分别和两条Load指令 (LW Rc,c和LW Rf,f) 之间存在数据相关。为了保 证流水线正确执行调度前的 指令序列,必须在指令执行 过程中插入两个时钟周期的 暂停。但是考察调度后的指 令序列不难发现,由于流水 线允许转发,就不必在指令 执行过程中插入任何暂停周 期。
ADD Ra,Rb, Rc LD Rf,F SD Ra,A
IF ID EX MEM WB
IF ID EX MEM WB
SUB Rd,Re, Rf SD Rd,D
IF ID EX MEM WB
IF ID EX MEM WB
28
动态调度
有些信息在译码时难以确定,如是否发生异 常、访存操作需要多少周期等,静态调度就 不能完成。 动态调度:硬件会重新安排指令的执行顺序 以减少停顿并同时保持数据流和异常行为。 优点:有些相关编译无法检测、编译器更加 简单、程序性能对机器依赖少
Tomasulo算法小结
通过动态调度缓解流水线阻塞:例如减少CACHE 失效对性能的影响 保留站:重命名寄存器+缓存源操作数 •避免寄存器成为瓶颈 •避免WAW和WAR阻塞 •缺点: •硬件复杂性 •结果总线成为瓶颈,多条结果总线增加硬 件复杂度
39
流水线技术一直是提高处理器速度的最有效 技术之一。但目前的在相关处插入阻塞,转发技 术,编译器调度都是尽量分离相关问题的指令, 使他们不会导致冲突,从而减少暂停的影响。虽 然都会相应的显著减少数据相关的次数提高流水 效率,但也会不可避免的增加硬件复杂度和编译 器的复杂性。 而动态调度则可以以硬件的方式调整指令执 行顺序,使不相关的后续指令得以不受暂停的影 响而继续执行,可以在降低编译器复杂度的同时 处理一些编译阶段无法知道的相关,在出现数据 冒险是尽量避免出现流水暂停。
29
动态调度的思想
基本思想 :•把相关的解决尽量延迟到马上就会出错的时候 •前面指令的stall不影响后面指令继续前进 把译码分成两个阶段:发射和读操作数 •发射:指令译码,检查结构相关 •读操作数:检查操作数是否准备好,准备好就 读数,否则等待,当一条指令在读操作数阶段 等待时,后面指令的发射可以继续进行 •乱序执行: •指令进入是有序的 •执行可以乱序,只要没有相关就可执行,多条 指令同时执行 •结束可以乱序,也可以有序(主要是精确例外 的需要),乱序结束会导致WAR相关(静态 流水线中只有RAW和WAW相关) 30
40
2.5 控制冒险
也叫分支冒险,指因为程序的执行方向可能 被改变而引起的流水线暂停叫做控制冒险。 执行分支指令,程序计数器PC值两种情况:
20
在原始的数据通路中用流水线寄存器将流水线各部分分 开,这些寄存器可以存储所有穿过它的数据,寄存器的宽度 都足够大。目前流行的有128位,97位,64位。 有了流水线寄存器后,转发就变的简单了。在指令执行 的五个阶段中间各加了个寄存器记录流过的数据。
21
时间(时钟周期) 1 ADD R1,R2,R3 IM 2 Reg 3 4 DM 5 Reg 6
i: DSUB R4,R1,R3 j: DADD R1,R2,R3 k: DMUL R6,R1,R7
Can’t happen in MIPS 5 stage pipeline because: - All instructions take 5 stages, and - Reads are always in stage 2, and 读后读RAR不是数据冒险, 读操作不改变值 19 - Writes are always in stage 5
转发(旁路)方式解决数据冒险
形如:add $s0, $t0, $t0 sub $t2, $s0 $t3,减法指令要等到加 法指令写回寄存器堆时才可以执行指令,浪 费了时间。转发技术:在加法指令在ALU运 算一结束就将结果送给减法指令的输入项。 这样从内部资源中直接提前得到缺少的运算 项的过程叫做转发。
26
调度前执行情况(采用了转发技术)
LD Rb,B IF ID
LD
Rc,C
IF
EX ME WB M ID EX MEM WB IF ID 停 EX MEM WB IF 停 ID EX MEM WB
源自文库
ADD Ra,Rb, Rc SD Ra,A
LD
LD
Re,E
Rf,F
IF ID EX MEM WB
IF ID EX MEM WB
处理器流水线相 关技术
报告人:Hardy
1
流水线技术
1.流水线的概念 2.流水线的冒险和冒险的解决办法 3.多发射处理器
2
1.流水线的概念
流水线技术:
把一个重复的过程分解为若干个子过程,每个子过 程由专门的功能部件来实现。将多个处理过程在时 间上错开,依次通过各功能段,这样,每个子过程 就可以与其他子过程并行进行。
ID 段 Reg EX 段 MEM 段 DM WB 段 Reg
IF 段 IM
流水线寄存器
13
ALU
2.3 数据冒险
一条指令必须等到另一条指令的完成而造成 的流水线暂停的情况叫做数据冒险。形如: add $s0, $t0, $t0 sub $t2, $s0 $t3 加法指令需要到WB阶段后才写回结果,减法 指令此时才可以继续执行。在不任何干预的 情况下,流水线白白浪费了三个时钟周期。
Tomasulo算法
IBM 360/91中首次使用,由Robert Tomasulo提出 的一种支持乱序执行的高级方案。它会跟踪指令的 操作数何时可用,将RAW冒险降至最低,并在硬件 中引入寄存器重命名功能,将WAW和WAR冒险降 至最低。 现代处理器使用了该算法的各种变体,但是核心都 是: 1.跟踪指令相关以允许在操作数可用时立即执行 指令。 2.重命名寄存器以避免WAR和WAW冒险。 31
32
Tomasulo算法的流水阶段
1.发射:把操作队列的指令根据操作类型送到 保留站(如果保留站有空),发射过程中读 寄存器的值和结果状态域 2.执行:如果所需的操作数都准备好,则执行, 否则侦听结果总线并接收结果总线的值。
3.写回:把结果送到结果总线,释放保留站
33
34
35
36
37
38
Can’t happen in MIPS 5 stage pipeline because: - All instructions take 5 stages, and - Writes are always in stage 5
18
读后写冲突(WAR: Write After Read)
在 i 读之前,j 先写。i 读出的内容是错误的! 这对应“反相关” ,寄存器换名技术可以消 除