✍内容

cache

  • 分为多个 set
    • 每个 set 有多个行 line,使用变量 E 来表示
      • 每个 line 分为三个部分
        • valid 有效位 1 个 bit
          • 表示当前这一行信息是否有效(能不能用)
          • 值为 1 表示有效
          • 值为 0 表示无效
        • tag 标记
          • 用来表示目标数据是否在当前这一行中(有没有用)
        • 数据块
          • 一小部分内存数据的副本,大小用 B 来表示
  • cache 的大小用(S, E, B, m)元祖表示

    cache 如何知道自己包含目标数据呢
    目标数据长这样:

    目标地址
  • 被参数 S 和 B 分成了三个字段
  • 第一步:通过长度为 s 的组索引位来确定目标数据在哪个 set
  • 第二步:在确定的 set 中寻找哪个 line
    • 通过长度为 t 的标记实现
    • 注意找到的 line 中的 valid 位有效

Cache 为什么要用中间的作为组索引,而不是用高位
如果高位作为组索引位,那么一些连续的内存块就会映射到相同的 set 中


有一个 int 数组,一个 int 是 4 个字节,被放在右面这 4 个相同颜色的块里,比如 1 被放在绿色块中,给映射到了左边的绿色 set,读这个数组的时候,我们跳到第二个元素,这个元素被放在了第二个 line 中,cache 在索引的时候会反复跳 line,这是很费时的操作,不利于空间局部性