略读
第六章 存储器层次结构
- 基本存储技术包括随机访问存储器(RAM)、非易失性存储器(ROM)和磁盘。
- 随机访问存储器
- 随机访问存储器(Random Access Memory, RAM)分为两类:静态RAM(SRAM)和动态RAM(DRAM)。
- SRAM
- 比DRAM更快,但也贵得多。
- 用来作为高速缓存存储器,既可以在CPU芯片上,也可以在片下。
- SRAM对诸如光/电噪声这样的干扰不敏感。
- 一个桌面系统的SRAM不会超过几兆字节,
- DRAM
- 用来作为主存以及图形系统的帧缓冲区。
- 典型地,一个桌面系统的DRAM有几百或几千兆字节。
- SSD
- 读SSD比写要快。
- 要很多年SSD才会磨损坏(参考练习题6.5)
- 空间-局部性
- 步长为k的引用模式:一个连续向量中,每隔k个元素进行访问.
- 随着步长的增加,空间局部性下降。
- 例如,考虑二维数组的元素求和问题。双重嵌套循环按照
行优先
顺序读数组的元素。也就是,内层循环读第一行的元素,然后读第二行,依此类推。所以,这是一个很好的步长为1的引用模式,具有良好的空间局部性
。- 当我们交换了i和j的循环,即按照
列优先
来扫描数组。- 空间局部性角度:因为C数组在内存中是按照
行顺序
来存放的,结果就得到步长为N的引用模式,空间局部性变差
。 - 缓存(不)命中角度:如果整个数组都在高速缓存中,不命中率1/4(和
行优先
相同)。如果数组比高速缓存要大(更可能出现这种情况),那么每次对a[i][j]的访问都会不命中!
- 空间局部性角度:因为C数组在内存中是按照
- 当我们交换了i和j的循环,即按照
- 缓存(不)命中
- 缓存命中(cache hit):当程序需要第k+l层的某个数据对象d时,它首先在当前存储在第k层的一个块中查找d。而d刚好缓存在第k层中。
- 缓存不命中:如果第k层中没有缓存数据对象d,那么就是缓存不命中(cache miss)。
- 此时,第k层的缓存从第k+1层缓存中取出包含d的块,如果第k层的缓存已经满了,就会替换现存的一个块。
- 决定该替换哪个块是由缓存的替换策略(replacement policy)来控制的。一个具有
最近最少被使用(LRU)替换
策略的缓存会选择最后被访问的时间距现在最远的块
。
- 缓存管理
- 存储器层次结构的
本质
是,每一层存储设备都是较低一层的缓存。 - 编译器管理
寄存器
文件,缓存层次结构的最高
层。
- 存储器层次结构的
- 程序中利用局部性
- 注意
内循环
,大部分计算和内存访问都发生在这里。 - 按照数据在内存中的存储顺序、以
步长为1
的来读数据,从而使得空间局部性最大
。 - 一旦从存储器中读入了一个数据对象,就
尽可能多地使用
它,从而使得时间局部性最大
。
- 注意
- 几种存储技术小结
- RAM有两种基本类型。
- 静态RAM(SRAM)快一些,但是也贵一些,它既可以用做CPU芯片上的高速缓存,也可以用做芯片下的高速缓存。
- 动态RAM(DRAM)慢一点,也便宜一些,用做主存和图形帧缓冲区。
- ROM:即使是在关电的时候,ROM也能保持它们的信息,可以用来存储固件。
- 旋转磁盘是机械的非易失性存储设备,以每个位很低的成本保存大量的数据,但是其访问时间比DRAM长得多。
- 固态硬盘(SSD)基于非易失性的闪存。
- RAM有两种基本类型。
- 一些规律
- 对于
较快
的存储技术,每个位会更贵
,而且容量更小
。- 特别地,DRAM和磁盘访问时间,远远大于CPU周期时间。
- 系统将存储器组织成
存储设备的层次结构
来弥补这些差异:- 较小、较快的设备在顶部,
- 较大、较慢的设备在底部。
- 如果程序编写有好的局部性,
- 大多数数据都可以
从较高层得到服务
, - 存储系统能以较高层的速度运行,同时具有较低层的成本和容量。
- 大多数数据都可以
- 对于