程序和数据都是储存在内存上的,CPU要处理程序必须要频繁访问内存。但是内存传回CPU的速度要比CPU处理的速度来得慢。根据木桶效应,整体性能被内存传输的过程拖累了。在没有办法能提高内存速度的情况下如何降低传输慢对系统性能带来负面影响成为重要的研究课题。(感觉像写起了综述论文,咳咳)缓存这一技术应运而生。
我们知道程序运行具有一定规律——顺序和反复性,即顺序执行和循环执行。对于顺序执行,可以采取预读策略。即将后面的程序一并读取至缓存中,减少内存读取次数(注意CPU的读指令并没有减少,只是内存响应次数少了)。缓存行是缓存的基本单位,目前主流缓存行大小是64字节因为内存一次读操作是64字节,而64位CPU对数据的读取是8字节即64bit,因此若CPU要读的八字节落入某一缓存行中,该缓存行的内容将会全部从内存中被读取到缓存中,接下来的程序也被这次读写一并带到了缓存中去。对于循环执行,则正是缓存的强项,之前访问过的程序都存储在缓存中,再次读取时,直接可以从缓存而不是从内存中读取,大大提高了运行效率。
为什么缓存读取速度要比内存快呢?这就和缓存的底层电路原理有关系了。缓存采用的是SRAM存储器内建在CPU上,而内存采用的是DRAM。前者可以达到很高的读取速度但是面积占用比较大因此容量上不去,在几M容量就止步了。后者读取速度慢每次读取后都要刷新(有空再讲),但面积占用小,因此容量可以达到好几个G甚至几百几千个G。至于容量动辄几TB的硬盘那就要另当别论了。
缓存又有分为一级缓存、二级缓存等等。他们的速度也有所不同,从一级缓存以后读取速度依次降低。为什么呢?虽然都是采用的SRAM存储器,但是数据检索需要时间,数据存储量大的三级缓存找的时间就比数据存储量小的一级缓存找的时间久。为什么要找呢?不是直接根据地址选出对应的数据就行了吗?这个过程所需时间与其存储的数据容量有什么关系呢?在内存中、在CPU的寄存器组中这个过程所需时间确实与数据容量没有太大关系。那怎么规则到缓存这里就变了呢?
如果把内存比作图书馆的书架,那么缓存就像是CPU面前的一张桌子。给你地址让你去找CPU想要的数据,如果你是在书架上找,你可以很清楚这个数据放在哪一行哪一列,如果恰好你运动速度是光速的话,那么你总能在一个确定的时间内拿到CPU想要的数据。可是缓存就不一样了,书就在你面前,还乱糟糟的,你需要翻阅查看地址是否对应上了。因此桌子越大,你找得也就越慢。
就没有别的办法了吗?当然有。桌子乱可以整理整理嘛。比如规定一下,第一书架的书只能放在桌子上的A区,第二书架放B区……以此类推。这样一来,找的人便会方便很多,放的人也没有什么困难。后者的办法被称为组关联,组关联还分为一路组关联、双路组关联、四路组关联等等。组关联就没有坏处吗?也有。如果桌子太小了怎么办?划分出来的每个区连一本书都放不下怎么办?
我程序一直在读取某个书架上的书怎么办?别的区域不能放该书架上的书,而该书架的书已经在该区域摞得老高了,这样缓存利用效率就很低下。
审核编辑:刘清
-
DRAM
+关注
关注
40文章
2303浏览量
183258 -
cpu
+关注
关注
68文章
10816浏览量
210980 -
SRAM存储器
+关注
关注
0文章
88浏览量
13262
发布评论请先 登录
相关推荐
评论