什么是cache ? Cache又叫高速缓冲存储器,位于CPU与内存之间,是一种 特殊的存储器子系统。 ? 目前比较常见的是两极cache结构,即cache系统由一级高 速缓存L1 cache和二级高速缓存L2 cache组成,L1 cache通 常又分为数据cache(I-Cache)和指令cache(D-Cache), 它们分别用来存放数据和执行这些数据的指令。 ? 两极cache相比较而言,L1 cache的容量小,但数据存取速 度较快,L2 cache的容量大,但数据存取速度较慢。部分 系统中也存在三级cache的结构。 Cache的作用是什么 ? Cache的作用就是为了提高CPU对存储器的访问速度。 ? 电脑的内存是以系统总线的时钟频率工作的,这个频率 通常也就是CPU的外频。但是,CPU的工作频率(主频)是 外频与倍频因子的乘积。这样一来,内存的工作频率就 远低于CPU的工作频率了。这样造成的直接结果是: CPU在执行完一条指令后,常常需要“等待”一些时间 才能再次访问内存,极大降了CPU工作效率。在这样一 种情况下,cache就应运而生了。 Cache的工作原理 …… loop: ADD r2, r1, r1 SUBI r3, r3, #1 BNEZ r3, loop …… 指令地址 96 100 104 108 112 典型的内存访问模式 ? CPU运行程序是一条指令一条指令地执行的,而且指令地 址往往是连续的,意思就是说CPU在访问内存时,在较短 的一段时间内往往集中于某个局部,这时候可能会碰到一 些需要反复调用的子程序。系统在工作时,把这些活跃的 子程序存入比主存快得多的cache 中。 ? CPU在访问内存时,首先判断所要访问的内容是否在cache 中,如果在,则称为命中(hit),此时CPU直接从cache中 调用该内容;否则称为未命中(miss), CPU会通过cache 对主存中的相应内容进行操作。 Cache的地址映射方式 Cache与主存之间可以采取的地址映射方式有以下三种: ? 全相联映射方式 ? 直接相联映射方式 ? 组组相联映射方式 ? 全相联方式 地址映射规则:主存的任意一块可以映射到cache中的任意 一块 (1) 主存与cache分成相同大小的数据块。 (2) 主存的某一数据块可以装入cache的任意一块空间中。 优点:命中率比较高,cache存储空间利用率高。 缺点:访问相关存储器时,每次都要与全部内容比较,速 度低,成本高,因而应用少。 ? 直接相联方式 地址映射规则: 主存储器中一块只能映射到cache的一个 特定的块中。 (1) 主存与cache分成相同大小的数据块。 (2) 主存容量应是cache容量的整数倍,将主存空间按cache 的容量分成区,主存中每一区的块数与cache的总块数相 等。 (3) 主存中某区的一块存入cache时只能存入缓存中块号相 同的位置。 优点:地址映射方式简单,数据访问时,只需检查区号是 否相等即可,因而可以得到比较快的访问速度,硬件设备 简单。 缺点:替换操作频繁,命中率比较低。 ? 组相联映射方式 地址映射规则: (1) 主存和cache按同样大小划分成块。 (2) 主存和cache按同样大小划分成组。 (3) 主存容量是cache容量的整数倍,将主存空间按cache区 的大小分成区,主存中每一区的组数与cache的组数相同。 (4) 当主存的数据调入cache时,主存与cache的组号应相等, cache cache 也就是各区中的某一块只能存入cache的同组号的空间内, 但组内各块地址之间则可以任意存放, 即从主存的组到 cache的组之间采用直接映射方式;在两个对应的组内部 采用全相联映射方式。 优点:块的冲突概率比较低,块的利用率大幅度提高,块 失效率明显降低。 缺点:实现难度和造价要比直接映射方式高。 ? 块:块是cache与主存的传输单位。 ? 路(way): 路是组相联映射方式的cache结构中的基本存 储单位,每一路存储一个块的数据。 ? 组(entry):组是组相联映射方式的cache对块进行管理的 单位。 ? 区 (tag) :块的地址对应的主存储器中的区。 ? 块内偏移地址(offset): 用来标示块内一个字节的地址。 ? 组相联映射方式下主存储器的地址空间由,区,组和块内 偏移地址组成。 ? 组相联映射方式下cache的内部结构。 Cache的替换算法 Cache可以采用的替换算法主要有以下几种: ? 先入后出(FILO)算法 ? 随机替换(RAND)算法 ? 先入先出(FIFO)算法 ? 近期最少使用(LRU)算法 ? 随机(RAND)法是随机地确定替换的存储块。设置一个随机 数产生器,依据所产生的随机数,确定替换块。这种方法 简单、易于实现,但命中率比较低。 ? 先进先出(FIFO)法是选择那个最先调入的那个块进行替换。 当最先调入并被多次命中的块,很可能被优先替换,因而 不符合局部性规律。这种方法的命中率比随机法好些,但 还不满足要求。 ? 近期最少使用(LRU)法是依据各块使用的情况,总是选择那 个最近最少使用的块被替换。这种方法比较好地反映了程 序局部性规律,命中率最高。 如何提高cache的性能 ? 提高cache的性能也就是要降低主存的平均存取时间 主存平均存取时间=命中时间+未命中率*未命中惩罚 ? 提高cache的性能有以下三种方法:减少命中时间,减少 未命中率,减少未命中惩罚。 影响命中率的硬件因素主要有以下四点: ? Cache的容量。 ? Cache与主存储器交换信息的单位量(cache line size)。 ? Cache的组织方式 ? Cache的替换算法 ? 通过优化代码提高cache命中率 对数组int x[1024][4]