我是靠谱客的博主 醉熏万宝路,最近开发中收集的这篇文章主要介绍cache,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

cache是一个怎样的存在

  • Cache 是一种小容量高速缓冲存储器,它由 SRAM 组成。

加快CPU访存速度有哪些方式?

  1. 提高DRAM芯片本身的速度
  2. 采用并行结构技术
  3. 在CPU和主存之间引入cache

为什么要引入cache?

从两个角度解释,一是没有引入的话有什么不好的地方,二是引入的话有什么好处:

  1. 没有它不好 CPU执行指令时,极快的CPU等待极慢的主存,CPU计算力被浪费
  2. 有了它更好 优秀的程序员写出的程序具有良好的局部性,引入cache可以很好的利用这一点

那么问题来了什么叫程序的局部性?

  • 程序的局部性体现在两个方面时间局部性和空间局部性。
  • 时间局部性是指最近被访问的存储单元(指令或数据)很快会又一次被访问。
  • 空间局部性是指正在被访问的存储单元附近的单元不久会被访问。
  • 为了更好的利用程序的时间局部性,cache保存近期频繁被访问的主存单元的数据。
  • 为了更好的利用程序的空间局部性,cache通常访存时,同时取回位置相邻的主存单元的数据,以数据块为单位和主存进行数据交换

为什么在引入cache会加快访存速度?

在 CPU 和主存之间设置一个快速小容量的存储器,其中总是存放最活跃(被频繁访问)的程序块和数据,由于程序访问的局部性特征,大多数情况下, CPU 能直接从这个高速缓存中取得指令和数据,而不必访问主存。

cache如何映射主存?

我们为什么要谈这件事呢?
这就要从CPU执行指令说起了,一条指令是CPU的最小操作单位,但是会包含一系列的微操作,这些微操作涉及到的数据来自存储器,这个过程就被我们叫做访存。而我们又知道访存不仅可以CPU直接与主存相连,还可以通过CPU连接借助cache与主存进行数据交换。这其中涉及到CPU与cache的数据交换,cache与主存的数据交换。对于一条指令,CPU解析出操作码字段,地址码字段等,地址码字段可以是寄存器编号或主存单元编号等,当然也可能是

  • 三种方式:直接映射、全相联映射、组相联映射
    首先需要明白:
  • 每个cache行需要一个有效位V,某行置V为0则淘汰该cache行的主存;装入一个新的主存块则置V为1。
  • 无论是哪一种映射方法都是多个主存块映射到一个cache行中。
  • cache对程序员是透明的,或者说是不可见的,程序员编程时根本不知道访存是在访问cache还是主存,但是对cache深入了解有助于写出更加高效的程序(或者说局部性更好的程序)。
    下面分别解释三种映射方式

直接映射

直接映射很简单就是模n同余的主存地址映射到同一个cache行中,这实现的主存映射到cache固定行

全相联映射

全相联映射是指对于每个主存块,在cache中随便找一个空闲行存放,这实现了每个主存块映射到cache中的任意行

组相联映射

  • 组相联映射兼顾前两者的的特点,首先cache是分2c行的,再把这些行分成2q组,每组有2c-q行。
  • 每组21行称为2路组相联,每组22称为4路组相联。
  • 主存是分2m块的,把这些块按照2q/组群,分成2m-q组群

最后

以上就是醉熏万宝路为你收集整理的cache的全部内容,希望文章能够帮你解决cache所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部