07 降低cache不命中率

目录

8种降低cache不命中率的方法

增加cache大小

增加cache容量

提高相连度

伪相连cache

硬件预取

编译器控制的预取

编译优化

“牺牲”cache

三种类型的不命中

分类

强制性不命中

容量不命中

冲突不命中

三种不命中所占的比例

减少三种不命中的方法

  1. 8种降低cache不命中率的方法

    1. 增加cache大小

      1. 对于给定的cache容量, 当块大小增加时, 不命中率开始是下降的, 后来反而上升
        1. 原因: 一方面减少了强制性不命中, 另一方面又增加了冲突不命中
    2. 增加cache容量

    3. 提高相连度

      1. 相连度超过8就意义不大了
      2. 提高相连度是以牺牲命中时间为代价
      3. 2 : 1 cache经验规则
        1. 容量为N的直接映像cache不命中率和容量为N/2的二路组相连的cache不命中率相同
    4. 伪相连cache

      1. 优点: 命中时间小, 不命中率低
        1. 工作原理
          1. 在逻辑上把直接映像的cache上下分成两个区. 对于任何一次访问, 伪相连cache先按照直接映像cache的方式去处理. 若命中, 则访问方式和直接映像cache的方式一样. 若不命中, 则去另一个区的对应位置去查找. 若找到则发生伪命中, 否则就去访问下一级存储器
      2. 快速命中和慢速命中
        1. 分别对应快速命中和慢速命中
    5. 硬件预取

      1. 指令和数据都可以预取
    6. 编译器控制的预取

      1. 目的: 使执行指令和读取数据可以重叠执行
      2. 每次预取花费一条指令的开销
      3. 按照预取数据所放置的位置可以分为两种
        1. 寄存器预取
        2. cache预取
      4. 按照预取的处理方式可以分为
        1. 故障性预取
        2. 非故障性预取
    7. 编译优化

      1. 通过对软件进行优化来降低不命中率
      2. 程序代码和数据重组
        1. 重新组织程序而不影响程序的正确性
    8. “牺牲”cache

      1. 能减少冲突不命中次数而又不影响时钟频率的方法
      2. 基本思想
        1. 在cache和它的下一级存储器之间设置一个全相连的小cache, 用于存放刚被替换出去的块, 以备重用.
      3. 优点: 可以明显减少冲突不命中
  2. 三种类型的不命中

    1. 分类

      1. 强制性不命中

        1. 第一次访问cache的不命中就是强制性不命中
      2. 容量不命中

        1. 某些块刚被替换出去又要重新访问, 这个就是容量不命中
      3. 冲突不命中

        1. (碰撞不命中, 干扰不命中)
    2. 三种不命中所占的比例

      1. 相连度越高, 冲突不命中就越少
      2. 强制性不命中和容量不命中不受相连度的影响
      3. 强制不命中不受cache容量的影响, 但容量不命中却随着容量的增加而减少
    3. 减少三种不命中的方法

      1. 强制性不命中: 增加快大小 预取
      2. 容量不命中: 增加容量
      3. 冲突不命中: 增加相连度

 

    原文作者: 壹仟
    原文地址: https://blog.csdn.net/qq_44756419/article/details/105357996
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞