简述影响Cache命中率的因素

更新时间:2023-12-24 23:15:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

简述影响Cache命中率的因素

摘要:

存储器是计算机的核心部件之一。由于CPU和主存在速度上的存在着巨大差异,现代计算机都在CPU和主存之间设置一个高速、小容量的缓冲存储器cache。Cache最重要的技术指标是它的命中率。本文简单讨论了影响Cache命中率的几个因素。

关键字:cache容量,块大小,替换算法,映射方式。

一、引言

在计算机技术发展过程中,主存储器存取速度一直比中央处理器操作速度慢得多,使中央处理器的高速处理能力不能充分发挥,整个计算机系统的工作效率受到影响。有很多方法可用来缓和中央处理器和主存储器之间速度不匹配的矛盾,如采用多个通用寄存器、多存储体交叉存取等,在存储层次上采用高速缓冲存储器也是常用的方法之一。很多大、中型计算机以及新近的一些小型机、微型机也都采用高速缓冲存储器。

高速缓冲存储器的容量一般只有主存储器的几百分之一,但它的存取速度能与中央处理器相匹配。根据程序局部性原理,正在使用的主存储器某一单元邻近的那些单元将被用到的可能性很大。因而,当中央处理器存取主存储器某一单元时,计算机硬件就自动地将包括该单元在内的那一组单元内容调入高速缓冲存储器,中央处理器即将存取的主存储器单元很可能就在刚刚调入到高速缓冲存储器的那一组单元内。于是,中央处理器就可以直接对高速缓冲存储器进行存取。在整个处理过程中,如果中央处理器绝大多数存取主存储器的操作能为存取高速缓冲存储器所代替,计算机系统处理速度就能显著提高。高速缓冲存储器最重要的技术指标是它的命中率。

二、简述影响cache命中率的因素

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

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

在一般情况下,图中的关系曲线可以近似地表示为H=1-S-0.5。因此,当Cache的容量达到一定值之后,再增加Cache容量,命中率的提高很少。

Cache命中率H与容量S的关系

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中的任意一块

(1) 主存与缓存分成相同大小的数据块。

(2) 主存的某一数据块可以装入缓存的任意一块空间中。

全相联方式的对应关系如图所示。如果Cache的块数为Cb,主存的块数为Mb,则映象关系共有Cb×Mb种。

应用全相联的方式命中率比较高,Cache存储空间利用率高。但是访问相关存储器时,每次都要与全部内容比较,速度低,成本高,因而应用少。

2.直接相联方式

地址映象规则: 主存储器中一块只能映象到Cache的一个特定的块中。

(1) 主存与缓存分成相同大小的数据块。

(2) 主存容量应是缓存容量的整数倍,将主存空间按缓存的容量分成区,主存中每一区的块数与缓存的总块数相等。 (3) 主存中某区的一块存入缓存时只能存入缓存中块号相同的位置。

图示出了直接相联映象规则。 可见,主存中各区内相同块号的数据块都可以分别调入缓存中块号相同的地址中,但同时只能有一个区的块存入缓存。由于主、缓存块号相同,因此,目录登记时,只记录调入块的区号即可。

应用直接相联的方式地址映象方式简单,数据访问时,只需检查区号是否相等即可,因而可以得到比较快的访问速度,硬件设备简单。 但是使得替换操作频繁,命中率比较低。

3.组相联映象方式

组相联的映象规则: (1) 主存和Cache按同样大小划分成块。

(2) 主存和Cache按同样大小划分成组。

(3) 主存容量是缓存容量的整数倍,将主存空间按缓冲区的大小分成区,主存中每一区的组数与缓存的组数相同。

(4) 当主存的数据调入缓存时,主存与缓存的组号应相等,也就是各区中的某一块只能存入缓存的同组号的空间内,但组内各块地址之间则可以任意存放, 即从主存的组到Cache的组之间采用直接映象方式;在两个对应的组内部采用全相联映象方式。

应用组相联的方式块的冲突概率比较低,块的利用率大幅度提高,块失效率明显降低。但是实现难度和造价要比直接映象方式高。

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

当新的主存块需要调入Cache并且它的可用空间位置又被占满时,需要替换掉Cache的数据,这就产生了替换策略(算法)问题。根据程序局部性规律可知:程序在运行中,总是频繁地使用那些最近被使用过的指令和数据。这就提供了替换策略的理论依据。

替换算法目标就是使Cache获得最高的命中率。Cache替换算法是影响代理缓存系统性能的一个重要因素,一个好的Cache替换算法可以产生较高的命中率。常用算法如下:

(1)随机法(RAND法)

随机替换算法就是用随机数发生器产生一个要替换的块号,将该块替换出去,此算法简单、易于实现,而且它不考虑Cache块过去、现在及将来的使用情况,但是没有利用上层存储器使用的“历史信息”、没有根据访存的局部性原理,故不能提高Cache的命中率,命中率较低。

(2)先进先出法(FIFO法)

先进先出(First-In-First-Out,FIFO)算法。就是将最先进入Cache的信息块替换出去。FIFO算法按调入Cache的先后决定淘汰的顺序,选择最早调入Cache的字块进行替换,

它不需要记录各字块的使用情况,比较容易实现,系统开销小,其缺点是可能会把一些需要经常使用的程序块(如循环程序)也作为最早进入Cache的块替换掉,而且没有根据访存的局部性原理,故不能提高Cache的命中率。因为最早调入的信息可能以后还要用到,或者经常要用到,如循环程序。此法简单、方便,利用了主存的“历史信息”, 但并不能说最先进入的就不经常使用,其缺点是不能正确反映程序局部性原理,命中率不高,可能出现一种异常现象。

(3)近期最少使用法(LRU法)

近期最少使用(Least Recently Used,LRU)算法。这种方法是将近期最少使用的Cache中的信息块替换出去。该算法较先进先出算法要好一些。但此法也不能保证过去不常用将来也不常用。

LRU法是依据各块使用的情况,总是选择那个最近最少使用的块被替换。这种方法虽然比较好地反映了程序局部性规律,但是这种替换方法需要随时记录Cache中各块的使用情况,以便确定哪个块是近期最少使用的块。LRU算法相对合理,但实现起来比较复杂,系统开销较大。通常需要对每一块设置一个称为计数器的硬件或软件模块,用以记录其被使用的情况。

结论:

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

由于主存中的块比Cache中的要多,所以当要从主存调入一个块到Cache中时,会出现该快所映像到的一组Cache块已被占用的情况。这是需要强制其中的一块移出Cache,以接纳新的Cache块。这就需要替换策略选择替换的块。

替换策略主要是在对Cache块进行淘汰时,如何选择要替换的块的策略。目前主要又三种替换策略:最近最少使用(LRU)策略、先进先出(FIFO)策略、随机(RANDOM)策略。这三种替换策略各有优劣。好的替换策略会将使用率高的Cache块更长时间的驻留在Cache中,从而降低Cache失效率,提高Cache性能。

它不需要记录各字块的使用情况,比较容易实现,系统开销小,其缺点是可能会把一些需要经常使用的程序块(如循环程序)也作为最早进入Cache的块替换掉,而且没有根据访存的局部性原理,故不能提高Cache的命中率。因为最早调入的信息可能以后还要用到,或者经常要用到,如循环程序。此法简单、方便,利用了主存的“历史信息”, 但并不能说最先进入的就不经常使用,其缺点是不能正确反映程序局部性原理,命中率不高,可能出现一种异常现象。

(3)近期最少使用法(LRU法)

近期最少使用(Least Recently Used,LRU)算法。这种方法是将近期最少使用的Cache中的信息块替换出去。该算法较先进先出算法要好一些。但此法也不能保证过去不常用将来也不常用。

LRU法是依据各块使用的情况,总是选择那个最近最少使用的块被替换。这种方法虽然比较好地反映了程序局部性规律,但是这种替换方法需要随时记录Cache中各块的使用情况,以便确定哪个块是近期最少使用的块。LRU算法相对合理,但实现起来比较复杂,系统开销较大。通常需要对每一块设置一个称为计数器的硬件或软件模块,用以记录其被使用的情况。

结论:

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

由于主存中的块比Cache中的要多,所以当要从主存调入一个块到Cache中时,会出现该快所映像到的一组Cache块已被占用的情况。这是需要强制其中的一块移出Cache,以接纳新的Cache块。这就需要替换策略选择替换的块。

替换策略主要是在对Cache块进行淘汰时,如何选择要替换的块的策略。目前主要又三种替换策略:最近最少使用(LRU)策略、先进先出(FIFO)策略、随机(RANDOM)策略。这三种替换策略各有优劣。好的替换策略会将使用率高的Cache块更长时间的驻留在Cache中,从而降低Cache失效率,提高Cache性能。

本文来源:https://www.bwwdw.com/article/wbu5.html

Top