现在的位置: 首页 > 综合 > 正文

《大话处理器》连载——微架构(17) 指令调度

2018年05月07日 ⁄ 综合 ⁄ 共 900字 ⁄ 字号 评论关闭

       在前面乱序设置陷阱的利子中,如果没有那个聪明的士兵,乱序也就无从谈起。同样,处理器的乱序执行内核也需要一个调度器,分析指令间中的相关性,分析指令什么时候能开始执行。

       指令什么时候能开始执行呢?

       对于一条指令来说,它有操作码和操作数,操作码描述指令要做什么,处理器会安排一个功能单元(function unit)去执行它。操作数描述指令要处理什么数据,经过寄存器重命名后,目的寄存器总是新的,因此只需要关注源操作数是否准备好即可。所以,指令能否开始执行,依赖于2个条件:

1.       是否有空闲的功能单元去执行这条指令

2.       该指令的源操作数是否已经准备好

       只要满足这2条要求,指令就可以去执行,而不需要等待前面的指令完成。这样处理器就完成了乱序调度以及并行调度。

       以前面经过寄存器重命名的指令为例,

 

序号

指令

源操作数依赖性描述

执行顺序

1

add F5, F1, F2  

假设F1、F2已准备好

1

2

add F6, F5, F2

F5需要依赖指令1

2

3

add F7, F1, F5

F5需要依赖指令1

2

4

add F8, F1, F6

F6需要依赖指令2

3

5

add F9, F8, F5

F5需要依赖指令1

F8需要依赖指令4

4

 

       处理器会记录指令源操作数的准备状态,当指令1完成后,处理器会通知所有依赖F5的指令,F5已经准备好了,指令2需要的2个源操作数F5和F2都已准备好,它就可以被发送到指令的执行队列中去执行。同样,指令3也可以准备执行,如果处理器中有多个加法单元,指令2和指令3就可以同时执行。指令2完成后,F6也准备好了,指令4就可以去执行,指令4执行完后,F8就准备好了,F5早就准备好了,指令5就可以去执行。

        在这个调度的例子中,5条指令4个cycle就可以完成,而使用顺序内核,则需要5个cycle。

        处理器内部需要一个Buffer来缓存指令,以供乱序调度,这个Buffer就是保留站(Reservation Station),完成寄存器重命名后的指令被放置在保留站中,等到操作数和功能单元都准备好时,保留站中的指令就能被分派出去执行。

抱歉!评论已关闭.