一. 流水线
1. 更深的流水线
- 流水线的级数越多,意味着流水线被切得越细,每一级流水线内容纳的硬件逻辑便越少,意味能够运行到更高的主频。
- 由于每一级流水线都由寄存器组成,更多的流水线级数要消耗更多的寄存器,以及更多的面积开销。这是流水线加深的负面意义。
- 由于每一级流水线需要进行握手,流水线最后一级的反压信号可能会一直串扰到最前一级造成严重的时序问题,需要使用 些比较高级的技巧来解决此类反压时序问题。
- 预测失败,需要将所有预取的错误指令流全部丢弃掉,重新取正确的指令流,这个过程叫作“流水线冲刷( Pipeline Flush )”。
2. 乱序
关于处理器的乱序问题,这里是有关于Tomasulo算法的问题,以我目前的理解
保留站:数据的源操作数未准备好的时候,在保留站等待,当准备好就开始执行。
ROB:ROB保证了乱序执行的问题,实际的乱序执行,并不是指令乱序结束,是执行的时候,即EX段是乱序的,但最后的WB还是通过ROB保证了顺序。
3. 数据冲突
三种数据冲突为WAW,WAR,RAW,关于数据冲突解决的方法依然是Tomasulo算法。
RAW:
是真的数据相关,必须在前一个数据计算后才能进行使用,此处使用“动态调度”的方法来解决
- 一方面采用数据旁路传播(Data Bypass and Forward )技术,尽可能让前序指令的计算结果更快地旁路传播给后序相关指令的操作数。
- 另一方面尽可能地让后序相关指令在等待的过程中不阻塞流水线,而让其他无关的指令继续顺利执行。
- 早期的 Tomasulo 算法中通过保留站可以达到这两方面的功效,但是保留站由于保存了操作数,无法做到很大的深度(否则面积和时序的开销巨大〉。
- 最新的高性能处理器普遍采用在每个运算单元前配置乱序发射队列 Issue Queue) 的方式,发射队列仅追踪 RAW 相关性,而并不存放操作数,因此可以做到很深(譬16 个表项〉。在发射队列中的指令一旦相关性解除之后,再从发射队列中发射出来读取物理寄存器组(Physical Registe