高速缓存基础知识

一、高速缓存 (cache)

1. 高速缓存的核心思想

  1. 对于每个 k k k ,位于 k k k 层的更快更小的存储设备作为位于 k + 1 k+1 k+1 层的更大更慢的存储设备的缓存,层次结构的每一层都缓存自来自较低一层的数据对象。

2. 高速缓存的基本单元

  1. k k k 层的存储器被划分为较少的块的集合,每个块的大小与 k + 1 k+1 k+1 层块的大小一样。
  2. 数据总是以块大小为传送单元在 k k k k + 1 k+1 k+1 层复制。

3. 高速缓存的结构

  1. ( S , E , B , m ) (S,E,B,m) (S,E,B,m)
    每个存储器地址有 m m m 位,形成 2 m 2^{m} 2m 个不同的地址 ( k ) (k) (k)
    这样一个存储器的高速缓存被组织成一个有 S = 2 s S=2^{s} S=2s 的高速缓存组 ( k + 1 ) (k+1) (k+1)
    每个缓存组包含 E E E 个高速缓存行。
    每一行是由一个有效位,一些标记位和 B = 2 b B=2^{b} B=2b 字节的数据块组成的。

4. 地址的结构

  1. 每一位地址都有其标志位,组索引和块偏移。
    在长度为 m m m 的存储器中,地址这样存储:
t = m − ( s + b ) t=m-(s+b) t=m(s+b) 位标记位s位组索引b位块偏移
  1. 每个块都由标记位和组索引唯一决定,每个地址都由块和块偏移唯一决定。

4. 直接映射高速缓存(每个组只有 1 行)

高速缓存确认一个请求是否命中,然后抽取出字的过程分为三步:

  1. 组选择:从地址 w w w 抽出组索引位,找到高速缓存组。
  2. 行匹配:先看有效位,再看 w w w 所在的标记位是否跟行里面的标记位对应
  3. 字选择:如果对应,则通过块偏移找到对应位。
  4. 不命中时的行替换:从下一层取出被请求的块,用新取出的行替换当前行

容易产生冲突未命中,不够灵活

5. 组相联高速缓存(每个组有多行)

  1. 组选择跟直接映射一样
  2. 行匹配必须检查多行的标记位和有效位
  3. 字选择跟直接映射一样
  4. 不命中时的行替换:问题在于,该替换哪一行?
    1. 如果有空行则替换空行
    2. 如果没有空行
      1. LFU:替换过去某个时间窗口内引用次数最小的行
      2. LRU: 替换最后一次访问时间最久远的一行

6. 全相联高速缓存(一个组包含所有高速缓存行)

  1. 只有一个组所以不需要组选择
  2. 行匹配和字选择都和组相联高速缓存一样

只适合做小的高速缓存,最灵活。

二、写策略

1. 写命中

要写一个已经缓存了的字 w w w,在高速缓存更新了 w w w 的副本之后,怎么更新下一层的 w w w

  1. 直写:立即将w的高速缓存块写回到低一层,每次写都会引起总线流量
  2. 写回:尽可能地推迟更新,当替换算法要驱逐当前块的时候,才更新,缺点是需要维护额外的修改位。

2. 写不命中

  1. 写分配:加载相应的第一层中的块到高速缓存中,然后更新这个块。
  2. 非写分配:避开高速缓存,直接把这个字写到低一层。

直写高速缓存通常是非写分配的,写回高速缓存通常是写分配的

3.策略组合:

建议使用写回和写分配的高速缓存模型,因为写回通常试图利用局部性,写回的高复杂性也不再成为阻碍。

  • 31
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值