高速缓存cache

时间:2024-03-16 14:55:19

高速缓存cache

cache的基本原理

cache是一种小容量高速缓冲存储器,由快速SRAM组成。在CPU和贮存之间设置cache,总是把主存中被频繁访问的活跃程序块和数据块复制到cache。

  • cache是为了解决CPU与主存的速度匹配问题设计的

  • cache机制能够达到目的的根本原因是程序执行时存在访问局部性特点:

    • 时间局部性
      被访问单元在一个较短的时间间隔内很可能又被访问
    • 空间局部性
      被访问某单元的邻近单元在一个较短时间间隔内很可能也被访问

cache映射关系

  • 直接映射 :每个寄存器地址仅仅只对应到cache中的一个位置
    (块地址)mod(cache中的块数)
    • 标记(tag):
      标记中包含了地址信息,这些地址信息可以用来判断cache中的字是否就是我们请求的字。标记中只需包含高位,即没有用来检索cache的那些位
    • 有效位(valid bit):
      表中的一个字段,用来标识一个块中是否含有一个有效数据

cache直接映射过程如下图所示:
高速缓存cache

  • cache直接映射的相关计算
    高速缓存cache

  • 全相联映射 :一个块可以被放在cache中的任何位置
    在全相联cache中,块可以被放在任何位置,因此cache中全部块的标记都要被检索

  • 组相联映射 :块可以放置到cache中的部分位置
    (块地址)mod(cache中的块数)
    • 每个块有n个位置可放的cache被称作n路组相联cache
    • 块可以被放在组中的任何位置,因此组中所有块的标记都要被检索
    • 提高相联度的好处在于能够降低缺失率,但是会增加命中时间

高速缓存cache

缺失率

  • 增加块大小通常会引起缺失率下降

    • 较大的cache块能更好地利用空间局部性来降低缺失率
    • 当块大小增加到一定程度时,缺失率也随之增加,因为此时cache块中块的数量变少,会引起大量的竞争
    • 仅仅增加块大小还会导致确实成本的增加
    • 块大小与缺失率之间的关系:
      高速缓存cache
  • 提高相联度能够降低缺失率,但是会增加命中时间

  • 使用多级cache技术可以减少缺失代价

    • 一级cache的块容量小,致力于减少命中时间
    • 二级cache的块容量大,致力于改善缺失率以减少长时间的访存代价

cache的缺失类型

  • 强制缺失(compulsory miss): 对从没有在cache中出现的块的第一次进行访问引起的缺失,也称为冷启动缺失(cold-start miss)
    • 增加块的大小会减少强制缺失,但过度增加会加大缺失代价,块太大还会增大缺失率
  • 容量缺失(capacity miss):由于cache容纳不了一个程序执行所需要的所有块而引起的cache缺失,当某些块被替换出去,随后在被调入时,将发生容量缺失
    • 增加容量大小会减少容量缺失,但是会增加访问时间
  • 冲突缺失(conflict miss):在组相联或者直接映射的cache中,多个块竞争同一个组时而引发的cache缺失,但在全相联的cache中不存在,这种cache缺失也叫碰撞缺失(collision miss)
    • 提高相联度会减少冲突缺失,但是会增加访问时间

cache缺失处理

cache缺失是指由于数据不在cache中而导致被请求的数据不能满足要求。
cache缺失处理由两部分共同完成: 1)处理器控制单元 2)一个进行初始化主存访问和重新填充cache的独立控制器

  • cache缺失的处理步骤:
    • 把程序计数器(PC)的原始值(当前PC-4)送到存储器
    • 通知主存执行一次读操作,并等待主存访问完成
    • 写cache项,将从主存取回的数据写入cache中存放数据的部分,并将地址的高位(从ALU中得到)写入标记域,设置有效位
    • 重启指令执行第一步,重新取指,这次该指令在cache中

写操作处理

  • 写直达(write through):写操作总是同时更新cache和下一存储器层次,以保持二者的一致性
    • 在执行指令的时候,如果遇到store指令,我们只将该数据写入数据cache中(而不改变主存的内容),那么在写入数据后,主存与cache相应位置中的值将不同,这时候可以采用写直达法。
    • 缺失代价小
    • 更易于实现
    • 会花费大量的时间
  • 写缓冲(write buffer):一个保存等等写入主存数据的缓冲队列
    • 当用写直达法出现写缺失的时候,可以采用写缓冲的方法。当一个数据在等待写入主存时,先将它放入写缓冲中,当把数据写入cache和写缓冲中后,处理器可以继续执行。当写主存操作完成后,写缓冲里的数据项也得到释放。
    • 可能会发生阻塞,当存储器完成写操作的速度比处理器产生写操作的速度慢时
  • 写回(write-back):当发生写操作时,新值仅仅被写入cache块中,只有当修改过的块被替换时才写到较低层存储结构中
    • 写回机制可以提高系统性能,尤其是当处理器产生写操作的速度和主存处理写操作的速度一样快甚至更快时。
    • 处理器可以以cache而不是存储器能接受的速度写单个字
    • 多次写同一块的字只需对存储器层次结构较低层次进行一次写操作
    • 当块被写回是,由于写一整块,系统可以充分利用高宽带传输

替换块的选择

  • 最近最少使用(Least Recently Used,LRU)法
    总是替换很长时间没有使用的块
  • 先进先出(First-In-First-Out, FIFO)法
  • 最不经常使用(Least Frequently Used, LFU)法
  • 随机替换法