cachelab(第四周)

一、 分块编写N64

分析: 对于6464的矩阵而言,每一行的64个元素占据了8个组,每四行将填满整个cache;
因此,这里如果使用8
8分块将得到测试结果如下:
在这里插入图片描述

与未优化时结果相同;
这是因为B数组在按列访问时,四行占据整个cache,那么在访问后四行时将会驱逐存入的前四行,访问后面的列时会又将后四行驱逐,因此会造成反复驱逐的情况,B数组全部不命中,与未优化时情形相同;所以这里还要在88分块内继续细分为44的小分块;

1、 编码(10%)

在这里插入图片描述
在这里插入图片描述
结果如下:
在这里插入图片描述
miss数1179,满足条件;
此时88分块除了第一列以及对角线上的元素不命中外,全部命中,但根据3232矩阵中的优化方法,对角线上的元素同样可以被优化,但是代码量过大,得不偿失;

2、 组索引追踪与优化过程(20%)

使用 指令

./csim -v -s 5 -E 1 -b 5 -t trace.f0 >f0.txt

来观察第一个88分块组索引;
优化过程如下:
优化思路:
第一步将8
8分块的第一个44分块转置,并将第二个分块存到第三个分块转置的位置;
第二步将第三个分块逐行进行转置,将第二个分块存储的内容逐行存放在正确的位置;
第三步转置第四个分块;**右上图abcd表示4
4分块**,第一个框为第二个小矩阵的转置过程;
在这里插入图片描述

数值为16进制表示;
可以看出转置过程就是严格按照思路来进行的;取巧的地方是第一步中将橙色部分转置存在B中对应位置、第二步中直接将B中橙色部分放到转置的位置而不去A中读橙色部分;
到了第三步转置黄色部分时cache中已经存入后四列的值,因此减少了冲突不命中;

二、 编写优化代码M61N67(20%)

注:用的方法都是最基础的分块方法,而没有考虑其他优化;
代码样本:
在这里插入图片描述
88分块示例,其余分块仅改变分块大小;
miss数统计:
在这里插入图片描述
可以看出,分块大小在小于17时一直都是递增的,之后开始递减,因此选择17
17这一分块方法,misses为1950,满足misses小于2000要求;

实验报告2

一、整理实验信息(20%)

1、 实验目标

Part A学会cache的存储原理,学习miss,hit与eviction的计算方法、LRU策略的使用,并且编写cache模拟器;part B理解cache存储对于程序性能的影响与实际的cache优化方法,理解cache的存储过程。

2、 实验资源

ubuntu 16.04、VMware Workstation虚拟器

3、 实验步骤

1) 安装64位Linux系统;
2) 准备好cachelab-handout.tar与valgrind-3.12.0.tar.bz2文件并将其复制到Ubuntu中;
3) 阅读相关资料cachelab-ppt.pptx以及cachelab.pdf文件了解相关内容实验内容;
4) 搭建实验环境并且分析脚本,进一步掌握cache实验的内容;
5) Part A编写cache模拟器(创建与释放缓存、替换行方法、处理脚本命令、主函数编写)
该模拟器可以模拟数据读写时cache的命中、不命中与牺牲的情况,需要牺牲行时,用LRU算法进行替换;
6) 跟踪并分析示例转置函数,了解从什么方向入手优化;
7) Part B 矩阵转置函数编写(分块编写N32转置、N64转置、N67转置)
使函数调用过程中对cache的不命中数miss尽可能少;
8) 检验Part A、Part B并分析;
用到的主要命令:

./csim-ref -v/h -s -E -b -t +trace

-s组索引的位数 -E:每一组的行数; -b:偏移位宽度;

./test-csim

展示自带的参考模拟器与自己写的模拟器运行对比情况查看是否正确;

./test-trans -M t -N t

生成t x t的矩阵作为cache测试样例(参数-s 5 -E 1 -s 5),得出trans.c文件中自己写的转置优化分块函数命中结果;

二、实验结果

./driver.py结果截图如下;
正确性分析:
首先运行./test-csim指令得到Part A部分的结果,对于7种模型(5个文件),我的模拟器的结果与参考模拟器有着一样的数据,因此全部正确,得27分;
接着运行./test-trans命令对3232、6464、61*67三个矩阵的转置优化函数进行测试,得到结果分别为259、1179、1950,满足300、1300、2000的满分条件,都得到满分,最终得53分;
完全得分,实验正确完成!
在这里插入图片描述

三、实验总结

本次Cachelab实验的难点在于理解实验的要求、事实上,实验平台给出的实验任务虽然局限了实验实现方法的多样性,但却也降低了难度、是这次实验变得更加易于理解,只要按照任务要求一步一步的完成,那么完成并且掌握这两个部分将会水到渠成;
知识学习:在做PartB时,计算机系统课程刚好上到高速缓存这一部分,这次实验很好的与课程相结合,加深了对高速缓存使用的理解,Part B更使我们知道了程序运行速度优化的广大空间;程序不能仅仅完成要求,还要在满足要求的同时尽可能的提升性能。
方法学习:实验前需要阅读一边相关资料以了解实验目的和实验步骤,然后按照步骤进行实验,否则将会对实验一知半解;在其他场景做好充分准备同样十分重要,毕竟机会是给有准备的人的;
心得体会:在上一个实验perflab程序性能优化实验中,我还仅仅是知道分块技术可以提高命中率,提高程序性能,但是还不是特别清楚其中的原理,也不知道块的大小怎样是合适的,只能多次尝试,并不会具体的分析。而在这个实验中就对cache进行了深入的分析与理解,进一步掌握了分块与命中率的提高的关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值