Tomasulo算法与记分牌调度算法
一流水线的静态调度与动态调度
提高流水线的效率
指令流水线的执行方式会产生流水线的冲突和保护
1 对寄存器访问的竞争是影响流水线保护和延迟的主要原因。
如果出现要对某寄存器读取/写入的时候, 前一指令对该寄存器的写操作/读操作还未完成的情况,就会造成流水线保护和延迟
2 对存储器访问的竞争也是影响流水线保护和延迟的重要原因
3 指令缓冲队列也有可能造成流水线保护和延迟,
流水线的竞争
定义: 流水线竞争是流水线中造成下一条指令不能在指令时钟周期被执行的情况.
流水线竞争的后果----造成流水线停顿几个周期,从而降低流水线效率.
流水线竞争种类
结构竞争:资源冲突(不支持某些指令组合)
数据竞争:后续指令的执行依赖于前面指令的执行结果
控制竞争:因转移或修改PC引起的竞争
流水线的动态调度有许多优势
1 能调度在编译时不可能知道的竞争情况
2 符合程序执行的实际情况
3 具有更高的效率和准确性
4 简化编译程序设计
5 代码的移植性强
缺点就是控制硬件比较复杂
二 动态调度
静态调度的缺点
虽然可以通过旁路控制机构,编译技术调度指令序列,分开具有相关性的指令来使竞争数目和性能损失减小到最低程度。但是不可避免的数据相关是不可能完全消除的竞争还会存在。所以需要使用流水线的动态调度。
动态调度的一大优势就是: 能够在数据相关时,避免暂停流水线。
动态调度的重要点就是:流水线的乱序执行,指令的发射是乱序的,指令的完成也有可能是乱序的。
由于流水线允许多条指令在同一时刻执行 所以流水线结构需要改变,功能单元也需要改变了。
静态调度与动态调度:
静态调度:根据软件的行为特征进行优化来编译调度指令代码次序,主要依据程序未执行时的行为特征和统计数据进行的调度策略
动态调度:通过硬件在程序执行时重新安排代码的执行序列来减少竞争引起的流水线停顿时间
动态调度流水线具备以下功能:
(1)允许按序取多条指令和发射多条指令----取指(IF)流水级允许按顺序取多条指令进入单口暂存器(single-entry latch)或队列(queu