您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > Cache基础知识介绍
什么是cache•Cache又叫高速缓冲存储器,位于CPU与内存之间,是一种特殊的存储器子系统。•目前比较常见的是两极cache结构,即cache系统由一级高速缓存L1cache和二级高速缓存L2cache组成,L1cache通常又分为数据cache(I-Cache)和指令cache(D-Cache),它们分别用来存放数据和执行这些数据的指令。Level2cachememoryCPULevel1cacheMicroprocessorFastestFastSlow•两极cache相比较而言,L1cache的容量小,但数据存取速度较快,L2cache的容量大,但数据存取速度较慢。部分系统中也存在三级cache的结构。Cache的作用是什么•Cache的作用就是为了提高CPU对存储器的访问速度。•电脑的内存是以系统总线的时钟频率工作的,这个频率通常也就是CPU的外频。但是,CPU的工作频率(主频)是外频与倍频因子的乘积。这样一来,内存的工作频率就远低于CPU的工作频率了。这样造成的直接结果是:CPU在执行完一条指令后,常常需要“等待”一些时间才能再次访问内存,极大降了CPU工作效率。在这样一种情况下,cache就应运而生了。取指令栈存取数据存取地址时间N次循环迭代线性序列指令地址……96loop:ADDr2,r1,r1100SUBIr3,r3,#1104BNEZr3,loop108……112典型的内存访问模式Cache的工作原理•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与主存的传输单位。•路(way):路是组相联映射方式的cache结构中的基本存储单位,每一路存储一个块的数据。•组(entry):组是组相联映射方式的cache对块进行管理的单位。•区(tag):块的地址对应的主存储器中的区。•块内偏移地址(offset):用来标示块内一个字节的地址。•组相联映射方式下主存储器的地址空间由,区,组和块内偏移地址组成。TagOffsetEntryAddress031AddressTag0Way0Way1Way2Wayn-1WaynAddressTag1AddressTag2AddressTagn-1AddressTagnDataDataDataDataDataEntry•组相联映射方式下cache的内部结构。Cache的替换算法Cache可以采用的替换算法主要有以下几种:•先入后出(FILO)算法•随机替换(RAND)算法•先入先出(FIFO)算法•近期最少使用(LRU)算法•随机(RAND)法是随机地确定替换的存储块。设置一个随机数产生器,依据所产生的随机数,确定替换块。这种方法简单、易于实现,但命中率比较低。•先进先出(FIFO)法是选择那个最先调入的那个块进行替换。当最先调入并被多次命中的块,很可能被优先替换,因而不符合局部性规律。这种方法的命中率比随机法好些,但还不满足要求。•近期最少使用(LRU)法是依据各块使用的情况,总是选择那个最近最少使用的块被替换。这种方法比较好地反映了程序局部性规律,命中率最高。如何提高cache的性能•提高cache的性能也就是要降低主存的平均存取时间主存平均存取时间=命中时间+未命中率*未命中惩罚•提高cache的性能有以下三种方法:减少命中时间,减少未命中率,减少未命中惩罚。影响命中率的硬件因素主要有以下四点:•Cache的容量。•Cache与主存储器交换信息的单位量(cachelinesize)。•Cache的组织方式•Cache的替换算法代码段Afor(i=0;i1024;i++)for(j=0;j4;j++)sum+=x[i][j]代码段Bfor(j=0;j4;j++)for(i=0;i1024;i++)sum+=x[i][j]•通过优化代码提高cache命中率x[i][0]x[i][1]x[i][2]x[i][3]x[i+2][0]x[i+2][1]x[i+2][2]x[i+2][3]Way0Way1Entry0x[i+1][0]x[i+1][1]x[i+1][2]x[i+1][3]x[i+3][0]x[i+3][1]x[i+3][2]x[i+3][3]Way0Way1Entry1对数组intx[1024][4]进行求和代码段A:对于数组元素x[i][0](i=0…1024)的访问是miss的,但对于x[i][1],x[i][2],x[i][3]的访问是hit的,因此miss的总次数为1024次。代码段B:对于数组元素x[i][0],x[i][1],x[i][2],x[i][3](i=0…1024)的访问都是miss的,他们被x[i+4][0],x[i+4][1],x[i+4][2],x[i+4][3]所替换,因此miss的总次数为4096次。•当需要对大量数据访问的时候,一定要注意对内存的访问要尽量是连续而且循环内层的访问接近cache的块大小,以提高cache的命中率,从而提高程序的运行效率。Cache的一致性问题•在采用cache的系统中,同样一个数据可能既存在于cache中,也存在于主存中,两者数据相同则具有一致性,数据不相同就叫做不一致。•Cache主要有两种写策略写直达法(writethrough)和写回法(writeback)•写直达法(writethrough)方法:在对cache进行写操作的同时,也将内容写到主存中。优点:可靠性较高,操作过程比较简单。缺点:写操作速度得不到改善,与写主存的速度相同。•写回法(writeback)方法:在CPU执行写操作时,只写入cache,不写入主存。优点:速度较高。缺点:可靠性较差,控制操作比较复杂。•对于多个主设备的共享存储总线系统,如带有DMA的系统,或者多处理器系统,由于其他的主设备也可以改变主存的内容,而这种改变是cache无法得知的,因此必须对cache的一致性问题进行处理。CPUX``DMAX`主存储器CacheIO•可以将主存中的一块地址空间设置为非cache访问,CPU对这部分地址空间进行直接访问,不经过cache处理,对这部分地址空间的访问的效率会变低。•如果要保证更改的数据写入存储器中,则选择WRITE-THROUGH方式或者使用FLUSH指令,将cache内容刷新到主存中。•如果要保证读出的内容就是主存中的内容,则在读之前,先将存储此数据的cacheline无效,即运行INVALID指令。
本文标题:Cache基础知识介绍
链接地址:https://www.777doc.com/doc-3318148 .html