您的位置:首页 > 其它

存储器层次结构 - cache基本原理

2013-05-27 15:43 232 查看

局部性原理

局部性原理表明了在任何时间内,程序访问的只是地址空间相对较小的一部分内容。以下是两种类型的局部性:

时间局部性

如果某个数据被访问,那么在不久的将来它可能再一次的被访问。例如大多数程序都包好了循环结构,因此这部分指令和数据将被重复的访问,呈现出了很高的时间局部性。

空间局部性

如果某个数据项被访问,与他地址相邻的数据项可能很快被访问。由于程序通常是顺序执行的,因此程序也呈现了很高的空间局部性;对数据的访问同样的显示了一种自然的空间局部性。

在cache中查找一个块

在cache的三种关联方式中:全相连,组相连和直接映射,都需要对被选中块的标记进行检测,以决定是否和来自处理器的地址相匹配。

全相连需要对cache中的每一个块进行比较,组相连首先通过地址找到组,然后被选中的组中每一块的标记都要被检测;直接映射简单一些,只需要一个比较器,因为每一地址只能对应cache中唯一的一个块。

而对于4路组相连来说,则需要4个比较器和一个4选1的多路选择器,用来在选定组中的4个成员之间进行选择。早期这些电路都是搭建在SRAM之外的,直到CAM (Content Addressable Memory 内容可寻址存储器)的出现,CAM是一种将存储单元和比较器结合在一个部件上的电路结构。CAM的出现意味着设计者能提供更高的关联度。在2008年,CAM更大的容量和功耗使得两路和四路组相连结构一般采用标准的SRAM和比较器构建,八路以及更多路组相连的结构则由CAM构建。

替换块的选择

在直接映射的cache发生缺失时,被请求的块只能放置于cache中的唯一位置,而原先占据那个位置的块必须被替换掉。在关联的cache中,被请求的块放在什么位置需要进行选择,因此替换哪一个块也要进行选择。在全相连cache中,所有的块都可能被替换。在组相连cache中,我们将在选择的组中挑选被替换的块。

最近最少使用算法(LRU)。

在LRU算法中,被替换的块是最久没有使用的那一个块。

LRU 算法的实现是通过跟踪每一块的相对时用情况。对于一个两路组相连cache,追踪组内两个块的使用情况可以这样实现:在每组中单独保留一位,通过设置该位指出哪一项被访问过。当关联度提高时,LRU的执行就变得困难些。

对于更高的关联度,或者使用近似的LRU算法,或者采用随机替换策略。在cache中,替换算法是由硬件实现的,这意味着替换算法需要很容易实现。当cache变得更大,所有替换算法的缺失率都下降了,绝对差值也变小了。事实上,有时候随机替换算法的性能要比硬件实现的近似LRU算法性能要好。

随机法

随机选择候选块,可能是用一些硬件协助实现。例如,对于TLB缺失,MIPS使用随机替换。

多级 cache(multilevel cache)

所有现代计算机都使用cache。而且大多数处理器都会额外增加一级cache。这种二级cache通常位于芯片内,当一级cache缺失时就会访问它。如果二级cache包含所需要的数据,那么一级cache缺失的代价就是二级cache的访问时间,这要比访问主存快的多。如果一级二级cache中都不包含所需要的数据,就需要访问内存,这样就产生更大的缺失代价。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: