发射(Issue)

Issue将符合一定条件的指令从发射队列(Issue Queue)中选出来,并送到FU中执行。

重命名之后的指令被写到重排序缓存(ROB)的同时,也会被写到发射队列中,此时已经到达了超标量流水线的发射(issue)阶段,而发射队列正是这个流水段的关键部件。发射队列也可以叫做保留站(Reservation Station, RS)。

发射队列按照一定的规则,选择哪些源操作数都已经准备好的指令,将其送到FU中执行,这个过程称为发射:对于简单的顺序执行(in-order)的处理器,指令按照程序中原始的顺序写到发射队列中,此时发射队列就相当于一个FIFO,只有最旧的那条指令的源操作数都准备好了,这条指令才会被发射,而这条指令如果没有发射,它后面的指令也无法继续发射。对于乱序执行(out-of-order)的超标量处理器来说,只有少数指令,例如store指令或分支指令,才会使用这种顺序执行的方法,而对于大多数的指令,都是按照乱序的方式进行发射。

指令进入发射队列后,只要发射队列中的一条指令的操作数都准备好了,且满足了发射的条件,就可以送到相应的FU中去执行。因此,发射队列的作用就是使用硬件保存一定数量的指令,然后从这些指令中找出可以执行的指令,而不管指令之间原始的顺序,这就是指令的乱序执行,正是由于发射队列在这个过程中起到了关键作用,因此它设计的好坏直接决定着处理器能够获得的并行度。

从发射阶段的作用可以看出,它是处理器从顺序执行转到乱序执行的分界线,在发射阶段之前的所有指令都在流水线中按照程序中指定的顺序流动,而在发射阶段之后,所有的指令都是乱序执行的,知道流水线最后的提交(Commit)阶段,才利用重排序缓存(ROB)将这些指令又拉回到程序中指定的原始顺序。

在一般的CISC处理器中,在处理器内部将一条CISC指令转化为几条RISC指令,而存储到发射队列中的是RISC指令。

posted on 2014-11-28 00:03  阿加  阅读(980)  评论(0)    收藏  举报

导航