2.平均访问时间TATA=TA1+(1-H)TM或TA=TA1+FTMTA1──命中时间TM──失效开销CPU访存命中时,访问时间即为TA1。不命中时,在两级存储层次中,访问的字不在M1中,就必须从M2中把所请求的信息送入M1,传送时间为TB,则访问时间是TA2+TB+TA1=TA1+TM。1.命中率H和失效率FH=N1/(N1+N2)N1──访问M1的次数N2──访问M2的次数失效率F=1-H存储层次的四个问题当把一个块调入高一层(靠近CPU)存储器时,可以放在哪些位置上?(映象规则)当所要访问的块在高一层存储器中时,如何找到该块?(查找算法)3.当发生失效时,应替换哪一块?(替换算法)4.当进行写访问时,应进行哪些操作?(写策略)1.2.◆绝大多数计算机的Cache:n≤4想一想:相联度一定是越大越好?◆n路组相联:每组中有n个块(n=M/G)n称为相联度。相联度越高,Cache空间的利用率就越高,块冲突概率就越低,失效率也就越低。全相联直接映象组相联n(路数)G(组数)MM111<n<M1<G<M3.2.1性能分析2.平均访问时间平均访问时间=命中时间+失效率×失效开销例假设Cache的命中时间为1个时钟周期,失效开销为50个时钟周期,在混合Cache中一次load或store操作访问Cache的命中时间都要增加一个时钟周期(因为混合Cache只有一个端口,无法同时满足两个请求。按照有关流水线的术语,混合Cache会导致结构冲突),试问指令Cache和数据Cache容量均为16KB的分离Cache和容量为32KB的混合Cache相比,哪种Cache的失效率更低?又假设采用写直达策略,且有一个写缓冲器,并且忽略写缓冲器引起的等待。请问上述两种情况下平均访存时间各是多少?1.失效率混合Cache与分离Cache分离Cache平均失效率的计算:访问指令Cache的百分比×指令Cache的失效率+访问数据Cache的百分比×数据Cache的失效率16KB容量1KB2KB4KB8KB32KB指令Cache3.06%失效率的比较64KB128KB数据Cache混合Cache2.26%1.78%1.10%0.64%0.39%0.15%0.02%24.61%20.57%15.94%10.19%6.47%4.82%3.77%2.88%13.34%9.78%7.24%4.57%2.87%1.99%1.36%0.95%解:如前所述,约75%的访存为取指令。因此,分离Cache的总体失效率为:(75%×0.64%)+(25%×6.47%)=2.10%根据上表,容量为32KB的混合Cache的失效率略低一些,只有1.99%.平均访存时间公式可以分为指令访问和数据访问两部分:平均访存时间=指令所占的百分比×(指令命中时间+指令失效率×失效开销)+数据所占的百分比×(数据命中时间+数据失效率×失效开销)所以,两种结构的平均访存时间分别为:平均访存时间分离=75%×(1+0.64%×50)+25%×(1+6.47%×50)=(75%×1.32)+(25%×4.325)=0.990+1.059=2.05平均访存时间混合=75%×(1+1.99%×50)+25%×(1+1+1.99%×50)=(75%×1.995)+(25%×2.995)=1.496+0.749=2.243.程序执行时间CPU时间=(CPU执行周期数+存储器停顿周期数)×时钟周期时间其中,存储器停顿周期数=访存次数×失效率×失效开销例5.2我们用一个和AlphaAXP类似的机器作为第一个例子。假设Cache失效开销为50个时钟周期,当不考虑存储器停顿时,所有指令的执行时间都是2.0个时钟周期,Cache的失效率为2%,平均每条指令访存1.33次。试分析Cache对性能的影响。CPU时间=IC×[CPIexe+每条指令的平均存储器停顿周期数]×时钟周期时间CPU时间=IC×[CPIexe+访存次数/指令数×失效率×失效开销]×时钟周期时间考虑Cache的失效后,性能为:CPU时间有cache=IC×(2.0+(1.33×2%×50))×时钟周期时间=IC×3.33×时钟周期时间CPU时间=IC×(CPIexe+────────)×时钟周期时间存储器停顿周期数指令数解:实际CPI:3.333.33/2.0=1.67(倍)CPU时间也增加为原来的1.67倍。但若不采用Cache,则:CPI=2.0+50×1.33=68.5平均访存时间=命中时间+失效率×失效开销可以从三个方面改进Cache的性能:(1)降低失效率(2)减少失效开销(3)减少Cache命中时间下面介绍15种Cache优化技术3.2.2改进Cache性能(1)强制性失效(Compulsorymiss)当第一次访问一个块时,该块不在Cache中,需从下一级存储器中调入Cache,这就是强制性失效。(冷启动失效,首次访问失效。)(2)容量失效(Capacitymiss)如果程序执行时所需的块不能全部调入Cache中,则当某些块被...