Cache命中率分析工具的使用(附源代码_第1页
Cache命中率分析工具的使用(附源代码_第2页
Cache命中率分析工具的使用(附源代码_第3页
Cache命中率分析工具的使用(附源代码_第4页
Cache命中率分析工具的使用(附源代码_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、题目:安装一种Cache命中率分析工具,并现场安装、演示。一、 什么是CPU-CacheCPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。高速缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可先缓存中调用,从而加快读取速度。CPU包含多个核心,每个核心又有独自的一级缓存(细分成代码缓存和数据缓存)和二级缓存,

2、各个核心之间共享三级缓存,并统一通过总线与内存进行交互。二、 关于Cache Line整个Cache被分成多个Line,每个Line通常是32byte或64byte,Cache Line是Cache和内存交换数据的最小单位,每个Cache Line包含三个部分Valid:当前缓存是否有效Tag:对应的内存地址Block:缓存数据三、Cache命中率分析工具选择1、Linux平台:Valgrind分析工具;2、Windows平台如下:java的Jprofiler;C+的VisualStudio2010及以后的版本中自带profile工具;Application Verifier;intel vt

3、une等。四、选用Valgrind分析工具在Linux-Ubuntu14.04环境下实验1.Valgrind分析工具的常用命令功能:memcheck:检查程序中的内存问题,如泄漏、越界、非法指针等。 callgrind:检测程序代码的运行时间和调用过程,以及分析程序性能。 cachegrind:分析CPU的cache命中率、丢失率,用于进行代码优化。 helgrind:用于检查多线程程序的竞态条件。 massif:堆栈分析器,指示程序中使用了多少堆内存等信息。 2.Valgrind分析工具的安装:使用Ubuntu统一安装命令:sudo apt-get install valgrind之后等待安

4、装完成即可。安装界面如图(由于我已经安装了此工具,而且没有更新的版本,图上结果为无可用升级)。五、使用Valgrind分析工具测试程序的Cache命中率1首先,编写两个C语言程序,主要使用对数组数据两种读写方式来测试Cache命中率的不同,同时根据程序做同一件事的运行时间来判断程序质量的好坏。代码如下:cache1.c :#include #include #include #define MAXROW 8000#define MAXCOL 8000int main () struct timeval startTime,endTime; float Timeuse; int i,j;stat

5、ic int xMAXROWMAXCOL;printf (Running!n);gettimeofday(&startTime,NULL); for (i=0;iMAXROW;i+) for (j=0;jMAXCOL;j+) xij = i*j;printf(Completed!n); gettimeofday(&endTime,NULL); Timeuse = *(endTime.tv_sec - startTime.tv_sec) + (endTime.tv_usec - startTime.tv_usec); Timeuse /= ; printf(Timeuse = %fn,Timeu

6、se); return 0;cache2.c :#include #include #include #define MAXROW 8000#define MAXCOL 8000int main () struct timeval startTime,endTime; float Timeuse; int i,j;static int xMAXROWMAXCOL;printf (Running!n);gettimeofday(&startTime,NULL); for (j=0;jMAXCOL;j+) for (i=0;iMAXROW;i+) xij = i*j;printf(Complete

7、d!n); gettimeofday(&endTime,NULL); Timeuse = *(endTime.tv_sec - startTime.tv_sec) + (endTime.tv_usec - startTime.tv_usec); Timeuse /= ; printf(Timeuse = %fn,Timeuse); return 0;2.对以上两个程序进行Cache命中率测试:编译两程序:gcc -o cache1 cache1.cgcc -o cache2 cache2.c使用命令 valgrind -tool=cachegrind ./cache1测试cache1程序的Ca

8、che命中率:使用命令 valgrind -tool=cachegrind ./cache2测试cache2程序的Cache命中率:3.对测试结果进行分析:由cache1测试结果可以看出程序cache1的D1 miss rate: 0.8%可知1级Cache的数据未命中率为0.8%,即命中率为99.2%;由Timeuse = 9.可以cache1中数组循环完成的时间是9.s由cache2测试结果可以看出程序cache2的D1 miss rate: 14.2%可知1级Cache的数据未命中率为14.2%,即命中率为85.8%;由Timeuse = 15.可以cache1中数组循环完成的时间是15.s综上可知cache1程序的cache命中率大于cache2,cache1循环所用时间少于cache2,即cache1程序质量比cache2好。六、感想这次研讨主要对Cache及Cache命中率测试工具进行了讨论,准备这次研讨时,我先查找了有关CPU Cache的资料并进行学习,加深了我对CPU Cache的理解,之后,查找了各种有关Cache命中率分析工具的资料,并选择Linux环境下的Valgrin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论