ISSUE:将符合一定条件的指令从发射队列(IssueQueue)中选出来,并送到FU中执行的过程;
- ISSUE QUEUE也称之为reservation station, 其按照一定的规则,选择那些源操作数都已经准备好的指令,将其送到FU中执行,这个过程称为发射;
- IQ的作用,就是使用硬件,保存一定数量的指令,然后从这些指令中,找到可以执行的指令,而不用管指令之间的顺序;
- 发射阶段是从顺序执行转到乱序执行的分界线,在发射阶段之前的所有指令都在流水线中按照程序中指定的顺序流动,而在发射阶段之后,所有的指令都是乱序执行的,直到流水线最后的提交(Commit)阶段,才利用重排序缓存(ROB)将这些指令又拉回到程序中指定的原始顺序
对于乱序执行(out-of-order)的超标量处理器来说,只有少数指令,例如store指令或分支指令,才会使用顺序执行的方法,而对于大多数的指令,都是按照乱序的方式进行发射。
乱序发射:
指令到了发射队列中之后,就不会再按照程序中指定的顺序在处理器中流动,只要发射队列中的一条指令的操作数都准备好了,且满足了发射的条件(具体的条件将在本章进行介绍),就可以送到相应的FU中去执行。
上述的执行过程,可以总结成如下几点:
- 发射队列(Issue Queue),用来存储已经被寄存器重命名,但是没有被送到FU 执行的指令,通常也被称为保留站(Reservation Station);
- 分配(Allocation)电路,用来从发射队列中找到空闲的空间,将寄存器重命名之后的指令存储到其中;
- 选择(Select)电路,也称为仲裁(Arbiter)电路,如果在发射队列中存在多条指令的操作数都已经准备好了,那么这个电路会按照一定的规则,从其中找出最合适的指令,送到FU中去执行,这部分电路是发射阶段比较关键的部分,会直接影响整个处理器的执行效率;
- 唤醒(Wake-up)电路,当一条指令经过 FU 执行而得到结果数据时,会将其通知给发射队列中所有等待这个数据的指令,这些指令中对应的源寄存器就会被设置为有效的状态,这个过程就是唤醒。如果发射队列中一条指令的所有源操作数都有效了,则这个指令就处于准备好(ready)的状态,可以向选择电路发出申请。