csapp:cachelab实验-PartB-2

热乎的缓存实验,昨天刚结束的计算机系统实验,最后前几天不是在玩手机丧志,就是赶bomb实验,做两门课的讨论课ppt。最后星期六晚终于把bomb实验的前五关给过了,最后一关还没通过,然后星期天还有算法设计的雨课堂作业和cachelab实验的最后一部分PartB,优化64x64和67x61矩阵转置。当天晚上先给过了四个雨课堂的题目,最后还剩6道,还是决定做cache实验。----2020.5-11HNU某菜学子

实验目标:使用C语言来模拟CPU对cache的访问,然后统计hits、misses和evictions。更好的理解高速缓存对于C语言程序性能的影响。
资源:linux-64位ubuntu18.04环境下,virtual box虚拟机软件,valgrind-3.12.跟踪trace文本,Linux下检测内存泄漏工具,python用于测试最终结果,cachelab-handout文件
实验步骤:首先在linux环境终端用命令“linux> tar xvf cachelab-handout.tar”将文件降压,否则有可能会被影响;阅读cachelan.pdf了解相关知识,任务,要求。安装valgrind软件,就可以开始PartA的设计了。根据cache跟踪模拟器,来模拟一个cache,写出代码csim.c。开始编译调试,命令“make”来生成各类文件,”make clean”清除“make”命令生成的文件。用命令“./csim-ref [-hv] -s -E -b -t ”查看跟踪情况,学习cache的miss,hit知识。
命令“./csim -s 4 -E 2 -b 4 -t traces/yi.trace”检查第一个跟踪结果,命令“./driver.py”查看PartA是否完全正确。正确之后开始做PartB,实现矩阵的转置。编写补充trans.c,设置转置函数。命令make,“./test-trans -M 64 -N 64”生成对应矩阵的.traces跟踪文件,“./csim -v -s 5 -E 1 -b 5 -t trace.f1”来查看跟踪结果,详细miss情况。最后设计trans成功后,用./driver.py查看最终得分。

**啰啰嗦嗦得到组索引和标志位的部分**

本来以为这部分很简单的,但是经过我一系列的磨蹭,还是ddl了,在找出64x64的组索引和标志位分部上,搞了好长时间,对于我这颗不太灵光的脑袋来说,果然还是太难了,把tag和set打印出来一个个数吧,数着数着就忘了数到哪了,怎么说也有个64x64行呢,或者就是数着数着就不想数了,如此往复,耽误了太多时间。还想着./csim -v -s 5 -E 1 -b 5 -t ,traces文件是traces.f0呢还是traces.f1呢,又去观察了一下L指令的地址变化,确定了.f0是自己写的transpose函数生成的trace文本,.f1是不分块访问的trace脚本。然后就跟踪traces.f1看set和tag的分块了,得到了以下结果
在这里插入图片描述
接下来就根据set和tag分块来优化了
 分块编写N64和N67转置

  1. M64N64优化

评分标准:miss>2000 0分 miss<1300 满分8分
未优化过的结果
1)进行8分块,并且继续进行4分块的代码如像下图。和命中情况
8分块-4分块
在这里插入图片描述
miss=1891 结果只能勉强不打个0分,得继续优化
2)在1)基础上优化对角线后(也就是L,S指令分别进行,这样能减少访问A,B数组带来的冲突),效果不大

int x1,x2,x3,x4,x5,x6,x7,x8;//在我经历ddl几分钟,因为网上代码都是图片并且格式不对没成功写完后,我就决定我要做个好人,直接把代码部分贴出来
		int block=8,i,j,ii,jj;
    	for(i=0;i<M;i+=block)
			for(j=0;j<N;j+=block)
	    		for(ii=i;ii<i+block;ii++)
				{
   
					if(i==j){
   
						
						x1=A[ii][j];x2=A[ii][j+1];x3=A[ii][j+2];x4=A[ii][j+3];
						x5=A[ii][j+4];x6=A[ii][j+5];x7=A[ii][j+6];x8=A[ii][j+7];
						B[j][ii]=x1;B[j+1][ii]=x2;B[j+2][ii]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值