regwrite恒0什么指令会错误
发布网友
发布时间:2022-12-16 22:22
我来回答
共3个回答
热心网友
时间:2023-10-03 12:37
(b)如果MemRead卡在0,则所有的指令都会有问题,因为读不到记忆体中PC所指的指令。(c)如果MemWrite卡在0·则sw指令会出错,因为ALUOut的资料无法写入记忆体中。(d)如果IRWrite卡在0,也是所有的指令都会有问题,因为分析过的instruction存不到暂存器中。(e)如果PCWrite卡在0·则没办法跳到下一个要执行的指令,形成无限回圈。(f)如果PCWriteCond卡在0·则branch指无法发挥作用,没办法跳到想执行的指令去。5.361GHz3.2GHz2.8GHzInstrutiontype frequencyM1M2M3Loads25%544333Stores13%43R-type47%43Branch/jump15%33M1CPI=0.25*5+0.13*4+0.47*4+0.15*3=4.1M2CPI=0.25*4+0.13*4+0.47*3+0.15*3=3.38M3CPI=0.25*3+0.13*3+0.47*3+0.15*3=3M1MIPS=clock rate/(CPI*10^6)=1*10^9/4.1*10^6=243.9M2MIPS=3.2*10^9/3.38*10^6=946.7M3MIPS=2.8*10^9/3*10^6=933.3..M2>M3>M1如果所有instruction都是Loads·M2的CPI就变成4,M3的CPI还是3,结果算出来M2 MIPS=3200/4=800<933.3=M3MIPS,因此换成不同的imstructionmixes也有可能执行结果M3比较快
500MHz400MHz250MHzInstrutiontype frequencyM1M2M3Loads444333310%5Stores26%R-typeBranch/jump49%15%4333M1CPI=0.26*5+0.10*4+0.49*4+0.15*3=4.11M2CPI=0.26*4+0.10*4+0.49*3+0.15*3=3.36M3CPI=0.26*3+0.10*3+0.49*3+0.15*3=3M1MIPS=clock rate/(CPI*10~6)=500*10^6/4.11*10^6=121.7M2MIPS=400*10^6/3.36*10^6=119.0M3MIPS=250*10~6/3*10^6=83.3..M1>M2>M3如果所有instruction都是R-type·M1的CPI就变成4·M2的CPI变成3,结果算出来M1 MIPS=500/4=125<133.3=400/3=M2MIPS·因此换成不同的imstruction mixes也有可能执行结果M2比较快6.1a.不会影响,因为pipelining的cycle time是取决於最长的步骤,改变之後最长的步骤还是200ps,因此不变。b.会影响,因为改变之後,最大的cycle time就变成ALU opration的时间=200*125%=250·从原本的200ps变成250ps。6.2a.Exution time=10^6*100(ps)=10^8(ps)b.N=10~6K=20Tk=100/20=5(ps)Total time=(N-1+K)Tk=(10^6-1+20)*55*10^6(ps)Speed up=10~8/5*10^6=20(倍)
c.会同时影响instruction latancy跟instruction throughput。6.4add的$3会跟sub和lw的$3产生data hazard,解决方法是forwarding。lw的$6会跟add的$6产生data hazard,解决方法是产生stall。6.17参考Figure 6.37可以看出在第五个cycle时·register写入的是第一个instruction,也就是$2·读取的是第四个instruction·也就是$6和$1。6.18在第五个cycle时,forwarding unit总共会做四个比较la.Ex/MEM.RegisterRd=ID/Ex.RegisterRs也就是$4=$31b.Ex/MEM.RegisterRd=ID/Ex.RegisterRt也就是$4=$72a.MEM/WB.RegisterRd=ID/Ex.RegisterRs也就是$2=$32b.MEM/WB.RegisterRd=ID/Ex.RegisterRt也就是$2=$76.19在第五个cycle时,Hazard detectionunit总共会做三个比较ID/EX.MemRead会看第三个instruction的指令是不是lwID/EX.RegisterRt=IF/ID.RegisterRs也就是$7=$6ID/EX.RegisterRt=IF/ID.RegisterRt也就是S7=$1这边因为add是R-type·hw是I-type,所以比较时看起来会有点奇怪。6.21a.原本pipelined中,每多两个指令,会多两个cycle,不过lw跟add中间会多一个bubble,所以实际上每多一对lw,add,会多三个cycle·CPI=3/2=1.5b.如果不forwarding的话,每多一个指令,会多两个bubble·所以CPI=3/1=3
Cycle time=max 200/2,100,50;=100(ps)Average instructiontime=5.47*100=547(ps)而single-cycle的部份CPI=1Cycletime=200+50+100+200+50=600(ps)Average instructiontime=600*1=600(ps)..Multicycle>Single-cycle6.39要minimize performance的话,就要尽可能多一点data hazard,代表让每个lw後面都接用到相同暂存器的指令,结果如下:lw$2,100($6)add$4,S2,S3lw$3,200($7)add$6,S3,S5sub$8,$4,$6lw$7,300($8)beq$7,$8,Loop6.47整理过後:Loop:lw$2,0($10)lw$5,4($10)sub$4,$2,$3sub$6,$5,$3sw$4,0($10)sw$6,4($10)addi$10,$10,8bne$10,$30,Loop整理之後解决了原本Data Hazard的问题·避免用bubble影响效率。
热心网友
时间:2023-10-03 12:38
非Store指令都会出错,因为存储器内会写入错误数据 ExtOp 需要符号扩展的指令(如Beq、lw/sw,addiu等)发生错误 必须0扩展的指令会出错(比如ori
热心网友
时间:2023-10-03 12:39
非Store指令都会出错,因为存储器内会写入错误数据 ExtOp 需要符号扩展的指令(如Beq、lw/sw,addiu等)发生错误 必须0扩展的指令会