第六章 存储器层次结构


存储技术


  1. 静态RAM(SRAM):常用作高速缓存存储器
  2. 动态RAM(DRAM):常用作主存以及图形系统的帧缓冲区
  3. 只读存储器(ROM):存储在ROM中的程序通常称为固件
  4. 磁盘(Disk):通过盘面、柱面和扇区进行划分
  5. 固态硬盘(SSD):基于闪存的存储技术

速度较快的存储技术每字节的成本更高,而且容量相对较小。

局部性原理


一个编写良好地计算机程序常常具有良好的局部性。

  • 时间局部性 :被引用过一次的内存位置很有可能在不远的将来再被多次引用。
  • 空间局部性 :如果一个内存位置被引用了一次,那么程序很有可能在不远的将来引用附近的一个内存位置。

程序局部性遵循一些基本原则

  • 重复引用相同变量的程序具有良好的时间局部性。
  • 对于具有步长为k的引用模式的程序,步长越小,空间局部性越好。具有步长为1的引用模式的程序有很好的空间局部性。
  • 对于取指令来说,循环具有很好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。

缓存


缓存中的数据以块大小为传送单元。
高速缓存的结构可以用元组(S,E,B,m)描述:S描述缓存所属的组,E描述缓存所在的行,每个高速缓存块有B个字节。
标记位t = m - s - b,缓存结构将m个地址位划分为t个标记位,s个组索引,b个块偏移位,每一行还有1个有效位。

  • 块是一个固定大小的信息包,在高速缓存和主存(或下一次高速缓存)之间来回传送
  • 行是高速缓存的一个容器,存储块以及其他信息(例如有效位和标记位)
  • 组是一个或多个行的集合

高速缓存使用地址的中间位作为组索引,这样相邻的块可以映射到不同的高速缓存组。

高速缓存的类型

  1. 直接映射高速缓存:每个组只有一行
  2. 组相联高速缓存:每个组保存多于一个的高速缓存行且组数大于1
  3. 全相联高速缓存:由一个包含所有高速缓存行的组组成,只适合做小的高速缓存

基于缓存的存储器层次结构行之有效

  • 利用时间局部性:同一数据对象可能会被多次使用
  • 利用空间局部性:块通常包含多个数据对象

缓存不命中


  1. 空缓存/冷缓存:此类不命中称为强制性不命中/冷不命中
  2. 冲突不命中:一些对象会映射到同一个缓存块
  3. 容量不命中:缓存太小以至于不能处理这个工作集

编写高速缓存友好的代码


  1. 把注意力集中在核心函数里的循环上
  2. 尽量减少每个循环内部的缓存不命中数量
  3. 步长为1的引用是高速缓存友好的,因为缓存都是将数据存储为连续的块(空间局部性)(C语言以行优先顺序存储数组)
  4. 对局部变量反复引用是好的,因为编译器将它们缓存在寄存器文件中(时间局部性)

评论

还没有登陆?评论请先登陆注册

还没有评论,抢个沙发吧!

 联系方式 contact me

Github
Email
QQ
Weibo