赞
踩
缓存的种类有很多,其中最重要的一个是内存缓存。内存缓存处于内存主存和 CPU 寄存器之间,解决两种访问速度不匹配的问题。其中处在 CPU 内部的叫 L1 缓存,也叫芯片内缓存。随着性能需求的发展,开发出了芯片外缓存 L2 缓存,通过缓存总线和 CPU 中的 总线接口相连,甚至还有 L3 缓存,附加在内存总线上。
内存缓存由以下组成,一个大小为 S = 2 s S = 2^s S=2s 的集合,集合中的一个元素包含 E E E 行,每一行包含一个比特位为校验位,包含 B = 2 b B = 2^b B=2b 个数据块,每个数据块包含一字节的空间储存缓存。另外还包含 t = m − s − b t = m - s - b t=m−s−b 位的识别区,其中 m m m 是内存地址的位数。
因此,缓存大小的计算方式为 C = S × E × B C = S \times E \times B C=S×E×B 字节。
通过一个简单的哈希函数进行定位, CPU 发送内存地址 A A A 到达缓存,缓存将 A A A 划分成三个区域,第一个区域包含 s s s 位,定位了缓存在哪个集合元素中,第二个区域包含 t t t 位的识别区,缓存进行查找集合内的行比较识别区,找到对应的行。第三个区域包含 b b b 位,定位了缓存在哪个数据块中。
当 E = 1 E = 1 E=1 即每个集合元素只有一行的时候,,称为直接映射缓存。
直接映射缓存是最简单的一种缓存类型,即不用进行对 Tag 位的查找。
每次从内存读取到缓存的时候,都会直接读取一行的数据。
联合缓存是指 1 < E < C / B 1 \lt E \lt C / B 1<E<C/B 的缓存结构,也称 E-路 缓存。
联合缓存必须每次查找和检查对应的 Tag 位。
联合缓存可以实现多种行替换策略,例如 LFU 替换近期使用次数最少的行,或者是 LRU 。
完全联合缓存是指 E = C / B E = C / B E=C/B 的缓存结构,只有一个集合元素。
这种缓存结构不需要 Set 位,但是也存在缺点,即缓存不能做的太大,否则查询 Tag 位将花费大量的时间。因此这类缓存应用的范围很小。
面对写回内存,有以下几种方式:
对于是否命中缓存区分下面两种方法:
指令作为内存数据的一部分,也可以被缓存器缓存,称为指令缓存 i-cache ,而数据缓存称为 d-cache 。这两个缓存要么只能缓存指令,要么只能缓存数据。而通用缓存两者都可以缓存。
一般来说 L1 缓存包含指令缓存和数据缓存两部分。而 L2 和 L3 则是通用缓存。
总体来说,影响缓存性能的因素包含:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。