实验目的
(1)熟悉SPIM-CACHE模拟器环境
(2)深入认识CACHE的工作原理及其作用。
实验内容
(1)阅读实验指导书资料
(2)下载SPIM-CACHE软件,理解英文论文的基本内容之后,给出几种典型的cache配置,运行英文论文提供的代码,记录运行时CACHE命中率等重要数据;
(3)运行Fig.4代码,配置2个左右不同的CACHE环境,了解mapping functions 即映射规则
(4)运行Fig.7代码,配置2个左右不同的CACHE环境,了解temporal and spatial locality 即时空局部性,进一步理解cache的工作原理;
(5)运行Fig.8代码,配置4个左右不同的CACHE环境,运行学习replacement algorithms 即替代算法,理解其工作原理。
实验记录及实验分析
Fig.4
1. Cache:256B; 槽:8B;映射方式:全相联映射;指令命中率:0.886792;数据命中率:0.5
2. Cache:256B; 槽:16B;映射方式:二路组相联映射;指令命中率:0.943396;数据命中率:0.75
3. Cache:256B; 槽:4B;映射方式:直接映射;指令命中率:0.792453;数据命中率:0.00
实验分析:槽的大小对cache命中率起关键性作用,当槽的越大时,命中率也就越高!
Fig.7(均是在BLOCK SIZE为8B,若有替换算法则替换算法为LRU条件下运行)
N=1:
直接映射:
二路组相联映射:
四路组相联映射:
全相联映射:
N=5:
直接映射:
二路组相联映射:
四路组相联映射:
全相联映射:
N=10:
直接映射:
二路组相联映射:
四路组相联映射:
全相联映射:
N=100:
直接映射:
二路组相联映射:
四路组相联映射:
全相联映射:
实验分析:由实验结果可得当循环次数N增大的时候数据和指令的命中率也同时增大,值得注意的是映射方式不影响命中率,但是影响Way最大值的大小!
Fig8(均是在BLOCK SIZE为8B,若有替换算法则替换算法为LRU条件下运行)
间距为1:
直接映射:
二路组相联映射:
四路组相联映射:
全相联映射:
间距为2:
直接映射:
二路组相联映射:
四路组相联映射:
全相联映射:
间距为4:
直接映射:
二路组相联映射:
四路组相联映射:
全相联映射:
间距为8:
直接映射:
二路组相联映射:
四路组相联映射:
全相联映射:
间距为16:
直接映射:
二路组相联映射:
四路组相联映射:
全相联映射:
间距为32:
直接映射:
二路组相联映射:
四路组相联映射:
全相联映射:
间距为64:
直接映射:
二路组相联映射:
四路组相联映射:
全相联映射:
实验分析:由实验结果可得当间距为1时命中率正常,且不随着映射方式改变而改变,值得注意的是当间距为2时无论改变何种映射方式命中率都为零,当间距为4的倍数的时候(如4/16/32/64)全相联映射下命中率显示正常,当间距为32的倍数的时候四路组相联映射下命中率正常,间距为64时二路组相联映射下命中率显示正常
实验结论
内部条件如(BLOCK SIZE、CACHE SIZE、映射方式、写方法、替换算法)和外部条件如(程序数据大小、循环次数、间距大小)都会影响命中率的大小。有时候虽然命中率比较高,但是增加了程序的时间开销和空间开销!在实际的实验中我们应该不能盲目的唯命中率高,而是应该考虑性价比以及性能。
结束语
如果有疑问欢迎大家留言讨论,你如果觉得这篇文章对你有帮助可以给我一个免费的赞吗?我们之间的交流是我最大的动力!