指令在流水线中的执行过程可以分为指令的流出(IS),读操作数(RO),执行(EX)和写回结果(WR)四个阶段,其中IS,RO和WR所占用的时钟周期为1的时钟周期,EX所占用的时钟周期视功能部件而有所不同。动态流水线中,所有的指令在流出IS阶段是顺序的,但是在读操作数时(RO)时,只要指令运行所需要的资源满足并且没有数据阻塞,就应当允许指令乱顺序执行。在资源充足的情况下,尽可能早地完成没有数据阻塞的指令,达到每个时钟周期执行一条指令,如果某条指令被暂停,而后面的指令与
流水线中正在执行的或被暂停的指令不相关,则该条指令可以流出并执行下去,记分板显示提供资源的使用情况,并负责相关检测,控制指令的流出与执行。记分板有三中信息状态需要提供,包括:1-指令状态表,负责显示提供所有指令在当前时钟周期下的各阶段的运行情况;2-功能部件状态表,负责显示提供功能部件在当前时钟周期的被占用情况;3-结果寄存器状态表:负责提供当前情况下浮点寄存器即目标寄存器被尚在运行的指令占用功能部件的情况。在指令流出前还要检测WAW(写后写)相关和功能部件的空闲情况,不存在WAW相关以及有空闲的功能部件的情况下才能流出,指令在读操作数RO前要检测RAW(读后写)相关,在前面相关指令将结果写回WR后才能读操作数RO,指令在写回WR前还要进行WAR(读后写)相关,即前面的指令中的某个源操作寄存器与本指令的目的寄存器相同并且该指令还尚未读取操作数,则不能写回。
以下为C#写的程序的外观图:(void)
以下为程序的核心算法流程图:(void)
(A) 阶段 指令流出及其相应设置的代码段以及说明:
(B)指令读操作数及其相应设置的代码段
(D) 阶段 批处理需要写回指令