利用下表所列的数据(分离Cache和混合Cache每1000条指令的失效次数),比较指令Cache和数据Cache容量均为16KB的分离Cache与容量为32KB的混合Cache,哪种Cache的失效率更低?哪种Cache的平均访存时间更低?假设:36%的指令为访存指令。两种Cache的失效开销均为100个时钟周期,分离Cache的命中时间为1个时钟周期,混合Cache中一次Load或Store操作访问Cache的命中时间都要增加一个时钟周期(因为混合Cache只有一个端口,无法同时满足两个请求,会导致结构冲突,假设取指优先满足)。采用写直达策略,且有一个写缓冲器,并且忽略写缓冲器引起的等待。
首先对题干进行整体分析,可以看出题目中所要求的是分别求出两种Cache(分离Cache和混合Cache)的失效率和平均访存时间,那么我们只需要求出相关的内容即可。
既然需要求解失效率,那么按照公式
失效率=失效次数/总访存次数
我们只需要分别知道分离Cache和混合Cache的失效次数和总访存次数的信息即可。
通过分析题目的表格可以得知:16KB指令Cache和16KB数据Cache中每1000条指令分别有3.82条、40.9条失效;32KB混合Cache每1000条指令有43.3条失效。因此,求解两类Cache失效率中失效次数可以根据题目表格完全已知,接下来只需要求出总访存次数即可。
访存次数包括指令访存和数据访存两部分:每一条指令从内存中取出来都需要进行一次指令访存;如果一条指令是访存指令,那么这条指令还需要额外进行一次数据访存以从内存中取出数据,因此每一条访存类指令都访存两次。
由于1000条指令中36%是访存指令,因此总共的访存次数是1360次(对于两类Cache都是这样)。
这样,我们分别知道了两类Cache在1000条指令中的失效次数,同时也知道了总的访存次数,之间作商即可。
由此可知如下的计算结果:
分离Cache的总失效率:(3.82+40.9)/1360=3.29%
混合Cache的失效率:43.3/1360=3.18%
由此可知分离Cache的总失效率高于混合Cache。
首先分析平均访存时间公式:
平均访存时间公式=指令访存百分比×(命中时间+指令失效率×失效开销)+数据访存百分比×(命中时间+数据失效率×失效开销)
也就是说,如果我们能够确定指令访存百分比、数据访存百分比、命中时间、指令失效率、数据失效率和失效开销,那我们就可以通过这个公式求解出平均访存时间。
①求解指令和数据访存百分比:通过求解失效率部分的计算可以得出,总共的访存次数为1360次,指令访存次数为1000次,数据访存次数为360次,那么
指令访存百分比=1000/1360×100%=73.53%
数据访存百分比=360/1360×100%=26.47%
对于两种Cache结构,都具有相同的指令访存百分比和数据访存百分比。
②求解命中时间:题目中已经给出分离Cache的命中时间为1个时钟周期,而混合Cache中Load和Store指令(也就是访存指令)的命中时间为2个周期,其他指令的命中时间为1个时钟周期,因此命中时间根据题目条件也完全已知。
③求解失效开销:可以由题目条件得知均为100个时钟周期。
④求解失效率:混合Cache的失效率已经在前一问计算得出,因此只需要计算分离Cache的指令失效率和数据失效率即可。根据以下公式:
指令失效率=指令失效次数/指令访存次数
数据失效率=数据失效次数/数据访存次数
由此可以分别求出指令失效率和数据失效率为0.382%和11.36%。
最后,向公式中代入上述求出的四个结果即可求解出以下结果:(单位是时钟周期)
分离Cache平均访存时间:4.236
混合Cache平均访存时间:4.44