体系结构学习12-Cahce

1、Cache的必要性:

CPU处理速度远超内存访问速度(Processor-Memory Gap)
主要体现在

  • latency :主存50~100ns,CPU <1ns
  • Bandwidth:指令和数据都需要访问内存
  • Bandwidth-Delay Product:Little‘s Law

现实中存储单元的问题

  • 越大地址越多驱动单元越多线越长访问越慢
  • 越快越昂贵
  • 带宽越宽越昂贵

2、存储层次结构与访存局部性

数据管理方式:

  • Manual:程序负责管理数据访问
  • Automatic:硬件管理数据访问

时间局部性、空间局部性

3、cache的性能

  • block:利用空间局部性
  • frame:存放block的空间
  • hit/miss:
  • miss ratio
  • hit time
  • miss penalty

计算平均访问时间需要从外向内计算访问时间,因为内部miss就需要向外部继续请求。(Ti = ti + mi*Ti+1)
系统对内部的cahce miss更敏感,外层的miss变化对内部的访问时间影响较小。

4、Cache的结构

  • 块划分
    直接映射、全相联(最慢,比较器最多)、组相联

  • cache替换
    一般不针对直接映射,主要是组相联,全相联。
    (1)随机替换:简单但是性能无法保证。
    (2)LRU:替换最不经常访问。
    (3)FIFO:简单但是没考虑块使用频率。
    (4)NMRU:LRU的简化版本,替换不经常访问的。

  • LRU算法
    需要额外空间存储访问情况、需要修改所有块的访问状态信息。
    采用状态机记录块的状态以及变化,但是路数增加会导致状态机膨胀。
    LRU不是最优的算法。

  • Belady’s OPT:miss rate最优算法,替换最久之后会用到的块。(但是没有考虑内存访问的并行性,所以stall不是最优)

  • NMRU:只记录最常使用的组以及组内最常用的块。

  • Victim/Next Victim Policy:确定需要替换的块,随机选择Victim,动态调整Victim。只需要记录Victim和Next Victim

  • cache写回策略
    cache hit
    直写法:覆盖cache和memory内容,确保两者一致。
    回写法:只写cache,在被替换出去时写回主存。(Dirty 位)

    cache miss
    非写分配:不写回cache,直接写回内存(+直写法)
    写分配:把数据取回cache然后写 (+回写法)

5、Cache的性能

  • 降低hit time
    (1)在判断hit时提前读取其data
    (2)cache使用虚拟地址寻址会导致更多的冲突以及虚拟地址重名,不同虚拟地址指向同一个物理地址;cache应该使用物理地址寻址,但TLB转换地址会增加时延——>可以使用虚拟地址的offset中的部分位作为索引,与物理地址转化并行来提高速度,但是index大小限制于页大小从而限制了cache大小——>把部分index放入虚地址tag,page部分index检索所有可能性 / page color 确保虚拟地址的tag低位index和物理地址一样,需要tlb分配时做额外工作。
    (3)预测:(争取达到直接映射的速度)
    (4)降低指令cache 的hit time:Trace cache 按照指令历史执行顺序存放在Icache
    (5)降低写入cache的hit time:写错了会导致数据丢失——>采用并行执行,但是会备份原数据——>Piplined:分成两个步骤写回:匹配、写入

  • 降低miss ratio
    常见类型
    (1)Compulsory miss:第一次访问一定会miss
    (2)Capacity miss:cache容量不够产生
    (3)Conflict miss:不同内存映射在同一个cache地址,需要替换
    (4)Coherence miss:多CPU执行时的数据问题
    解决方式
    (1)增大cache 容量:速度增快但芯片面积变大
    (2)增大block:利用空间局部性,tag减小匹配更快。但是容易浪费带宽,增加conflict。(多为64bits)
    (3)增加组内路数
    (4)增加cache级数:Global miss rate 和 local miss rate
    Inclusive multilevel cache:不同级cache可以保存一样的数据
    Exclusive Multilevel cache:不同级cache只保存一份数据
    (5)优化软件代码:利用局部性

  • 降低miss penalty
    (1)Victim cache:miss时访问victim cache可以避免访存,但是增加了计算复杂度
    (2) Critical word first:内存优先反汇需要的数据,其他的慢慢返回
    (3)Early Restart:得到需要的数据后就开始执行,可以不用等待cache全部填完
    (4)Write Buffer:写数据时记录在buffer中,可以在之后的周期写,也可以整合同一地址写数据
    (5)Non-Blocking cache:Memory level parallel
    hit under miss:让miss与之后指令的hit并行执行
    miss under miss:让miss后再多执行指令,同时发现多个miss,统一发送访存请求。
    数据结构:MSHRs(Miss status handling register)
    (6)Increase Cache bandwidth:多端口cache(实现起来比较困难,处理读写操作)实际上可以用虚拟多端口——前半周期读,后半周期写;也可以用Multi cache copies,可以同时读,但是写需要重复写几份;cache banking——按地址类别(比如低地址0/1)访问不同端口,但是也会有conflict,不能达到真正的多端口cache,类似于memory banking。让每一个小的bank独立处理读写请求,增加系统带宽。

你可能感兴趣的:(体系结构)