本文主要是介绍唤醒阶段的推测唤醒(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Replay queue based replay
在这种方法中,指令被仲裁电路选中之后,会马上离开发射队列,但是它并不会消失,而是进入另外一个部件 Replay Queue(RQ)。
- 由于指令被仲裁电路选中之后,会马上离开发射队列,所以这种方法大大减轻了对发射队列的压力,提高了它的利用效率,这些离开的指令会进入到RQ中。
- 当一条指令被验证为执行正确时,例如当一条指令顺利地离开流水线的时候(也就是退休的时候),它就可以离开RQ,使用这种方法可以支持:
- 由于load指令的D-Cache缺失引起的replay,
- 也可以支持由于store/load违例、load/load违例等引起的replay。
- 举例来说,当发现load指令的D-Cache缺失时,除了将和它相关的指令从流水线中抹掉,还需要将这些指令重新在RQ中唤醒,并向仲裁电路发出申请,而且它们相比于发射队列中的指令有着更高的优先级,这样可以将那些需要replay的指令重新送入到FU中执行。
- 一般情况下,从流水线的Select阶段到执行阶段(Execute)需要的周期数越多(称这个时间为S-E的时间),需要replay的指令个数也就越多;
- data capture的发射队列,S->E需要的周期数较少,可以使用issued queue based replay的方式;
- non-data-capture的发射队列,S->E需要的周期数较多,可以使用replay queue based replay的方式;
- 但是RQ需要的容量可能会很大,由于RQ也要参与仲裁和唤醒的过程,所以过大的RQ也会对处理器的速度产生负面的影响。
这篇关于唤醒阶段的推测唤醒(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!