流水线(Pipeline)介绍.pptVIP

  • 251
  • 0
  • 约6.28千字
  • 约 51页
  • 2017-06-08 发布于湖北
  • 举报
流水线(Pipeline)介绍

处理器流水线相关技术 报告人:Hardy 流水线技术 1.流水线的概念 2.流水线的冒险和冒险的解决办法 3.多发射处理器 流水线技术应用到处理器中就是采用流水线方式执行指令。一个MIPS指令包包含五个处理步骤: 1.取指令周期(IF) 2.指令译码/读寄存器周期(ID) 3.执行操作/计算地址(EX) 4.从数据存储器中读取操作数(MEM) 5.将结果写回寄存器堆(WB) 流水线的基本作用 流水线增大了CPU的指令吞吐量—即单位时间执行指令的条数,但是它未减少指令各自的执行时间。实际上流水线技术要对流水线附加一些控制,因而了增加开销,使单条指令执行时间略有增加。吞吐量的增大意味着程序运行的更快,总的执行时间变短,尽管没有一条指令的执行变快。 2.流水线的冒险 尽管流水线可以带来处理器性能上的提高,但是不是所有的指令就直接可以进行流水线操作,在指令执行中的下一个周期中的下一条指令不能执行,这种情况叫做冒险。有三类冒险: 1.结构冒险 2.数据冒险 3.控制冒险 流水线中的冒险会引起流水线停顿,部分指令就要延期执行。 2.1 结构冒险 结构冲突(资源冲突):流水线中多条指令在同一时钟周期内争用同一功能部件的现象。即因硬件资源满足不了指令重叠执行的要求而发生的冲突。 常见的导致结构相关的原因: 功能部件不是完全流水或者资源不够用。 例如访存冲突 2.2 结构冒险的解决办法 MIPS指令集是为流水线设计的,在设计流水线过程中能够很容易的避免结构冒险。 但是流水结构中只有一个存储器时,两条指令同时在一个存储器中预取指令就会发生结构冒险。 为消除资源冲突而插入的流水线气泡(Bubble) 2.3 数据冒险 一条指令必须等到另一条指令的完成而造成的流水线暂停的情况叫做数据冒险。形如: add $s0, $t0, $t0 sub $t2, $s0 $t3 加法指令需要到WB阶段后才写回结果,减法指令此时才可以继续执行。在不任何干预的情况下,流水线白白浪费了三个时钟周期。 2.4 数据冒险的解决办法 根据指令中读写访问的顺序,可以将数据冒险分为三类。分别是: 写后读(RAW) 写后写 (WAW) 读后写 (WAR) 转发(旁路)方式解决数据冒险 形如:add $s0, $t0, $t0 sub $t2, $s0 $t3,减法指令要等到加法指令写回寄存器堆时才可以执行指令,浪费了时间。转发技术:在加法指令在ALU运算一结束就将结果送给减法指令的输入项。这样从内部资源中直接提前得到缺少的运算项的过程叫做转发。 转发技术不能解决所有的数据冒险 对于装载指令的存在,我们采用了插入阻塞(气泡,)方法解决问题。增加一个冒险检测单元,一旦发现装载指令后就在其他需要这个结果的指令前插入阻塞。直到可以使用转发技术或指令可以得到结果为止。 编译器调度(静态调度) 插入阻塞对于流水线来说仍然是暂停了流水线的执行。既然转发技术无法消除指令序列中所包含的这种暂停,那么能否让编译器在进行代码生成时就消除这些潜在的暂停呢? 实际上,编译器的确可以通过重新组织代码顺序来消除这种暂停。通常称这种重新组织代码顺序消除暂停的技术为 指令调度(instruction scheduling)。 原理:相关不一定引起阻塞,只要隔开足够远?在一个流水线上引起阻塞,在另一个流水线上不一定引起阻塞,编译优化与机器有关 例1 请为下列表达式生成没有暂停的流水线 指令序列:  a=b+c ;  d=e-f ; 假设载入延迟为1个时钟周期。 动态调度 有些信息在译码时难以确定,如是否发生异常、访存操作需要多少周期等,静态调度就不能完成。 动态调度:硬件会重新安排指令的执行顺序以减少停顿并同时保持数据流和异常行为。 优点:有些相关编译无法检测、编译器更加简单、程序性能对机器依赖少 动态调度的思想 基本思想 :?把相关的解决尽量延迟到马上就会出错的时候 ?前面指令的stall不影响后面指令继续前进 把译码分成两个阶段:发射和读操作数 ?发射:指令译码,检查结构相关 ?读操作数:检查操作数是否准备好,准备好就 读数,否则等待,当一条指令在读操作数阶段 等待时,后面指令的发射可以继续进行 ?乱序执行:

文档评论(0)

1亿VIP精品文档

相关文档