高档计算机系统中Cache性能分析

时间:2022-04-14 12:45:37

高档计算机系统中Cache性能分析

摘要:现代计算机体系结构中广泛采用Cache来缓解处理器运行和存储器访问的速度增长之间的巨大差距,使得Cache已经成为影响处理器性能、功耗、价值的重要因素之一。文章根据Cache基本工作原理和引入Cache后计算机系统的性能分析,介绍了一些改进Cache性能的方法。

关键词:高速缓存;命中率;局部性原理;静态随机存储器

中图分类号:TP302文献标识码:A文章编号:1009-3044(2011)22-5285-02

随着计算机技术的不断发展和进步,CPU(中央处理器)主频的不断提高对计算机系统性能的提升起到了极大的作用,但是作为一个完整的计算机系统,计算机系统性能的提高并不是仅取决于CPU的主频,还与其他因素密切相关,例如,计算机系统结构、数据在各部件间的传送速度、存储部件的存取速度等,其中CPU和主存之间的存取速度与计算机系统性能的提高有很大关系。可是主存速度的提高始终跟不上CPU的发展,据统计,CPU的速度平均每年改进60%,而组成主存的动态RAM(随机存储器)速度平均每年只改进7%,结果是CPU和主存之间的速度间隙平均每年大增50%。处理器运行和存储器访问的速度增长之间存在的差距越来越大,这种现象己经成为影响计算机系统性能最主要的瓶颈之一。假设一台计算机的CPU工作速度很快,而配备的主存访问速度相对较慢,这样就会造成CPU在访存时等待,降低了处理器的工作速度,进而影响计算机的整体性能。

解决CPU与主存的速度差距问题在于保持CPU的能力,提高主存的速度。使用硬件技术提高存储芯片的存取速度是一个有效的手段,可是在慢速的主存和快速CPU之间插入一个容量较小的高速存储器起缓冲作用(即Cache技术)也是解决问题的一个行之有效的方法,使得速度和成本之间的矛盾得到较合理的解决。自从1985年Intel80386问世以来,在后续的微处理器中都采用了Cache。

1 Cache的工作原理

在现代计算机系统中,高速缓存Cache已经逐渐成为计算机不可缺少的一部分。在计算机系统中设置Cache是为了解决高速处理器和低速主存之间速度不匹配的问题,从而可以提高整机的性能。因此要分析Cache对计算机性能的影响,必须要了解其工作原理。

Cache的工作原理是基于程序和数据访问的局部性。任何程序或数据要为CPU所使用,必须先放到主存中。CPU只与主存交换数据,所以主存的速度在很大程度上决定了系统的运行速度。对大量典型程序运行情况的分析结果表明,程序运行期间,在一个较短的时间间隔内,由程序产生的内存访问地址往往集中在主存很小范围的地址空间内。这一点不难理解。指令地址本来就是连续分布的,再加上循环程序段和子程序段要多次重复执行。因此,对这些地址中的内容的访问就自然具有时间上集中分布的倾向。数据分布的这种集中倾向不如指令明显,但对数组的存储和访问以及内存变量的安排都使存储器地址相对集中。这种在单位时间内对局部范围的存储器地址频繁访问,而对此范围以外的地址则访问甚少的现象,就称为程序访问的局部性。

由此可以想到,如果把在一段时间内、一定地址范围内被频繁访问的信息集合成批地从主存中读到一个能高速存取的小容量存储器中存放起来,供程序在这段时间内随时使用,从而减少或不再去访问速度较慢的主存,就可以加快程序的运行速度。这就是Cache的设计思想,在主存和CPU之间设置一个小容量的高速存储器就是高速缓存Cache(其结构如图1所示),通常由SRAM(静态随机存储器)构成。它的存取速度比构成主存的动态RAM要快的多,故CPU在需要访问主存中的程序和数据时,就不必多次直接访问速度较慢的主存,而是从高速缓存中以更快的速度得到必要的程序和数据,从而可以缓解CPU和主存速度不匹配的矛盾,进而提高计算机系统的性能。但是SRAM的价格比较昂贵,若干设置大容量的高速缓存,就会增加计算机的成本,故Cache的容量一般相对主存来说都比较小。

在Cache系统中,将主存和Cache都分成若干同样大小的块,每块内又包含若干个字,主存总是以块为单位映射到Cache中。根据程序访问的局部性原理,在程序运行期间系统不断地将与当前访问块相关联的后继存储单元块从主存读入到Cache,其实质就是把主存中的程序和数据分块复制到Cache中,然后再和CPU进行高速传送。当CPU需要访问主存时就会在地址总线上发出访存地址,首先通过主存―Cache地址变换机构判定访存地址所对应的存储单元块是否已在Cache中。如果在Cache中(称为Cache命中),则经地址变换机构将主存地址变换成Cache地址去访问Cache。如果不在Cache中(称为Cache不命中),此时就要把要访问的字直接从主存送往CPU,同时把包括该字的主存块调入Cache供CPU使用。当然Cache的容量是有限的,如果此刻Cache处于未被装满的状态,则可将新的主存块直接调入Cache。倘若Cache原来已被装满,即已无法将新的主存块调入Cache时,就得采用替换策略,从Cache中换出一个旧块,并将新块替换进Cache。

2 Cache的性能分析

在计算机系统中设置Cache的目的是为了解决CPU和主存之间速度不匹配的矛盾,从而提高计算机的性能。尽管引入Cache后,使用SRAM技术的Cache访问速度与CPU的速度相当,可以使系统的整体性能得到提高,但由于SRAM的制作工艺比较复杂、制作成本比较较高,从计算机系统的性价比方面来考虑,不可能将所有主存都换成SRAM,也不可能设置大容量的Cache。例如,80386的主存最大容量为4GB,与其配套的Cache容量为16KB或者32KB。从CPU性能方面考虑,增加Cache系统的目的就是使Cache―主存系统的平均访问时间接近Cache访问时间。在Cache―主存系统中,平均访问时间t可定义如下:

t=h・tc+(1-h)・tm

其中h表示命中率(数值上等于命中次数比上命中次数与未命中次数之和。当Cache不命中时,CPU就需要访问主存,故未命中次数就等于访问主存的次数),tc表示命中Cache时的访问时间,tm表示未命中Cache时访问主存的时间。

假设CPU在执行某段程序时,共访问Cache命中2000次,访问主存50次。已知Cache的存取周期为50ns,主存的存取周期为200ns。则Cache的命中率为:

h=2000/(2000+50)=0.97

于是可计算出Cache―主存系统的平均访问时间为:

t=50ns×0.97+2000ns×(1-0.97)=54.5ns

通过以上分析可以发现,在使用Cache的计算机系统中,Cache―主存系统的平均访问时间非常接近于Cache访问的时间,其数值远小于主存的存取周期,这说明增加Cache之后,计算机系统的性能有了显著的提高。同时也说明命中率h是影响Cache―主存系统的平均访问时间的关键,因此提高命中率对改善Cache―主存系统的效率起着关键性的作用。

3 Cache的性能改进

通过对Cache性能分析,可知Cache命中率是影响Cache―主存系统的平均访问时间的关键。Cache的命中率越高,发生不命中可能性就越小,从Cache获取指令和数据的可能性就越大,平均访问时间也就越短,使处理器保持高效率运作,从而可以提高计算机整机性能。通过对Cache的基本原理的分析,Cache不命中的原因有以下几个方面:

1)当程序首次执行时,由于对应的主存块是第一次访问,故该块必然不在Cache中,所以必须首先将主存块复制到Cache中。而且当CPU顺序访问下一个主存块时依然会发生不命中,这个过程一直会持续到Cache装满或程序全部调入Cache为止。此时发生不命中的次数和分块的大小有直接关系,块长越大,发生不命中的次数自然就越小。

2)若Cache的容量太小,受此条件的限制,不可能在执行过程中将所需的指令和数据全部调入Cache,于是程序执行期间可能会发生频繁的替换。每当发生替换时,CPU就要访问慢速的主存,而且发生替换的频率越高,越不利于CPU性能的发挥。

3)采用替换策略时,由于主存的容量远大于Cache的容量,故需替换入的主存块的个数大于Cache可容纳的块数,在替换时极有可能会把下次访问的指令或数据替换出去,而且当块长越大,替换时传送的数据量也就越大,造成下次访问的不命中。由于块长的增大,导致缓存中块数的减少,而新装入的块要覆盖旧块,很可能出现少数块刚刚装入就被覆盖,因此命中率反而下降。

影响Cache性能的因素比较多,其中Cache的容量与块长是影响Cache效率的重要因素。目前块长的最优值很难确定,一般每块取4至8个字或字节较好。而在其他因素方面还有以下方法可以改进Cache的性能。

1)增大Cache容量,降低不命中率。Cache的命中率和容量有极大的关系,一般来说,Cache的存储容量比主存容量小的多,大不能太小,太小会使命中率太低。但是容量也没有必要太大,太大不仅会增加成本,而且当Cache容量达到一定值后,命中率随容量的增家将不会有显著的提高,其关系如图2所示。因此,Cache的空间与主存空间在一定范围内应保持适当比例的映射关系,以保证Cache有较高的命中率,并且系统成本不过大地增加。一般情况下,可以使Cache与主存的空间比为1:128。

2)通过Cache的结构设计,减少不命中次数。根据主存采用指令、数据分开存储的方案,在设计高速缓存的结构时,则相应的Cache采用分立缓存。分立缓存是指指令和数据分别存放在两个缓存中,一个称为指令Cache,一个称为数据Cache。有时可以根据Cache位置的不同分为片内缓存和片外缓存,片内缓存为第一级,片内缓存为第二级。

3)通过预取技术,提高Cache的命中率。根据程序访问的局部性原理,通过缓存控制指令和预取技术,预测将要访问的指令,在当前指令执行过程尚未结束时就提前将下一条准备执行的指令取到Cache中,这样CPU在取指时只需要访问Cache就可以了,从而可以提高Cache的命中率,使处理器保持高效率运作。

4)采用适当的映射方式和替换策略来提高命中率。由于Cache的容量不可能任意增大,而且当Cache容量超过一定值后,命中率随容量的增加将不会明显的提高,所以访存时发生不命中是不可避免的。当访存不命中发生后,可通过采用适当的映射方式和最佳的替换策略,来提高下次访问的命中率,也可改进Cache的性能。

在计算机系统中,Cache技术有效地解决了CPU和主存速度不匹配矛盾。目前的微型计算机系统中一般均采用这种方法来提高存储系统的性能,使系统在成本增加不高的情况下,性能有较显著的提升。

参考文献:

[1] 冯博琴.微型计算机硬件技术基础[M].北京:高等教育出版社,2003.

[2] 唐朔飞.计算机组成原理[M].2版.北京:高等教育出版社,2008.

[3] 白中英.计算机组成原理[M].3版.北京:科学出版社,2001.

[4] 郑伟明,汤志忠.计算机系统结构[M].2版.江苏:南京大学出版社,2004.

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文

上一篇:提高家用电脑运行速度的几种方法 下一篇:基于ASP.NET的文档存储与检索技术实现