欢迎光临散文网 会员登陆 & 注册

2016年408计组Cache部分的选择题解析

2022-11-04 11:39 作者:门口一蹲00X  | 我要投稿

        首先这是自己理解,若有些许错误还请见谅并在评论区指出

2016年Cache部分选择题解析:

        首先a[k]= a[k] + 32这句指令的执行逻辑是,去内存中取操作数a[k](32应该是个立即数) ,然后在ACC中做加法运算,最后将和写入a[k]。这-期间, 总共访问了两次内存,一次读入,一 次写入。

        观察此题,发现程序执行前,Cache为空,那么第一次访存, 去取a[k]这个操作数的时候一定是Cache不命中。 然后去内存中a[k]的位置选择16B大小的物理块将其放入Cache块中。因为int型占4B,并且数组在内存中是连续存放的,所以将物理块调入Cache块中时,调入的是4个连续的int型变量a[k],a[k+1],a[k+2],a[k+3]。所以现在Cache块中的内容是a[k],a[k+1],a[k+2],a[k+3]。

        回到本题就是a[0],a[1],a[2],a[3],这时候已经取得a[0]这个操作数了,将a[0]+32后, 再次将它写入a[0],这时候还要访存。先访问Cache,发现这时候a[0]命中了,然后写入a[0]。之后要访问a[1],先访问Cache,发现a[1],命中了,写回a[1]的时候,访问Cache, 命中。a[3]和a[4]也是如此。

        总结规律发现: 每次调入Cache块实质上是调入了4个数组,总共访问了8次,只有一次没命中, 推广到1000个数组就是调入250次Cache,总共访问2000次,有250次没有命中,所以缺失率是12.5%。答案选C

        

2016年408计组Cache部分的选择题解析的评论 (共 条)

分享到微博请遵守国家法律