3、流水线分支相关处理教学课件.pptx
流水线分支相关处理谭志虎1指令流水线的相关、冲突、冒险(hazard)n 资源相关p 争用主存:IF段取指令、ID段取操作数p 争用ALU:多周期方案中计算PC、分支地址,运算指令 p 解决方案:增加部件消除n 分支相关p 控制IF段进行分支跳转p 提前取出的指令作废,流水线清空n 数据相关p 指令操作数依赖于前一条指令的执行结果 ADD $s1, $s2, $s3p 引起流水线停顿直到数据写回 ADD $s4, $s1, $s32分支指令n 无条件分支n 有条件分支#指令类型指令调用格式1R型指令JR、JALR#JR rs2I型指令BEQ、BNEBGTZ(0),BGEZ(0) ,BLTZ(0),BLEZ(0)#BEQ rs, rt, offset16 #BGEZ rs, offset163J型指令J、JAL、#JAL target263分支相关流水线时空图ADDSUBI4I5I6I7I8I9ADDI4I5I6I7I8I4I5I7I7I4I5I8I4I5时间tIFIDEXMEM空间sWBI5I4 误取两条指令作废,流水线损失了2TT2T3T4T5T6T7T8T9T0BeqBeqBeqBeqBeq气泡I1误取指令4分支相关CLKCLKCLKIF/IDID/EXALUZeroResultADDADDR1#寄存器文件RD1DinR2#RD2W#MUX01符号扩展MUX01ADDR指令存储器RD4PCEX/MEMMEM/WB左移2位ADDR数据存储器RDWD立即数Write Reg#1632CLKCLKCLKCLK指令MUX01ALU.ResultPC+4ALU.ResultRD1RD2Beq $0,$0,16预取指令MEM.ReadData译码ID执行EX访存MEM写回WB取指令IFsub $3,$1,$2add $3,$1,$2分支目标地址误取指令作废如何清除误取指令?如何清除误取指令?EX.Branch5插入气泡CLKCLKCLKIF/IDID/EXALUZeroResultADDADDR1#寄存器文件RD1DinR2#RD2W#MUX01符号扩展MUX01ADDR指令存储器RD4PCEX/MEMMEM/WB左移2位ADDR数据存储器RDWD立即数Write Reg#1632CLKCLKCLKCLK指令MUX01ALU.ResultPC+4ALU.ResultRD1RD2清空误取指令清空误取指令MEM.ReadData插入气泡气泡:流水接口清零 同步/异步?译码ID执行EX访存MEM写回WB取指令IFBeq $0,$0,16分支目标地址指令nopnopCLKCLKCLKIF/IDID/EXALUZeroResultADDADDR1#寄存器文件RD1DinR2#RD2W#MUX01符号扩展MUX01ADDR指令存储器RD4PCEX/MEMMEM/WB左移2位ADDR数据存储器RDWD立即数Write Reg#1632CLKCLKCLKCLK指令MUX01ALU.ResultPC+4ALU.ResultRD1RD2EX.Branch6异步清零?CLKCLKCLKIF/IDID/EXALUZeroResultADDADDR1#寄存器文件RD1DinR2#RD2W#MUX01符号扩展MUX01ADDR指令存储器RD4PCEX/MEMMEM/WB左移2位ADDR数据存储器RDWD立即数Write Reg#1632CLKCLKCLKCLK指令MUX01ALU.ResultPC+4ALU.ResultRD1RD2预取指令MEM.ReadDatasub $3,$1,$2add $3,$1,$2译码ID执行EX访存MEM写回WB取指令IF异步电平清零异步电平清零Beq $0,$0,16nopnopEX.BranchEX.Branch7时钟到来后CLKCLKCLKIF/IDID/EXALUZeroResultADDADDR1#寄存器文件RD1DinR2#RD2W#MUX01符号扩展MUX01ADDR指令存储器RD4PCEX/MEMMEM/WB左移2位ADDR数据存储器RDWD立即数Write Reg#1632CLKCLKCLKCLK指令MUX01ALU.ResultPC+4ALU.ResultRD1RD2预取指令MEM.ReadDataNext InstructionJ 0001nopnopsub $3,$1,$2错误指令EX.Branch译码ID执行EX访存MEM写回WB取指令IF异步清零?异步清零?8分支相关处理逻辑CLKCLKCLKIF/IDID/EXALUZeroResultADDADDR1#寄存器文件RD1DinR2#RD2W#MUX01符号扩展MUX01ADDR指令存储器RD4PCEX/MEMMEM/WB左移2位ADDR数据存储器RDWD立即数Write Reg#1632CLKCLKCLKCLK指令MUX01ALU.ResultPC+4ALU.ResultRD1RD2Beq $0,$0,16预取指令MEM.ReadData译码ID执行EX访存MEM写回WB取指令IFsub $3,$1,$2add $3,$1,$2分支目标地址误取指令作废EX.Branch同步清零分支逻辑:分支逻辑:EXEX段选择段选择IFIF段段PCPC地址地址, ,并给出并给出IF/ID,ID/EXIF/ID,ID/EX清零信号清零信号9分支相关处理策略n 分支指令放在那一段执行?CLKCLKCLKIF/IDID/EXALUZeroResultADDADDR1#寄存器文件RD1DinR2#RD2W#MUX01符号扩展MUX01ADDR指令存储器RD4PCEX/MEMMEM/WB左移2位ADDR数据存储器RDWD立即数Write Reg#1632CLKCLKCLKCLK指令MUX01ALU.ResultPC+4ALU.ResultRD1RD2预取指令MEM.ReadData译码ID执行EX访存MEM写回WB取指令IFEX.Branch4321Beq $0, $0, 16321Beq $0, $0, 1621Beq $0, $0, 161Beq $0, $0, 16分支执行越早,性能损失越小!分支执行越早,性能损失越小!分支指令,是否能在分支指令,是否能在IFIF段执行?段执行?10MIPS延迟槽技术n 分支在ID段执行,相邻指令为延迟槽,无论是否跳转,延迟槽指令必须执行CLKCLKCLKIF/IDID/EXALUZeroResultADDADDR1#寄存器文件RD1DinR2#RD2W#MUX01符号扩展MUX0ADDR指令存储器RD4PCEX/MEMMEM/WBADDR数据存储器RDWD立即数Write Reg#1632CLKCLKCLKCLK指令MUX01ALU.ResultPC+4ALU.ResultRD1RD2立即数MEM.ReadData译码ID执行EX访存MEM写回WB取指令IF延迟槽指令JAL 16转移目标地址指令延迟槽指令JAL 1611分支相关总结n 指令跳转p IF段重新取新的指令 n 清除误取指令p IF/ID、ID/EX段给出同步清零信号n 分支指令执行阶段?p 越早执行,性能损失越小p MIPS中通常为ID段执行,为了简化中断,重定向机制,可在EX段执行n 分支延迟槽技术p 配合ID段执行分支指令,彻底消除分支带来的流水性能损失p 如何将有用的指令载入延迟槽比较关键p X86中没有分支延迟槽,采用动态分支预测技术12分支相关处理实验n 为流水接口增加气泡逻辑n 实现流水线分支跳转逻辑p 完成EX段分支地址与IF段的数据通路连接p 完成IF段PC输入端多路选择器选择信号的连接p 给出分支相关的气泡逻辑n 在指令存储器中加载分支相关测试.hexn Ctrl+k驱动自动仿真后,程序停机n 程序效果:LED显示区倒计数到零停止谭志虎下节课再见s t a n h u s t . e d u . c n