动态流水线
动态流水线
编译器静态调度

循环展开技术
会造成代码膨胀,可以减少转移指令执行的次数,可以通过换位置消除一定的相关
硬件动态调度
动态调度基本思想

名字相关:

解决方法:
- 每个功能部件的输入端有一些寄存器
- 每个寄存器(包括功能部件输入端的寄存器以及通用寄存器)都记录一个功能部件号,指定它当前接收哪个功能部件的值
- 每个功能部件的输出接到每个功能部件的输入
有了上述功能,WAR和WAW相关不用阻塞
Tomasulo算法
保留站:是将有序执行变为乱序执行的地方。
ROB:是将无序变成有序的地方,保证乱序执行有序退出以实现精确例外。
精确例外

如何实现:
- 实现精确例外处理的一个办法是把后面指令对机器状态的修改延迟到前面指令都已经执行完 ,有些指令在EX阶段也修改机器状态,如运算指令修改结果状态
- 在执行阶段停止流水线会影响后面的指令执行可以用一些缓冲器来临时保存执行结果,当前面所有指令执行完后, 再把保存在缓冲器中的结果写回到寄存器或存储器
- 在流水线修改机器状态时(在执行或写回阶段)写到缓冲器增加提交(Commit)阶段,把缓冲器的内容写回到寄存器或存储器
- 提交阶段只有前面指令都结束后才能进行
- 有序提交:乱序执行,有序结束
- 所用的缓冲器通常被称为Reorder Buffer(ROB) (在猜测执行中也用上述机制 :都是在某些情况不确定的情况下先执行,但留有反悔的余地)

Tomasulo算法的流水阶段(带精确例外)

Tomasulo过程
DIV指令需要用到寄存器F0,结果要写回ROB的1号项,需要的操作数都已经准备好了不用等待
动态流水小结
核心:有序进入、乱序执行(允许超车)、有序结束
主要数据结构
- 保留站(发射队列)把有序变成乱序,临时存指令
- 重命名寄存器用于保存未提交的临时结果,临时存数据
- ROB把乱序重新变成有序
乱序的能力和有关队列大小紧密相关
- 现代高性能CPU一般都有100条以上指令在流水线中乱序执行