18. 引退(PPro,PII和PIII)

优质
小牛编辑
124浏览
2023-12-01

引退是微码使用的临时寄存器数据拷回永久寄存器(EAX,EBX等)的过程。

在ROB中,一条已经执行过的微码被标记为准备引退。

引退站可以在一个时钟周期处理3条微码。 这不成问题,因为在RAT中吞吐量已经被限制为一个时钟3条微码。

但有两个原因会使引退也成为瓶颈: 第一,指令必须有序引退。 如果一条微码被乱序执行了,那么在它前面的全部微码还没引退之前它不能引退。

第二个限制是被确认为发生的跳转指令必须在引退站的三个槽的第一个槽中引退。

就像一条指令只适合解码器D0,解码器D1、D2只能闲置一样,如果一条要引退的微码是一个被确认为发生的跳转,那么引退站的后两个槽只能闲置。

因此假如你有一个小循环,那么其中的微码数不能被3整除很重要。

任何微码在引退之前都呆在乱序缓存中(ROB)。 ROB可以容纳40条微码。

这就限制了在除法等慢指令的大延迟期间可以执行的指令数。

在除法完成之前,ROB会大量充塞执行过后等待引退的微码,而只有在除法完成并引退后,那些后来并行的微码才开始引退,因为引退是有序进行的。

在预测分支"投机"执行(第22章)的情况下,在确认分支预测正确以前那些"投机"执行的微码不能引退。

如果发现预测结果是错误的,那么"投机"执行过的微码不引退了,全被废弃。

这些指令不能被"投机"执行:内存写,IN,OUT和序列化的指令。