Cache的命中率影响因素

13 篇文章 1 订阅
11 篇文章 6 订阅

1. Cache容量对命中率的影响

       Cache的命中率随它的容量的增加而提高,它们之间的关系曲线如图所示。在Cache容量比较小的时候,命中率提高得非常快,但根据边际效应递减原理随着Cache容量的增加,命中率提高的速度逐渐降低。当Cache的容量增加到无穷大时,命中率可望达到100%,但是这在实际是做不到的。

2. Cache块大小对命中率的影响

       当Cache的容量一定时,在采用组相联映像和变换方式的Cache中,块的大小对命中率的影响非常敏感。我们可以从下面的Cache影响逻辑表达式分析:
       设Cache的总量为S,组数为M,组内块数为N,块大小为A。所以,有:S=M*N*A
       由上式可知,在Cache的容量S和Cache组内块数N(也可换成是组数M)固定不变时Cache块大小与组数成反比。
       因此,当Cache的块容量很小,组的数目就多,主存中的某一块可以映像到Cache中的块数就少,所以此时,Cache的命中率低。
       随着块大小的增加,由于程序的空间局部性起主要作用,同一块中数据的利用率比较高。因此,Cache的命中率开始升高。但如果块变得过大的话,会减少Cache的总行数,而且,也会使得离所访问的位置较远的块被再次使用的概率变小。因此,这种增加趋势在某一个“最佳块大小”处使Cache命中率达到最大值。在这一点以后,命中率随着块大小的增加反而减小。因为实际上,当块的容量变得比较大时(此时还是在组相联映像中,并没有蜕变成全相联映像),进入Cache中的许多数据可能根本用不上。而且,随着块大小的增加,程序时间局部性的作用就会逐渐减弱。最后,当块大小等于整个Cache的容量时(此时主存块应该是按成组的方式被调入Cache),命中率趋近于零。
       所以,根据Cache块的容量由小到大的变化,可得Cache命中率的情况如图所示:

       (1) 对于给定的Cache容量,当块大小增加时,命中率开始时处于上升趋势,后来反而会下降。
       (2) Cache容量越大,会使命中率达到最高的拐点的块大小增大。
       在这里,导致命中率先上升后下降的原因在于增加块大小产生双重作用。一方面会减少强制性失效,因为程序局部性原理,增加块大小增加了利用空间局部性的机会;另一方面,在容量一定情况下,增加块大小会减少总的块数目,会增加冲突失效,在Cache容量较小时,还可能增加容量失效。刚开始增加块大小时,由于块大小还不是很大,上述第一种作用超过第二种作用,是命中率上升。当块大小增加到一定程度时,第二种作用会超过第一种作用,使命中率下降。
       综上所述,块的大小对Cache命中率的影响是显而易见的;而Cache命中率对整个Cache存储系统的存取效率的影响又是至关重要的。所以,对于系统体系结构的设计人员,甚至是软件开发人员来说,关于块大小的最佳选择都是值得研究的。

3. Cache中与主存映射方式对命中率的影响

(1) 全相联方式
       应用全相联方式命中率比较高,Cache存储空间利用率高。但是访问相关存储器时,每次都要与全部内容比较,速度低,成本高,因而应用少。
(2) 直接相联方式
       应用直接相联方式地址映像方式简单,数据访问时,只需检查区号是否相等即可,因而可以得到比较快的访问速度,硬件设备简单。但是使得替换操作频繁,命中率比较低。
(3) 组相联映像方式
       应用组相联方式块的冲突概率比较低,块的利用率大幅度提高,块失效率明显降低。但是实现难度和造价要比直接映像方式高。

4. Cache的替换算法对命中率的影响

(1) 随机法(RAND法)
       随机替换算法就是用随机数发生器产生一个要替换的块号,将该块替换出去,此算法简单、易于实现,而且它不考虑Cache块过去、现在及将来的使用情况,但是没有利用上层存储器使用的“历史信息”、没有根据访存的局部性原理,故不能提高Cache的命中率,命中率较低。
(2) 先进先出法(Firs-In-First-Out,FIFO法)
       就是将最先进入Cache的信息块替换出去。FIFO算法按调入Cache的先后决定淘汰的顺序,选择最早调入Cache的字块进行替换,它不需要记录各字块的使用情况,比较容易实现,系统开销小,其缺点是可能会把一些需要经常使用的程序块(如循环程序)也作为最早进入Cache的块替换掉,而且没有根据访存的局部性原理,故不能提高Cache的命中率。因为最早调入的信息可能以后还要用到,或者经常要用到,如循环程序。此法简单、方便,利用了主存的“历史信息”,但并不能说最先进入的就不经常使用,其缺点是不能正常反映程序局部性原理,命中率不高,可能出现一种异常现象。
(3) 近期最少适用法(Least Recently Used,LRU法)
       这种方法是将近期最少使用的Cache中的信息块替换出去。该算法较先进先出算法要好一些。但此法也不能保证过去不常用将来也不常用。LRU法是依据各块使用的情况,总是选择那个最近最少使用的块被替换。这种方法虽然比较好地反映了程序局部性规律,但是这种替换方法需要随时记录Cache中各块的使用情况,以便确定哪个块是近期最少使用的块。LRU算法相对合理,但实现起来比较复杂,系统开销较大。通常需要对每一块设置一个称为计数器的硬件或软件模块,用以记录其被使用的情况。

替换算法结论:
       在Cache容量较小的情况下,随机策略相对较好,而随着Cache容量的增加,最近最少使用(LRU)和先进先出(FIFO)策略的效果较好。所以一般的计算机默认的采用LRU替换策略。

 

 

参考资料:https://wenku.baidu.com/view/ef90cb4eed630b1c59eeb5da.html

  • 21
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值