《计算机体系结构量化研究方法》第2章-存储器层次结构设计 2.1 引言
一、概述
1、存储器层次结构:层次由速度和容量各不相同的存储器组成。
2、存储器层次结构被分为几个级别——离处理器越近,容量越小速度越快。
3、包含性质:大多数情况下,低层级存储器中的数据是上一级存储器中数据的超集。比如缓存的下一级存储器是主存;虚拟内存的下一级是辅助存储器(磁盘或者闪存)。
4、这是单处理器性能和主存储器访问耗时的历史发展过程。
5、传统上,存储器层次结构的设计人员把重点放在优化存储器的平均访问时间上,这个时间是由缓存命中时间、缺失率和缺失代价决定的。但是最近,功耗成为了主要考虑因素。在高端的微处理器上,可能有较多的片上缓存,大容量的第二级或第三级缓存会产生大量功耗,包括不执行操作时的漏电功耗和执行读写时的有效功耗,功耗预算可能会降到1/20~1/50。因此,缓存功耗可能占总功耗的25% ~ 50%。
存储器层次结构基础:快速回顾
一、块和组
如果在缓存中找不到某一个字,就必须从层次结构较低的一个层级(可能是另一个缓存,也可能是主存储器)中提取这个字,并把它放在缓存中,然后才能继续。出于效率原因,会一提取多个字,这称为块(或行)这样做还有另外一个原因:由于空间局部性原理,很可能马上就会用到这些字。每个缓存块都包括一个标签(tag)、用来指明它与哪个存储器地址相对应。
在设计时需要做一个非常重要的决策:哪些块(或行)可以放在缓存中。最常见的方案是组相联(set associative),其中组是指缓存中的一组块。一个块首先被映射到一个组上,然后可以将这个块放到这个组中的任意位置。要查找一个块,首先要将这个块的地址映射到这个组,然后再搜索这个组(通常为并行搜索)。这个组是根据数据地址选择的:
(块地址)MOD(缓存中的组数)
如果组中有n个块,则缓存的布局被称为n路组相联(n-way set associative)。组相联的端点有其自己的名字。**直接映射缓存(direct-mapped cache)**的每组中只有一个块(所以块总是放在同个位置),**全相联缓存(fully associative cache)**只有一个组(所以块可以放在任何地方)只从缓存中读取数据很容易,因为缓存副本和存储器是相同的。向缓存中写入数据难一些,比如,缓存副本和存储器怎样才能保持一致呢?主要有两种策略。一种是 写直达(write-through,又称“写穿透”) 缓存,当它更新缓存中的条目时,会同时将数据写人主存储器中,并对其进行更新另一种是 写回(write-back,又称“回写”) 缓存,仅更新缓存中的副本。在要替换这个块时,再将它复制回存储器。这两种写入策略都可以使用 写缓冲区(write buffer),这样将数据写入这个缓冲区之后,马上就可以进行缓存操作,而不需要等待将数据写入存储器。
二、缺失率
1、衡量不同缓存组织方式的优劣的一个指标是 缺失率(miss rate)。缺失率是指那些未能找到预期目标的缓存访问所占的比例,即未找到目标的访问数目除以总访问数目。
(1)强制(compulsory)缺失:对数据块的第一次访问肯定不会在缓存中,所以必须将这个块放入缓存中。即使拥有无限大的缓存,也会发生强制缺失。
(2)容量(capacity)缺失:如果缓存不能包含程序运行期间所需要的全部块,就会因为有丝块先被丢弃之后再被调入而导致容量缺失(除了强制缺失之外)。
(3)冲突(conflict)缺失:如果块放置策略不是全相联的,并且多个块映射到一个块的组中,对不同块的访问混杂在一起,那么一个块可能会被丢弃,之后再被调入,从而发生冲突缺失(除强制缺失和容量缺失之外)。
2、存储器平均访问时间 = 命中时间+缺失率*缺失代价。
3、如何降低缺失率?
(1)增大缓存块,降低缺失率。
(2)增大缓存,降低缺失率。
(3)提高相联度,降低缺失率。
(4)采用多级缓存以降低缺失代价。
(5)为读缺失指定高于写操作的优先级,降低缺失代价。
(6)在索引缓存期间避免虚实地址转换,以缩短命中时间。