分析报告影响cache命中率地因素
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分析影响cache命中率的因素
摘要:
存储器是计算机的核心部件之一。由于CPU和主存在速度上的存在着巨大差异,现代计算机都在CPU和主存之间设置一个高速、小容量的缓冲存储器cache。而它完全是是由硬件实现,所以它不但对应用程序员透明,而且对系统程序员也是透明的。Cache对于提高整个计算机系统的性能有着重要的意义,几乎是一个不可缺少的部件。
关键字:cache容量;失效率;块大小;相联度;替换策略。
一、概述
存储器是计算机的核心部件之一。其性能直接关系到整个计算机系统性能的高低。如何以合理的价格,设计容量和速度都满足计算机系统要求的存储器系统,始终是计算机系统结构设计的中关键的问题之一。
计算机软件设计者和计算机用户对于存储器容量的需没有止境的,他们希望容量越大越好,而且要求速度快、价格低。仅用单一的存储器是很难达到这一需求目标的。较好的方法是采用存储层次,用多种存储器构成存储器的层次结构。
其中“cache-主存”和“主存-辅存”层次是常见的两种层次结构,几乎所有现代的计算机都同时具有这两种层次。我们都知道,程序在执行前,需先调入主存。在这里主要讨论的是“cache-主存”层次。
“cache-主存”是在为了弥补主存速度的不足,这个层次的工作一般来说,完全是由硬件实现,所以它不但对应用程序员透明,而且对系统程序员也是透明的。
如前所述,为了弥补CPU和主存在速度上的巨大差异,现代计算机都在CPU和主存之间设置一个高速、小容量的缓冲存储器cache。Cache对于提高整个计算机系统的性能有着重要的意义,几乎是一个不可缺少的部件。
Cache是按块进行管理的。Cache和主存均被分割成大小相同的块。信息以块为单位调入cache。相应的,CPU的访存地址被分割成两部分:块地址和块位移。
在这里的cache专指CPU和主存之间的cache。对Cache的性能分析可以从三个方面进行:降低失效率、减少失效开销、减少Cache命中时间。这里主要是用实验数据分析影响cache命中率的因素。
1.按照产生失效的原因不同,可以把Cache失效分为三类:
(1)强制性失效(Compulsory miss)
当第一次访问一个块时,该块不在Cache中,需从下一级存储器中调入Cache,这就是强制性失效。这种失效也称为冷启动失效或首次访问失效。
(2)容量失效(Capacity miss)
如果程序执行时所需的块不能全部调入Cache中,则当某些块被替换后,若又重新被访问,就会发生失效。这种失效称为容量失效。
(3)冲突失效(Conflict miss)
在组相联或直接映象Cache中,若太多的块映象到同一组(块)中,则会出现该组中某个块被别的块替换(即使别的组或块有空闲位置),然后又被重新访问的情况。这就是发生了冲突失效。这种失效也称为碰撞失效(collision)或干扰失效(interference)。
降低Cache失效率的方法:增加Cache块大小、提高相联度、Victim Cache、伪相联Cache、硬件预取技术、由编译器控制的预取和编译器优化。
2.替换算法:
(1)先进先出法(FIFO);
(2)随机法:为了均匀使用一组中的各块,这种方法随机地选择被替换的块。(3)最近最少使用法LRU(Least Recently Used):选择近期最少被访问的块作为被替换的块。但由于实现比较困难,现在实际上实现的LRU都只是选择最久没有被访问过的块作为被替换的块。
二、对影响Cache失效率因素的分析
1.对矩阵200*200的乘法进行测试,源代码test.c如下:
#include
#define r 200
#define l 200
main()
{ int i=0,j=0,k=0,m=1,n=1;
int a[r][l],b[l][r],c[r][r];
for(int i=0;i for(int j=0;j { a[i][j]=1; b[i][j]=n; n++; } for(int k=0;k { c[i][j]=c[i][j]+a[i][k]*b[k][j]; } } 注意:必须将代码存储在SimpleScalar的文件下。 运行命令:./.bin/sslittle-na-sstrix-gcc test.c ./simplesim-3.0/sim-cache a.out 2. Cache容量对性能影响 (1)容量配置 在命令行对SimpleScalar模拟器的一级数据的容量进行配置,在配置的过程中,保证cache块大小、相联度、替换策略参数不变。通过改变组数来改变Cache的容量大小,执行程序,具体运行结果及相应的配置参数如下表1所示。 表1: Cache容量对性能影响 上表相应的折线图如下所示: 各种容量情况下cache的失效率 0.021 0.02150.0220.02250.0230.02358KB 16KB 32KB 64KB 容量 失效率块大小为32B 图1:Cache 容量对性能影响 (2)结果分析 从图1中我们可以看出,随着Cache 的容量不断增加,程序的失效率不断降低。由此可见,Cache 的容量对于Cache 性能有着重要影响。一般来说,容量越大,Cache 性能越好,发生失效的概率就越低。 3.Cache 块大小对性能的影响 (1)块大小配置 在命令行对SimpleScalar 模拟器的一级数据的块大小进行配置,在配置过程中,相联度、替换策略等参数,对于容量固定为8k 、16k 、32k ,64k ,分别改变cache 块大小,执行程序,具体运行结果及配置参数如下表表2—6所示 表2: Cache 块大小对性能影响