分层存储——实验二 cache性能分析实验

2.3.1

1、哪两个程序参数会影响命中率?

步长(stepsize)和循环次数(repcount)

2、增加 repcount 的值,命中率会如何变化,为什么?

增加repcount的值,命中率不会改变,依然是0。因为根据初始参数的运行结果可知:128B的数组,repcount是4,步长是8,且cache 命中率是0的情况下,Memory access count 是32,所以数组的元素个数是(32/4)*8 =64个,而cache只有4块,且每一块的大小是8字节,所以不管repcount是多少,每次迭代访问的都是0、8、16、24(cache满)、32(根据LRU算法cache中的数据被替换)、40、48、56;所以不管迭代多少次,cache的命中率都是0。

3、在允许同一个数组元素多次访问的前提下,能否只修改一个程序参数就可提升 cache 命中率?将___修改为___,将会提升 cache 命中率。

将步长(stepsize)修改为1,将会提高cache的命中率。
在这里插入图片描述

在这里插入图片描述

2.3.2

1、每个内循环有多少次主存访问?

每个内循环有320次主存访问
在这里插入图片描述

2、每 4 次主存访问就有一次缺失,为什么?程序运行完后命中率是多少?为什么?

因为cache block size是4 words,也就是16字节=2^4,所以block offset有4位;而步长是2,每向前走4次,内存地址就会加8,8的二进制是1000,加上8index的值必然会发生变化,所以第4k+1(k=0,1,2……)个将会被放到下一组,从而造成miss。每一组的block1、block2、block3同理,所以一共有16次miss。

程序运行完后命中率是95%,因为经过前64次的访问,数组元素的内存地址已经与缓存行对齐了,后续无论再访问数组中哪一个元素,都会hit,而miss次数只有16,不会再增加了。

3、因为步长较小,cache block Size 又足够大,整个数组的地址都被存放在cache中了,所以只有在前期会是每4次访问miss一次,之后的每次访问就都是hit了。

在这里插入图片描述

4、为什么本实验的命中率相当高?

因为本实验的 caxhe 比较大,且大小正好和数组大小一样。

宇宙声明:我这答案不保真

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值