Digltal Design and Computer Architecture with full hazard handling 图7.58 CLK CLK CLK RegWriteD RegWriteE Control MemtoRegD MemtoRegE MemtoRegM MemtoRegW unit MemWriteD MemWriteE MemWriteM ALUControlDo ALUControlE2o 3120 Op ALUSrcD ALUSrcE 5:0 Funct RegDstD RegDstE BranchD CLK CLK EqualD CLK CLK 2521 WE3 WE RD Instro A1 RD1 1 ALUOutM ReadDataW Instruction A RD 20:16 memory A2 RD2 SrcBE Data A3 1 WD3 Register WriteDataE WriteDataM memory file WD 2521 RsD RsE ALUOutW 20:16 RtD RdE RdE WriteRegE WriteRegM. 1511 Sign SignlmmD 150 extend <<2 PCPlus4F PCPlus4D PCBranchD BranchD ForwardAD Forward BO ForwardAE ForwardBE MemtoRegE RegWriteE emto RegM Hazard unit
with full hazard handling 图7.58
beq指令的性能,$4.5 ·单周期分支stal对性能的影响,例 -SPECINT2006中,条件分支占17%。设其他 指令CPI=1。 -单周期条件分支需stal一个周期,因此平均 CP=1.17,即性能下降1.17倍 一原始版本 (beq在MEM完成)的CPI=? addS4,$5,$6 Instruction Data fetch Reg ALU access Reg beq$1,$2,40 Instruction Reg ALU Data 200pS fetch access Reg bubble bubble. bubble bubble bubble 0 or$7,$8,$9 nstruction Data 400ps fetch Reg ALU access Reg
beq指令的性能,$4.5 • 单周期分支stall对性能的影响,例 – SPECINT2006中,条件分支占17%。设其他 指令CPI=1。 – 单周期条件分支需stall一个周期,因此平均 CPI=1.17,即性能下降1.17倍。 – 原始版本(beq在MEM完成)的CPI=?
分支冒险的处理技术:三类 ·RV分支指令占比:36%(图2-41) 。方法1Stal:$4.5.2,$4.8.2 ·方法2分支预测:发生?目标地址?硬件,$4.8.3 -静态预测:假设taken/not taken,投机执行(Speculation) 一动态预测:程序运行时使用实时信息进行预测,正确率>90% ·基于分支的局部和全局信息:是否发生,目标PC,发生方向 方法3延迟分支(delayed branch):软硬件,$4.5.2 -编译器按一定的模式向延迟槽(delay slot)填入无关指令 ·延迟槽总是被执行,不管分支发生与否,且先于分支指令提交 -向前找?向后找?一三种模式(见COD5-MIPS) ·一般单延迟槽(多个周期效率低,用动态预测) -M川PS采用单延迟槽(见COD5-MIPS),RV不支持! ·方法4条件执行:ARM 14
14 分支冒险的处理技术:三类 • RV分支指令占比:36%(图2-41) • 方法1 Stall:$4.5.2,$4.8.2 • 方法2 分支预测:发生?目标地址?硬件,$4.8.3 – 静态预测:假设taken/not taken,投机执行(Speculation) – 动态预测:程序运行时使用实时信息进行预测,正确率>90% • 基于分支的局部和全局信息:是否发生,目标PC,发生方向 • 方法3 延迟分支(delayed branch):软硬件,$4.5.2 – 编译器按一定的模式向延迟槽(delay slot)填入无关指令 • 延迟槽总是被执行,不管分支发生与否,且先于分支指令提交 – 向前找?向后找?——三种模式(见COD5-MIPS ) • 一般单延迟槽(多个周期效率低,用动态预测) – MIPS采用单延迟槽(见COD5-MIPS),RV不支持! • 方法4 条件执行:ARM
分支预测:静态预测,投机执行 ·三类 回四 -总是不会发生:beq 回田 ·符合顺序执行语义:简单,经济,有效 四@ ·利于Cache -总是发生:bne -向后发生,向前不发生 ·与循环结构匹配:在循环中,向后转移用于迭代,向前 转移用于退出循环。迭代次数多,退出只有一次。 COD的beq -假设not taken(准确率70%),且“单周期分支
分支预测:静态预测,投机执行 • 三类 –总是不会发生:beq • 符合顺序执行语义:简单,经济,有效 • 利于Cache –总是发生:bne –向后发生,向前不发生 • 与循环结构匹配:在循环中,向后转移用于迭代,向前 转移用于退出循环。迭代次数多,退出只有一次。 • COD的beq – 假设not taken(准确率70%),且“单周期分支