PC_高速缓冲存储器cache和局部性原理

高速缓冲存储器cache

  • cache也是存储器中的一种

程序访问的局部性原理

  • 时间局部性
    • 最近的未来要用到的信息,很可能是正在使用的信息
    • 因为程序中存在循环(重复执行相同一批的指令(取指操作))
  • 空间局部性
    • 最近的未来要用到的信息,很可能与现在正在使用的信息在存储空间上是邻近的
    • 因为指令通常是顺序存放,顺序执行的
    • 数据一般也是以向量/数组等形式簇聚地存储在一起的
  • 高速缓冲技术就是利用局部性原理,把程序正在使用的部分数据存放在一个高速的(容量较小的)Cache中
    • 使cpu的访存操作大多在针对cache进行,从而提高了程序的执行速度
程序访问数据的局部性好坏判断
  • 如果某个程序(片段)对数据的访问顺序和数据的存放顺序一致,那么认为程序空间局部性好
    • 比如二维数组
      • 按行访问,空间局部性好
      • 按列访问,空间局部性不好
  • 如果数据只被访问了一次(或者重复次数少),那么其时间局部性被认为是不好
    • 如果数据被重复访问,那么比较符合时间局部性
    • 因为最近访问过的数据已经存在于cache上,对这些数据的访问是快速的
程序指令的局部性判断
  • 比如for循环访问二维数组
    • for循环体被重复执行一批相同的指令,因此时间局部性好
    • 循环体内的指令被连续存放,和执行顺序一致,空间局部性好

局部性原理&算法时间复杂度

  • 以遍历二维数组求和所有元素的算法为例
    • 一种方法是按行遍历相加
    • 另一种是按列遍历相加
    • 它们在复杂度上都是 O ( n 2 ) O(n^2) O(n2)(渐进性能)
    • 但是由于计算机的结构特点,按行遍历的方式速度更快

cache的工作原理

  • 设主存由 2 n 2^n 2n个可编址的组成
    • 每字具有唯一的n位地址

cache和内存

  • 为了便于cache和主存交换信息,cache和主存被划分为大小相等的
  • cache块(缓存块)也称为cache行
    • 每块由若干个字或字节(Byte)组成,每个块内包含的存储字数相同
    • 块的长度称为块长(cache行长)
    • cache中仅保存最活跃的若干块(主存的)副本
    • cache按照某种策略,预测cpu在未来一段时间内预访问的数据,将其(从主存)载入到cache
地址划分
  • 通过分块操作:主存和cache的地址被分为两部分:
  • 主存:
    • 高m位表示主存的块地址
      • M = 2 m M=2^m M=2m表示主存块数
    • 低b位表示块内地址
  • cache:
    • 高c位表示缓存块的块号
      • C = 2 c C=2^c C=2c表示缓存块数
    • 低b位同样表示块内地址
  • 块的大小(内存块和缓存块大小都是 B = 2 b B=2^b B=2b(存储字))

cache工作过程/命中

  • 当CPU发出读请求时,
    • 若访存地址在Cache 中命中,就将此地址转换成Cache地址,直接对Cache进行读操作,与主存无关;
    • 若Cache不命中,则仍需访问主存,并把此字所在的块一次性地从主存调入Cache
      • 若此时Cache已满,则需根据某种替换算法,用这个块替换Cache中原来的某块信息。
      • 整个过程全部由硬件实现。
      • CPU 与 Cache之间的数据交换以字为单位
      • Cache与主存之间的数据交换则以Cache为单位。
    • 注意:某些计算机中也采用同时访问Cache和主存的方式
      • 若Cache命中,则主存访问终止;
      • 否则(cache未命中),则访问主存并替换Cache.
    • 当CPU发出写请求时,若Cache命中,有可能会遇到Cache 与主存中的内容不一致的问题
      • 例如,由于CPU 写Cache,把 Cache某单元中的内容从X修改成了X’,
        • 而主存对应单元中的内容仍然是X,没有改变。
        • 所以若Cache命中,需要按照一定的写策略处理,常见的处理方法有全写法和回写法

命中率

  • cpu欲访问的信息在cache中的比率称为cache的命令率

  • 一个程序执行期间,cache的总命中次数为 N c N_c Nc

  • 访问主存的总次数为 N m N_m Nm,则命中率H为

  • H = N c N c + N m 其 中 N = N c + N m 为 访 存 总 次 数 H=\frac{N_c}{N_c+N_m} \\其中N=N_c+N_m为访存总次数 H=Nc+NmNcN=Nc+Nm访

  • 为了提高访问效率,命中率H越高(越接近1)越好

    • t c t_c tc为命中时的cache访问时间
    • t m t_m tm为未命中cache时访问内存的时间
    • 1 − H 1-H 1H表示未命中率
  • cache-主存系统的平均访问时间:

    • 设cpu采用同时访问cache和主存的策略

    • T a = H t c + ( 1 − H ) t m T_a=Ht_c+(1-H)t_m Ta=Htc+(1H)tm

      • 根据全概率公式可以直接得出该公式

cache容量和命中率的关系

  • 一般而言,cache容量越大,cpu命中cache的概率越大
  • 但是当cache增大到一定程度后,命中率不再提高

cache块长和命中率的关系

  • 这一对关系比较复杂
  • 块长的最优值是难以确定的
  • 起初会由于块长的增加(由较小到大)提升命中率
    • 因为,局部性原理的作用:
      • 已被访问的字的附近字,近期可能也别访问
      • 快长增大,有望将更多有用的字存入cache,提高命中率
      • 🎈(如果存入的cache是不常用的字,那么反而会降低应有的命中率)
  • 当cache块增加到一定程度,命中率会下降
    • 因为,装入缓存的有用数据字的在每个块的占比p会由于过长的块长导致下降
    • 使得有限的cache空间被不常用的字(内容)占据了较多空间,而常用的字占比下降,降低命中率
      • 由于块长的增长,缓存块数目下降,新装入的块会覆盖旧有的块
      • 可能造成刚刚被装入cache的块很快就被覆盖,使得一些常用的字被覆盖,而新装入的数据可能只是用上一次
        • 因为,虽则块长的增大,距离被访问的字T的较远的其他字D也被调入cache,然而这些较远的字近期被访问的概率没有那么高
      • 也就是说,每次变动的内容太多,容易使得真正常用的数据被不必要地替换出去
        • 如果采用不太大的块长,在发生替换时就没那么容易发生这种不希望发生的替换

cache结构

cache存储体
  • 大多采用多体结构
地址映射变换机构
  • 将cpu送来的主存地址转换为cache地址
  • 主要是完成主存的块号(高位地址)与cache快号间的转换
  • 地址变换与主存地址采用的变换映射函数有关
替换机构
  • 当cache内容已满,无法接受新的来自主存的块时,有cache替换机构按照一定的替换算法来确定从cache内移出哪个块返回主存,而把来自主存的新块调入cache
  • 用户编程的地址是主存地址
  • cache块调换是透明的

  • 假设访问主存的速度v

    • 时间为 t m = 1 v t_m=\frac{1}{v} tm=v1
  • 访问cache的速度为5v

    • 时间为 t c = 1 5 t m ( = 1 5 v ) t_c=\frac{1}{5}t_m(=\frac{1}{5v}) tc=51tm(=5v1)
      • 整式化: t m = 5 t c t_m=5t_c tm=5tc
  • cache命中率为H=95%

    • 1-H=5%
  • 采用cache后性能提升为几倍 η = t m t a ; t a 是 引 入 c a c h e 后 的 访 存 时 间 ( 平 均 ) \eta=\frac{t_m}{t_a};t_a是引入cache后的访存时间(平均) η=tatm;tacache访()?

    • 倍数为 k = η − 1 k=\eta-1 k=η1

    • 设cpu采用同时访问cache和主存的策略

    • T a = 0.95 t c + 0.05 t m = 0.95 t c + 0.05 ( 5 t c ) = 1.2 t c T_a=0.95t_c+0.05t_m=0.95t_c+0.05(5t_c)=1.2t_c Ta=0.95tc+0.05tm=0.95tc+0.05(5tc)=1.2tc

    • η = 5 t c 1.2 t c = 4.17 ⋯ \eta=\frac{5t_c}{1.2t_c}=4.17\cdots η=1.2tc5tc=4.17

    • k = η − 1 = 3.17 k=\eta-1=3.17 k=η1=3.17

cache的主要问题

数据查找

  • 讨论如何判断数据是否在cache中

地址映射

  • 主存块如何放入cache中
  • 如何将主存地址转换为cache地址

替换策略

  • cache满后,如何对cache块进行替换/淘汰

写入策略

  • 保证主存块和cache块的数据一致性
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 程序局部性是指在程序执行过程中,相同或相邻的指令和数据往往会被反复访问并多次使用的特性。其原理主要包括时间局部性和空间局部性时间局部性指的是在执行过程中,程序的某个指令或者数据项在一段时间内被反复多次使用。这是由于计算机执行时,指令和数据往往以顺序的方式被取出和执行,因此当前执行的指令和数据有较大的概率在近期内再次使用。 空间局部性指的是在执行过程中,程序相邻的指令和数据在存储器中相对位置较近,因此在访问某个指令或数据时,往往会连续地访问其相邻的指令和数据。这是因为计算机在执行指令时,往往以块的方式从内存中读取数据,因此在读取一个数据时,很可能连续地读取其相邻的数据。 高速缓冲存储器cache)是位于中央处理器(CPU)和主内存之间的一层存储器,用来加快计算机的数据访问速度。其原理是通过提前将CPU需要访问的数据和指令缓存在高速缓存中,以满足CPU持续快速访问数据的需求。 高速缓存存储器采用了多级存储结构,通常包括L1、L2和L3三级缓存。L1缓存是与CPU核心直接相连的缓存,速度最快,容量较小;L2缓存是位于L1缓存和主内存之间的缓存,速度相对较慢但容量较大;L3缓存是当前多核处理器中常见的共享缓存,用于多个核心之间的数据共享。 高速缓存采用了缓存替换策略和缓存写策略来管理缓存中的数据。常见的缓存替换策略有最近不经常使用(LRU)、先进先出(FIFO)等,用来确定替换哪些数据;而缓存写策略主要有写回(Write Back)和写直达(Write Through),用来决定何时将数据写回主内存。其中,写回策略可以减少对主内存的写入次数,提高效率。 高速缓存的主要技术指标包括缓存容量、缓存关联度和缓存块大小。缓存容量表示缓存可以存储的数据量,一般以字节或字来衡量;缓存关联度表示CPU访问缓存时,需要比较的地址数量,常见的关联度有直接映射、全相联和组相联三种;缓存块大小则是指一次从主存中读取的连续数据的大小。这些指标的选择需要在缓存成本和命中率之间进行权衡。 ### 回答2: 程序局部性是指在程序执行过程中,程序具有空间局部性时间局部性的特点。空间局部性程序在一段时间内往往只访问某一部分数据,而时间局部性程序在某一时刻访问的数据,很可能在未来的几个时刻仍然需要被访问。 程序局部性的原理是基于程序的运行特点。在程序执行过程中,通常会存在循环结构和函数调用等,导致代码的局部执行次数较高。而在循环结构中,往往会反复访问相同的内存位置,这样就形成了空间局部性。同时,程序的执行也会遵循顺序性,即执行的指令往往是紧邻着的,这就形成了时间局部性高速缓冲存储器cache)是位于CPU和主存之间的一级缓存,其主要目的是加快CPU对数据的访问速度。cache的原理是通过存储最常用的数据,将其快速提供给CPU,从而减少了对主存的访问次数,提高了程序的执行效率。 cache的主要技术指标包括容量、速度和命中率。容量是指cache能够存储的数据量大小,容量越大可以存储更多的数据,但相应的访问速度可能降低。速度是指从cache中获取数据的时间,速度越快,就可以更快地满足CPU的需求。命中率是指CPU请求的数据在cache中的比例,命中率越高,表示cache中存储的数据满足CPU需求的概率越高。 为了提高cache的效率,可以采用多级缓存、使用更快的存储介质、采用更高效的替换算法等。同时,还可以根据程序局部性原理,设计合理的访问策略,例如预取技术和写策略等,来进一步提高cache的性能。 ### 回答3: 程序局部性是指在程序的执行过程中,存在着指令局部性和数据局部性指令局部性是指程序在一段时间内,执行的指令往往是同一部分代码附近的指令。数据局部性是指程序在一段时间内,使用的数据往往是同一部分内存附近的数据。 程序局部性的原理主要是基于计算机的存储结构和程序的执行特点。首先,由于计算机的主存和CPU的速度差异很大,为了提高程序的执行效率,计算机将一部分经常被访问的指令和数据存放在高速缓冲存储器cache)中。其次,程序的执行往往有顺序性和循环性,即程序指令和数据往往存在较好的局部性。因此,通过合理的缓存算法和数据替换策略,将程序中高频访问的指令和数据放入高速缓存中,可以大大减少主存和CPU之间的数据传输次数,从而提高程序的执行效率。 高速缓存存储器(cache)是位于CPU与主存之间的一级缓存,其主要目的是缓解CPU对主存的访问速度和处理器运算速度之间的矛盾。高速缓存存储器的原理是基于程序局部性原理。当CPU需要访问指令或数据时,首先在高速缓存中进行查找,如果找到则命中,直接从高速缓存中读取;如果没有找到,则访问主存并将所需要的指令或数据加载到高速缓存中,并将原有的数据替换掉。 高速缓存存储器的主要技术指标包括容量、关联度和替换策略。容量指的是高速缓存能够存放的指令和数据的数量,容量越大,命中率越高;关联度指的是高速缓存中存放指令和数据的方式,可以采用直接映射、组相联或全相联等方式;替换策略则是指当高速缓存已满时,该如何选择被替换的指令或数据,常见的替换策略有先进先出(FIFO)、最近最少使用(LRU)等。这些技术指标的选择要根据计算机的架构和应用需求进行权衡和调整,以达到最佳的性能和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值