指令级并行:基于硬件的推测执行技术

基于硬件的推测执行技术是动态分支预测技术和动态调度技术的结合,以实现高性能的跨基本块调度。其基本思想是利用动态分支预测选择后续指令,在控制冒险消除前可以执行后续指令,但为了处理误预测这些预先执行的指令不能改变对寄存器和存储期进行修改,同时,采用动态调度技术来处理数据冒险。

推测执行中,指令的执行过程可以概述为:顺序发射,乱序执行,按序确认写结果。一条指令在顺序发射乱序执行后,其结果已经影响到各缓冲器中的数据,但在被按序确认前,它不会影响到寄存器组和存储器中的数据。因此,一条分支指令必须被确认后,它后面的其它指令才可能造成不可恢复的影响,这也就保证了被推测执行的指令在分支预测错误时,只需要清空缓冲器和段间寄存器,重新从相应地址处开始若无其事地取指执行。

推测执行技术在结构上基于动态调度流水线结构进行扩展。在Tomasulo算法实现结构的基础上,增设分支目标缓冲器BTB以实现动态分支预测,增设确认段RET实现缓冲器到寄存器和存储器的按序确认写结果,增设再定序缓冲器ROB实现指令窗口和结果暂存的功能。ROB保存了未确认的指令执行结果,起到了临时FLR的作用,同时也用于访问存储期操作的缓冲与控制,故取代了SDB。

推测执行技术的流水段功能与Tomasulo相似,其差异主要体现在ROB和RET的功能上。

IS段,仍然在无结构冒险时发射指令,采用寄存器重命名技术消除WAR和WAW,但这里操作分解的目标是RS/FLB/ROB,大多数指令均需要在ROB中占据一行。

EX段,在OF功能时各缓冲器监视CDB接收数据。部件空闲,源操作数就绪时控制部件完成操作。

WB段中,RS/FLB将结果发送到CDB,等待结果的部件接收数据,但此时仅限于缓冲器部件,而不写入寄存器和存储器。

RET段对ROB头部的指令进行确认。对于普通指令,将结果写入寄存器或存储器;对于分支指令,若预测错误则需要清空ROB和段间REG,重置PC,预测正确时不需要写入PC。处理结束后,将ROB该行释放,继续确认下一条指令。RET段的工作过程很类似于版本控制中的commit步骤,因此RET段也被称为提交段。

ROB中按序保存了所有确认前指令的结果和状态,其每一行需要标识出指令的类型、目的地址、目的值和当前的执行状态。此时,寄存器重命名中不再传递保留站编号,而改用ROB项号。RS、FLB中每条指令都标有其对应的ROB项号,而所有缓冲器中的来源部件也都用ROB项号标识。

采用基于硬件的推测执行技术后,动态分支预测和Tomasulo动态调度得到了充分的融合,通过增设ROB、RET段,实现了指令分顺序发射、乱序执行而不写结果、按序确认并写结果三步进行流水的调度方式。其采用转发和乱序执行法解决了数据冒险,用分支预测法解决了控制冒险,结合超标量等技术后,实现了高性能的跨基本块调度。

上一篇:淘汰机制、缓存雪崩,高级Java开发必看


下一篇:LeetCode 213. 打家劫舍 II