精华内容
下载资源
问答
  • 一级cache位于
    千次阅读
    2019-10-16 16:09:46

    CPU缓存

      CPU缓存(Cache Memory)是位于 CPU 与内存之间的临时存储器,它的容量比内存小的多,但是交换速度却快得多。
      CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。高速缓存的出现主要是为了解决 CPU 运算速度与内存读写速度不匹配的矛盾。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的(?如何判断),当CPU调用大量数据时,就可先缓存中调用,从而加快读取速度。
      缓存大小是 CPU 的重要指标之一,而且缓存的结构和大小对 CPU 速度的影响非常大,CPU 内缓存的运行频率极高,一般是和处理器同频运作,工作效率远远大于系统内存和硬盘。实际工作时,CPU 往往需要重复读取同样的数据块,而缓存容量的增大,可以大幅度提升CPU内部读取数据的命中率,而不用再到内存或者硬盘上寻找,以此提高系统性能。但是从CPU芯片面积和成本的因素来考虑,缓存都很小。
      按照数据读取顺序和与 CPU 结合的紧密程度,CPU 缓存可以分为一级缓存,二级缓存,部分高端 CPU 还具有三级缓存,每一级缓存中所储存的全部数据都是下一级缓存的一部分,这三种缓存的技术难度和制造成本是相对递减的,所以其速度是相对递减的,容量是相对递增的。当CPU要读取一个数据时,首先从一级缓存中查找,如果没有找到再从二级缓存中查找,如果还是没有就从三级缓存或内存中查找。一般来说,每级缓存的命中率大概都在80%左右,也就是说全部数据量的 80% 都可以在一级缓存中找到,只剩下 20% 的总数据量才需要从二级缓存、三级缓存或内存中读取,由此可见一级缓存是整个CPU缓存架构中最为重要的部分。

    一级二级三级缓存的区别

      一级缓存可分为一级指令缓存和一级数据缓存。一级指令缓存用于暂时存储并向CPU递送各类运算指令;一级数据缓存用于暂时存储并向CPU递送运算所需数据,这就是一级缓存的作用。 那么,二级缓存的作用又是什么呢?简单地说,二级缓存就是一级缓存的缓冲器:一级缓存制造成本很高因此它的容量有限,二级缓存的作用就是存储那些CPU处理时需要用到、一级缓存又无法存储的数据。同样道理,三级缓存和内存可以看作是二级缓存的缓冲器,它们的容量递增,但单位制造成本却递减。
      需要注意的是,无论是二级缓存、三级缓存还是内存都不能存储处理器操作的原始指令,这些指令只能存储在CPU的一级指令缓存中,而余下的二级缓存、三级缓存和内存仅用于存储CPU所需数据。 根据工作原理的不同,目前主流处理器所采用的一级数据缓存又可以分为实数据读写缓存和数据代码指令追踪缓存2种,它们分别被 AMD 和 Intel 所采用。不同的一级数据缓存设计对于二级缓存容量的需求也各不相同,下面让我们简单了解一下这两种一级数据缓存设计的不同之处。
      一般来说,一级缓存大概128KB左右。

    更多相关内容
  • 一级缓存使用内存(同时支持 Ehcache 2.x、Ehcache 3.x 和 Caffeine),第二级缓存使用 Redis(推荐)/Memcached。由于大量的缓存读取会导致L2的网络成为整个系统的瓶颈,因此L1的目标是降低对L2的读取次数。该缓存...
  • L1 Cache(一级缓存)

    千次阅读 2019-05-24 16:31:08
    CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写...

    转自 https://blog.csdn.net/hdanbang/article/details/45619573

           CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。

           缓存大小也是CPU的重要指标之一,而且缓存的结构和大小对CPU速度的影响非常大,CPU内缓存的运行频率极高,一般是和处理器同频运作,工作频率远远大于系统内存和硬盘。实际工作时,CPU往往需要重复读取同样的数据块,而缓存容量的增大,可以大幅度提升CPU内部读取数据的命中率,而不用再到内存或者硬盘上寻找,以此提高系统性能。但是从CPU芯片面积和成本的因素来考虑,缓存都很小。

    概念

    L1 Cache(一级缓存)

    L1 Cache(一级缓存)是CPU第一层高速缓存,分为数据缓存和指令缓存。内置的L1高速缓存的容量和结构对CPU的性能影响较大,不过高速缓冲存储器均由静态RAM组成,结构较复杂,在CPU管芯面积不能太大的情况下,L1级高速缓存的容量不可能做得太大。一般服务器CPU的L1缓存的容量通常在32—256KB。

    L2 Cache(二级缓存)

    L2 Cache(二级缓存)是CPU的第二层高速缓存,分内部和外部两种芯片。内部的芯片二级缓存运行速度与主频相同,而外部的二级缓存则只有主频的一半。L2高速缓存容量也会影响CPU的性能,原则是越大越好,现在家庭用CPU容量最大的是4MB,而服务器和工作站上用CPU的L2高速缓存更高达2MB—4MB,有的高达8MB或者19MB。

    L3 Cache(三级缓存)

    L3 Cache(三级缓存),分为两种,早期的是外置,现在的都是内置的。而它的实际作用即是,L3缓存的应用可以进一步降低内存延迟,同时提升大数据量计算时处理器的性能。降低内存延迟和提升大数据量计算能力对游戏都很有帮助。而在服务器领域增加L3缓存在性能方面仍然有显著的提升。比方具有较大L3缓存的配置利用物理内存会更有效,故它比较慢的磁盘I/O子系统可以处理更多的数据请求。具有较大L3缓存的处理器提供更有效的文件系统缓存行为及较短消息和处理器队列长度。

    其实最早的L3缓存被应用在AMD发布的K6-III处理器上,当时的L3缓存受限于制造工艺,并没有被集成进芯片内部,而是集成在主板上。在只能够和系统总线频率同步的L3缓存同主内存其实差不了多少。后来使用L3缓存的是英特尔为服务器市场所推出的Itanium处理器。接着就是P4EE和至强MP。Intel还打算推出一款9MB L3缓存的Itanium2处理器,和以后24MB L3缓存的双核心Itanium2处理器。

    但基本上L3缓存对处理器的性能提高显得不是很重要,比方配备1MB L3缓存的Xeon MP处理器却仍然不是Opteron的对手,由此可见前端总线的增加,要比缓存增加带来更有效的性能提升。

    作用

    高速缓冲存储器Cache是位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。

    在Cache中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从Cache中调用,从而加快读取速度。由此可见,在CPU中加入Cache是一种高效的解决方案,这样整个内存储器(Cache+内存)就变成了既有Cache的高速度,又有内存的大容量的存储系统了。

    Cache对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与Cache间的带宽引起的。

    高速缓存的工作原理

    1、读取顺序

    CPU要读取一个数据时,首先从Cache中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入Cache中,可以使得以后对整块数据的读取都从Cache中进行,不必再调用内存。

    正是这样的读取机制使CPU读取Cache的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在Cache中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先Cache后内存。

    2、缓存分类

    前面是把Cache作为一个整体来考虑的,现在要分类分析了。Intel从Pentium开始将Cache分开,通常分为一级高速缓存L1和二级高速缓存L2。在以往的观念中,L1 Cache是集成在CPU中的,被称为片内Cache。在L1中还分数据Cache(D-Cache)和指令Cache(I-Cache)。它们分别用来存放数据和执行这些数据的指令,而且两个Cache可以同时被CPU访问,减少了争用Cache所造成的冲突,提高了处理器效能。

    在P4处理器中使用了一种先进的一级指令Cache——动态跟踪缓存。它直接和执行单元及动态跟踪引擎相连,通过动态跟踪引擎可以很快地找到所执行的指令,并且将指令的顺序存储在追踪缓存里,这样就减少了主执行循环的解码周期,提高了处理器的运算效率。

    以前的L2 Cache没集成在CPU中,而在主板上或与CPU集成在同一块电路板上,因此也被称为片外Cache。但从PⅢ开始,由于工艺的提高L2 Cache被集成在CPU内核中,以相同于主频的速度工作,结束了L2 Cache与CPU大差距分频的历史,使L2 Cache与L1 Cache在性能上平等,得到更高的传输速度。L2Cache只存储数据,因此不分数据Cache和指令Cache。在CPU核心不变化的情况下,增加L2 Cache的容量能使性能提升,同一核心的CPU高低端之分往往也是在L2 Cache上做手脚,可见L2 Cache的重要性。现在CPU的L1 Cache与L2 Cache惟一区别在于读取顺序。

    3、读取命中率

    CPU在Cache中找到有用的数据被称为命中,当Cache中没有CPU所需的数据时(这时称为未命中),CPU才访问内存。从理论上讲,在一颗拥有2级Cache的CPU中,读取L1 Cache的命中率为80%。也就是说CPU从L1 Cache中找到的有用数据占数据总量的80%,剩下的20%从L2 Cache读取。由于不能准确预测将要执行的数据,读取L2的命中率也在80%左右(从L2读到有用的数据占总数据的16%)。那么还有的数据就不得不从内存调用,但这已经是一个相当小的比例了。在一些高端领域的CPU(像Intel的Itanium)中,我们常听到L3 Cache,它是为读取L2 Cache后未命中的数据设计的—种Cache,在拥有L3 Cache的CPU中,只有约5%的数据需要从内存中调用,这进一步提高了CPU的效率。

    为了保证CPU访问时有较高的命中率,Cache中的内容应该按一定的算法替换。一种较常用的算法是“最近最少使用算法”(LRU算法),它是将最近一段时间内最少被访问过的行淘汰出局。因此需要为每行设置一个计数器,LRU算法是把命中行的计数器清零,其他各行计数器加1。当需要替换时淘汰行计数器计数值最大的数据行出局。这是一种高效、科学的算法,其计数器清零过程可以把一些频繁调用后再不需要的数据淘汰出Cache,提高Cache的利用率。 缓存技术的发展

    总之,在传输速度有较大差异的设备间都可以利用Cache作为匹配来调节差距,或者说是这些设备的传输通道。在显示系统、硬盘和光驱,以及网络通讯中,都需要使用Cache技术。但Cache均由静态RAM组成,结构复杂,成本不菲,使用现有工艺在有限的面积内不可能做得很大,不过,这也正是技术前进的源动力,有需要才有进步!

    CPU缓存

    基本简介

      CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。由此可见,在CPU中加入缓存是一种高效的解决方案,这样整个内存储器(缓存 内存)就变成了既有缓存的高速度,又有内存的大容量的存储系统了。缓存对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与缓存间的带宽引起的。

    缓存的工作原理

      缓存的工作原理是当CPU要读取一个数据时,首先从缓存中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。

      正是这样的读取机制使CPU读取缓存的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在缓存中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先缓存后内存。

    缓存是采用SRAM存储器

      目前缓存基本上都是采用SRAM存储器,SRAM是英文Static RAM的缩写,它是一种具有静态存取功能的存储器,不需要刷新电路即能保存它内部存储的数据。不像DRAM内存那样需要刷新电路,每隔一段时间,固定要对DRAM刷新充电一次,否则内部的数据即会消失,因此SRAM具有较高的性能,但是SRAM也有它的缺点,即它的集成度较低,相同容量的DRAM内存可以设计为较小的体积,但是SRAM却需要很大的体积,这也是目前不能将缓存容量做得太大的重要原因。它的特点归纳如下:优点是节能、速度快、不必配合内存刷新电路、可提高整体的工作效率,缺点是集成度低、相同的容量体积较大、而且价格较高,只能少量用于关键性系统以提高效率。

    CPU缓存的分级

    基本简介

      按照数据读取顺序和与CPU结合的紧密程度,CPU缓存可以分为一级缓存,二级缓存,部分高端CPU还具有三级缓存,每一级缓存中所储存的全部数据都是下一级缓存的一部分,这三种缓存的技术难度和制造成本是相对递减的,所以其容量也是相对递增的。当CPU要读取一个数据时,首先从一级缓存中查找,如果没有找到再从二级缓存中查找,如果还是没有就从三级缓存或内存中查找。一般来说,每级缓存的命中率大概都在80%左右,也就是说全部数据量的80%都可以在一级缓存中找到,只剩下20%的总数据量才需要从二级缓存、三级缓存或内存中读取,由此可见一级缓存是整个CPU缓存架构中最为重要的部分。

    一级缓存

      一级缓存(Level 1 Cache)简称L1 Cache,位于CPU内核的旁边,是与CPU结合最为紧密的CPU缓存,也是历史上最早出现的CPU缓存。由于一级缓存的技术难度和制造成本最高,提高容量所带来的技术难度增加和成本增加非常大,所带来的性能提升却不明显,性价比很低,而且现有的一级缓存的命中率已经很高,所以一级缓存是所有缓存中容量最小的,比二级缓存要小得多。

      一般来说,一级缓存可以分为一级数据缓存(Data Cache,D-Cache)和一级指令缓存(Instruction Cache,I-Cache)。

      二者分别用来存放数据以及对执行这些数据的指令进行即时解码,而且两者可以同时被CPU访问,减少了争用Cache所造成的冲突,提高了处理器效能。目前大多数CPU的一级数据缓存和一级指令缓存具有相同的容量,例如AMD的Athlon XP就具有64KB的一级数据缓存和64KB的一级指令缓存,其一级缓存就以64KB 64KB来表示,其余的CPU的一级缓存表示方法以此类推。

      Intel的采用NetBurst架构的CPU(最典型的就是Pentium 4)的一级缓存有点特殊,使用了新增加的一种一级追踪缓存(Execution Trace Cache,T-Cache或ETC)来替代一级指令缓存,容量为12KμOps,表示能存储12K条即12000条解码后的微指令。一级追踪缓存与一级指令缓存的运行机制是不相同的,一级指令缓存只是对指令作即时的解码而并不会储存这些指令,而一级追踪缓存同样会将一些指令作解码,这些指令称为微指令(micro-ops),而这些微指令能储存在一级追踪缓存之内,无需每一次都作出解码的程序,因此一级追踪缓存能有效地增加在高工作频率下对指令的解码能力,而μOps就是micro-ops,也就是微型操作的意思。它以很高的速度将μops提供给处理器核心。Intel NetBurst微型架构使用执行跟踪缓存,将解码器从执行循环中分离出来。这个跟踪缓存以很高的带宽将uops提供给核心,从本质上适于充分利用软件中的指令级并行机制。Intel并没有公布一级追踪缓存的实际容量,只知道一级追踪缓存能储存12000条微指令(micro-ops)。所以,我们不能简单地用微指令的数目来比较指令缓存的大小。实际上,单核心的NetBurst架构CPU使用8Kμops的缓存已经基本上够用了,多出的4kμops可以大大提高缓存命中率。而如果要使用超线程技术的话,12KμOps就会有些不够用,这就是为什么有时候Intel处理器在使用超线程技术时会导致性能下降的重要原因。

      例如Northwood核心的一级缓存为8KB 12KμOps,就表示其一级数据缓存为8KB,一级追踪缓存为12KμOps;而Prescott核心的一级缓存为16KB 12KμOps,就表示其一级数据缓存为16KB,一级追踪缓存为12KμOps。在这里12KμOps绝对不等于12KB,单位都不同,一个是μOps,一个是Byte(字节),而且二者的运行机制完全不同。所以那些把Intel的CPU一级缓存简单相加,例如把Northwood核心说成是20KB一级缓存,把Prescott核心说成是28KB一级缓存,并且据此认为Intel处理器的一级缓存容量远远低于AMD处理器128KB的一级缓存容量的看法是完全错误的,二者不具有可比性。在架构有一定区别的CPU对比中,很多缓存已经难以找到对应的东西,即使类似名称的缓存在设计思路和功能定义上也有区别了,此时不能用简单的算术加法来进行对比;而在架构极为近似的CPU对比中,分别对比各种功能缓存大小才有一定的意义。

    二级缓存

      CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。由此可见,在CPU中加入缓存是一种高效的解决方案,这样整个内存储器(缓存 内存)就变成了既有缓存的高速度,又有内存的大容量的存储系统了。缓存对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与缓存间的带宽引起的。

    CPU缓存读取数据的顺序

      缓存的工作原理是当CPU要读取一个数据时,首先从缓存中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。

      正是这样的读取机制使CPU读取缓存的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在缓存中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先缓存后内存。

      最早先的CPU缓存是个整体的,而且容量很低,英特尔公司从Pentium时代开始把缓存进行了分类。当时集成在CPU内核中的缓存已不足以满足CPU的需求,而制造工艺上的限制又不能大幅度提高缓存的容量。因此出现了集成在与CPU同一块电路板上或主板上的缓存,此时就把 CPU内核集成的缓存称为一级缓存,而外部的称为二级缓存。一级缓存中还分数据缓存(Data Cache,D-Cache)和指令缓存(Instruction Cache,I-Cache)。二者分别用来存放数据和执行这些数据的指令,而且两者可以同时被CPU访问,减少了争用Cache所造成的冲突,提高了处理器效能。英特尔公司在推出Pentium 4处理器时,用新增的一种一级追踪缓存替代指令缓存,容量为12KμOps,表示能存储12K条微指令。

    CPU缓存的速度与效率

      随着CPU制造工艺的发展,二级缓存也能轻易的集成在CPU内核中,容量也在逐年提升。现在再用集成在CPU内部与否来定义一、二级缓存,已不确切。而且随着二级缓存被集成入CPU内核中,以往二级缓存与CPU大差距分频的情况也被改变,此时其以相同于主频的速度工作,可以为CPU提供更高的传输速度。

      二级缓存是CPU性能表现的关键之一,在CPU核心不变化的情况下,增加二级缓存容量能使性能大幅度提高。而同一核心的CPU高低端之分往往也是在二级缓存上有差异,由此可见二级缓存对于CPU的重要性。

      CPU在缓存中找到有用的数据被称为命中,当缓存中没有CPU所需的数据时(这时称为未命中),CPU才访问内存。从理论上讲,在一颗拥有二级缓存的CPU中,读取一级缓存的命中率为80%。也就是说CPU一级缓存中找到的有用数据占数据总量的80%,剩下的20%从二级缓存中读取。由于不能准确预测将要执行的数据,读取二级缓存的命中率也在80%左右(从二级缓存读到有用的数据占总数据的16%)。那么还有的数据就不得不从内存调用,但这已经是一个相当小的比例了。目前的较高端的CPU中,还会带有三级缓存,它是为读取二级缓存后未命中的数据设计的—种缓存,在拥有三级缓存的CPU中,只有约5%的数据需要从内存中调用,这进一步提高了CPU的效率。

      为了保证CPU访问时有较高的命中率,缓存中的内容应该按一定的算法替换。一种较常用的算法是“最近最少使用算法”(LRU算法),它是将最近一段时间内最少被访问过的行淘汰出局。因此需要为每行设置一个计数器,LRU算法是把命中行的计数器清零,其他各行计数器加1。当需要替换时淘汰行计数器计数值最大的数据行出局。这是一种高效、科学的算法,其计数器清零过程可以把一些频繁调用后再不需要的数据淘汰出缓存,提高缓存的利用率。

      CPU产品中,一级缓存的容量基本在4KB到64KB之间,二级缓存的容量则分为128KB、256KB、512KB、1MB、2MB等。一级缓存容量各产品之间相差不大,而二级缓存容量则是提高CPU性能的关键。二级缓存容量的提升是由CPU制造工艺所决定的,容量增大必然导致CPU内部晶体管数的增加,要在有限的CPU面积上集成更大的缓存,对制造工艺的要求也就越高。

      双核心CPU的二级缓存比较特殊,和以前的单核心CPU相比,最重要的就是两个内核的缓存所保存的数据要保持一致,否则就会出现错误,为了解决这个问题不同的CPU使用了不同的办法:

    Intel双核心处理器的二级缓存

      目前Intel的双核心CPU主要有Pentium D、Pentium EE、Core Duo三种,其中Pentium D、Pentium EE的二级缓存方式完全相同。Pentium D和Pentium EE的二级缓存都是CPU内部两个内核具有互相独立的二级缓存,其中,8xx系列的Smithfield核心CPU为每核心1MB,而9xx系列的Presler核心CPU为每核心2MB。这种CPU内部的两个内核之间的缓存数据同步是依靠位于主板北桥芯片上的仲裁单元通过前端总线在两个核心之间传输来实现的,所以其数据延迟问题比较严重,性能并不尽如人意。

      Core Duo使用的核心为Yonah,它的二级缓存则是两个核心共享2MB的二级缓存,共享式的二级缓存配合Intel的“Smart cache”共享缓存技术,实现了真正意义上的缓存数据同步,大幅度降低了数据延迟,减少了对前端总线的占用,性能表现不错,是目前双核心处理器上最先进的二级缓存架构。今后Intel的双核心处理器的二级缓存都会采用这种两个内核共享二级缓存的“Smart cache”共享缓存技术。

    AMD双核心处理器的二级缓存

      Athlon 64 X2 CPU的核心主要有Manchester和Toledo两种,他们的二级缓存都是CPU内部两个内核具有互相独立的二级缓存,其中,Manchester核心为每核心512KB,而Toledo核心为每核心1MB。处理器内部的两个内核之间的缓存数据同步是依靠CPU内置的System Request Interface(系统请求接口,SRI)控制,传输在CPU内部即可实现。这样一来,不但CPU资源占用很小,而且不必占用内存总线资源,数据延迟也比Intel的Smithfield核心和Presler核心大为减少,协作效率明显胜过这两种核心。不过,由于这种方式仍然是两个内核的缓存相互独立,从架构上来看也明显不如以Yonah核心为代表的Intel的共享缓存技术Smart Cache。

    一级缓存与二级缓存的比较

      L1 cache vs L2 Cache用于存储数据的缓存部分通常被称为RAM,掉电以后其中的信息就会消失。RAM又分两种,其中一种是静态RAM(SRAM);另外一种是动态RAM(DRAM)。前者的存储速度要比后者快得多,我们现在使用的内存一般都是动态RAM。CPU的L1级缓存通常都是静态RAM,速度非常的快,但是静态RAM集成度低(存储相同的数据,静态RAM的体积是动态RAM的6倍),而且价格也相对较为昂贵(同容量的静态RAM是动态RAM的四倍)。扩大静态RAM作为缓存是一个不太合算的做法,但是为了提高系统的性能和速度又必须要扩大缓存,这就有了一个折中的方法:在不扩大原来的静态RAM缓存容量的情况下,仅仅增加一些高速动态RAM做为L2级缓存。高速动态RAM速度要比常规动态RAM快,但比原来的静态RAM缓存慢,而且成本也较为适中。一级缓存和二级缓存中的内容都是内存中访问频率高的数据的复制品(映射),它们的存在都是为了减少高速CPU对慢速内存的访问。二级缓存是CPU性能表现的关键之一,在CPU核心不变化的情况下,增加二级缓存容量能使性能大幅度提高。而同一核心的CPU高低端之分往往也是在二级缓存上存在差异,由此可见二级缓存对CPU的重要性。CPU在缓存中找到有用的数据被称为命中,当缓存中没有CPU所需的数据时(这时称为未命中),CPU才访问内存。从理论上讲,在一颗拥有二级缓存的CPU中,读取一级缓存的命中率为80%。也就是说CPU一级缓存中找到的有用数据占数据总量的80%,剩下的20%从二级缓存中读取。由于不能准确预测将要执行的数据,读取二级缓存的命中率也在80%左右(从二级缓存读到有用的数据占总数据的16%)。那么还有的数据就不得不从内存调用,但这已经是一个相当小的比例了。目前的较高端CPU中,还会带有三级缓存,它是为读取二级缓存后未命中的数据设计的—种缓存,在拥有三级缓存的CPU中,只有约5%的数据需要从内存中调用,这进一步提高了CPU的效率,从某种意义上说,预取效率的提高,大大降低了生产成本却提供了非常接近理想状态的性能。除非某天生产技术变得非常强,否则内存仍会存在,缓存的性能递增特性也仍会保留。 CPU缓存与内存的关系既然CPU缓存能够在很大程度上提高CPU的性能,那么,有些朋友可能会问,是不是将来有可能,目前的系统内存将会被CPU取代呢?

      答案应该是否定的,首先,尽管CPU缓存的传输速率确实很高,但要完全取代内存的地位仍不可行,这主要是因为缓存只是内存中少部分数据的复制品,所以CPU到缓存中寻找数据时,也会出现找不到的情况(因为这些数据没有从内存复制到缓存中去),这时CPU还是会到内存中去找数据,与此同时系统的速度就慢了下来,不过CPU会把这些数据复制到缓存中去,以便下一次不用再到内存中去取。也即是说,随着缓存增大到一定程度,其对CPU性能的影响将越来越小,在性能比上来说,越来越不合算。就目前缓存容量、成本以及功耗表现来看,还远远无法与内存抗衡,另外从某种意义上来说,内存也是CPU缓存的一种表现形式,只不过在速率上慢很多,然而却在容量、功耗以及成本方面拥有巨大优势。如果内存在将来可以做到足够强的话,反而很有取代CPU缓存的可能。 缓存的读写算法同样重要即便CPU内部集成的缓存数据交换能力非常强,也仍需要对调取数据做一定的筛选。这是因为随着时间的变化,被访问得最频繁的数据不是一成不变的,也就是说,刚才还不频繁的数据,此时已经需要被频繁的访问,刚才还是最频繁的数据,现在又不频繁了,所以说缓存中的数据要经常按照一定的算法来更换,这样才能保证缓存中的数据经常是被访问最频繁的。命中率算法中较常用的“最近最少使用算法”(LRU算法),它是将最近一段时间内最少被访问过的行淘汰出局。因此需要为每行设置一个计数器,LRU算法是把命中行的计数器清零,其他各行计数器加1。当需要替换时淘汰行计数器计数值最大的数据行出局。这是一种高效、科学的算法,其计数器清零过程可以把一些频繁调用后再不需要的数据淘汰出缓存,提高缓存的利用率。 高速缓存做为CPU不可分割的一部分,已经融入到性能提升的考虑因素当中,伴随生产技术的进一步发展,缓存的级数还将增加,容量也会进一步提高。作为CPU性能助推器的高速缓存,仍会在成本和功耗控制方面发挥巨大的优势,而性能方面也会取得长足的发展。

    三级缓存

      三级缓存是为读取二级缓存后未命中的数据设计的—种缓存,在拥有三级缓存的CPU中,只有约5%的数据需要从内存中调用,这进一步提高了CPU的效率。

      其实最早的L3缓存被应用在AMD发布的K6-III处理器上,当时的L3缓存受限于制造工艺,并没有被集成进芯片内部,而是集成在主板上。在只能够和系统总线频率同步的L3缓存同主内存其实差不了多少。后来使用L3缓存的是英特尔为服务器市场所推出的Itanium(Itanium 安腾 )处理器。接着就是P4EE(Extreme Edition)和至强MP。Intel还打算推出一款9MB L3缓存的Itanium2处理器,和以后24MB L3缓存的双核心Itanium2处理器。

      但基本上L3缓存对处理器的性能提高显得不是很重要,比方配备1MB L3缓存的Xeon MP处理器却仍然不是Opteron的对手,由此可见前端总线的增加,要比缓存增加带来更有效的性能提升。

    展开全文
  • PrimoCache基于双级缓存系统架构设计,该架构由一个一级缓存(level-1 cache)和一个二级缓存(level-2 cache)组成。一级缓存使用物理内存作为缓存设备,而二级缓存则通常使用SSD固态硬盘、闪存盘或其它永续性存储...
  • CPU中的一级缓存,二级缓存,三级缓存

    万次阅读 多人点赞 2018-06-14 13:49:56
    CPU中的一级缓存,二级缓存,三级缓存 缓存又叫高速缓冲存储器,其作用在于缓解主存速度慢、跟不上CPU读写速度要求的矛盾。 缓存的实现原理,是把CPU最近最可能用到的少量信息(数据或指令)从主存复制到CACHE中,当...

           缓存又叫高速缓冲存储器,其作用在于缓解主存速度慢、跟不上CPU读写速度要求的矛盾。
           缓存的实现原理,是把CPU最近最可能用到的少量信息(数据或指令)从主存复制到CACHE中,当CPU下次再用这些信息时,它就不必访问慢速的主存,而直接从快速的CACHE中得到,从而提高了得到这些信息的速度,使CPU有更高的运行效率。
           缓存的工作原理:是当CPU要读取一个数据时,首先从缓存中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。正是这样的读取机制使CPU读取缓存的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在缓存中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先缓存后内存。

           缓存的大小:一般说来,更大一点的cache容量,对提高命中率是有好处的,由于cache是用价格很高的静态存储器SRAM器件实现的,而cache容量达到一定大小后,再增加其容量,对命中率的提高并不明显,从合理的性能/价格比考虑,cache的容量设置应在一个合理的容量范围之内。

           缓存要分一级二级 三级,是为了建立一个层次存储结构,以达到最高性价比。而且多级组织还可以提高cache的命中率,提高执行效能。

           一般来说,一级缓存可以分为一级数据缓存(Data Cache,D-Cache)和一级指令缓存(InstructionCache,I-Cache)。二者分别用来存放数据以及对执行这些数据的指令进行即时解码,而且两者可以同时被CPU访问,减少了争用Cache所造成的冲突,提高了处理器效能。
           目前大多数CPU的一级数据缓存和一级指令缓存具有相同的容量,例如AMD的Athlon。XP就具有64KB的一级数据缓存和64KB的一级指令缓存,其一级缓存就以64KB+64KB来表示,其余的CPU的一级缓存表示方法以此类推。并不是缓存越大越好,譬如AMD和INTER就有不同的理论,AMD认为一级缓存越大越好,所以一级比较大,而INTER认为过大会有更长的指令执行时间,所以一级很小,二级缓存那两个公司的理论又反过来了,AMD的小,INTER的大,一般主流的INTERCPU的2级缓存都在2M左右,我们通常用(L1,L2)来称呼。

           CPU缓存(CacheMemory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多,但是交换速度却比内存要快得多。缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。由此可见,在CPU中加入缓存是一种高效的解决方案,这样整个内存储器(缓存+内存)就变成了既有缓存的高速度,又有内存的大容量的存储系统了。缓存对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与缓存间的带宽引起的。
           根据数据读取顺序和与CPU结合的紧密程度,CPU缓存可以分为一级缓存,二级缓存,部分高端CPU还具有三级缓存,每一级缓存中所储存的全部数据都是下一级缓存的一部分,这三种缓存的技术难度和制造成本是相对递减的,所以其容量也是相对递增的。当CPU要读取一个数据时,首先从一级缓存中查找,如果没有找到再从二级缓存中查找,如果还是没有就从三级缓存或内存中查找。
           一般来说,每级缓存的命中率大概都在80%左右,也就是说全部数据量的80%都可以在一级缓存中找到,只剩下20%的总数据量才需要从二级缓存、三级缓存或内存中读取,由此可见一级缓存是整个CPU缓存架构中最为重要的部分。

           目前缓存基本上都是采用SRAM存储器,SRAM是英文StaticRAM的缩写,它是一种具有静志存取功能的存储器,不需要刷新电路即能保存它内部存储的数据。不像DRAM内存那样需要刷新电路,每隔一段时间,固定要对DRAM刷新充电一次,否则内部的数据即会消失,因此SRAM具有较高的性能,但是SRAM也有它的缺点,即它的集成度较低,相同容量的DRAM内存可以设计为较小的体积,但是SRAM却需要很大的体积,这也是目前不能将缓存容量做得太大的重要原因。
           它的特点归纳如下:优点是节能、速度快、不必配合内存刷新电路、可提高整体的工作效率,缺点是集成度低、相同的容量体积较大、而且价格较高,只能少量用于关键性系统以提高效率。

    展开全文
  • STM32H7---高速缓存Cache()

    千次阅读 2022-03-22 15:58:25
    在使用STM32H7 跟F7系列芯片的时候经常看到第句初始化就是 Cache_Enable(); //打开L1-Cache //使能CPU的L1-Cache void Cache_Enable(void) { SCB_EnableICache();//使能I-Cache SCB_EnableDCache();//使能D...

    引言:

    在使用STM32H7 跟F7系列芯片的时候经常看到第一句初始化就是

    Cache_Enable();         			    //打开L1-Cache
    
    //使能CPU的L1-Cache
    void Cache_Enable(void)
    {
        SCB_EnableICache();//使能I-Cache
        SCB_EnableDCache();//使能D-Cache   
    	SCB->CACR|=1<<2;   //强制D-Cache透写,如不开启,实际使用中可能遇到各种问题	
    }
    

    但是关于他的讲解又是少之又少,很多也说的不清不楚的,所以今天我们来看下到底什么是STM32的Cache

    1. Cache的基本概念和工作原理

    1.1 什么是Cache

    Cache存储器,为高速缓冲存储器,是位于CPU和主存储器DRAM(Dynamic Random Access Memory)之间,规模较小,但速度很高的存储器,通常由SRAM(Static Random Access Memory 静态存储器)组成。它是位于CPU内存间的一种容量较小速度很高的存储器

    参看:
    SRAM、DRAM及DDR FLASH ROM概念详解
    在这里插入图片描述

    1.2 为什么需要Cache

    CPU的速度远高于内存,当CPU直接从内存中存取数据时要等待一定时间周期,而Cache则可以保存CPU刚用过或循环使用的一部分数据,如果CPU需要再次使用该部分数据时可从Cache中直接调用,这样就避免了重复存取数据,减少了CPU的等待时间,因而提高了系统的效率。

    而在我们STM32处理器中,常用的F1微控制器的主频一般为几十 MHz,但是随着计数的发展,上百 MHz 主频的 MCU 已经很常见了。现在ST推出的 Cortex-M7 内核的F7跟H7 都达到了几百Mhz,采用 ST 最新40nm工艺的 STM32H7 已经可以跑到 480 MHz 了,

    那我们可以想一下,CPU的运算速度在成倍提高,虽然微控制器的频率大幅提高了,可是一般作为主存储器使用的动态存储器(DRAM),其存储周期仅为几十 ns (频率:f=1/T=几十KHz)。和CPU的频率差了很多倍。那么,如果指令和数据都存放在DRAM中,DRAM的速度将会严重制约整个系统的性能。因此,高性能的微控制器会在主存储器和 CPU 之间增加高速缓冲存储器(Cache),目的是提高对存储器的平均访问速度,从而提高存储系统的性能。
    在这里插入图片描述

    而对于我们的M7内核,可以看到内部是集成了Cache的

    PS: 也就是说使用了M7内核的厂商,正常情况下都可以使用cache高速缓存,并不是STM32的独有

    在这里插入图片描述


    2. cache基础概念解释

    也就是说,通过上面的两段,你可以明白什么是cache跟为什么需要cache(加快DRAM存储器跟CPU之间的访问速度) 那么我们再看下cache的分类:

    Cache又分为L1Cache(一级缓存)和L2Cache(二级缓存),L1Cache主要是集成在CPU内部,而L2Cache集成在主板上或是CPU上

    我们常用的就是L1Cache(一级缓存),一级缓存又分为数据部分D-Cache和指令部分I-Cache

    2.2 I-Cache 和 D-Cache

    如果一个存储系统中指令预取时使用的 cache 和数据读写时使用的 cache 是各自独立的,这是称系统使用了独立的 cache,反之则为统一的 cache。其中,用于指令预取的 cache 称为指令 cache(I-Cache),用于数据读写的 cache 称为数据 cache(D-Cache)。使用独立的 I-Cache 和 D-Cache,可以在同一个时钟周期中读取指令和数据

    Cortex-M7 架构为我们配备了独立的高速指令缓存(I-Cache)和高速数据缓存(D-Cache)。

    我们通过下面几组图来让你有一个更直观的了解:

    1.CPU运行指令,指令存储在外部存储中。从外部内存中获取指令需要的时间很久,CPU可能需要50-100ns来获得指令
    在这里插入图片描述

    2.如果通过I-Cache,执行过的指令就会被存储,通过缓存存储已经执行的指令。D-cache存储已经被读取的数据。当再次需要相同的数据时,CPU可以在1个时钟周期内得到该指令。

    在这里插入图片描述
    3. 数据存储在外部RAM中,如果CPU需要读取数据,从外部内存中获取数据需要花费很长时间。
    在这里插入图片描述
    4.如果指令在外部内存上(NORflash,SDRAM,QSPI等),I-cache缓存是有用的,数据先存到I-cache缓存,CPU直接访问I-cache,也就是外部内存的访问时间不是1个时钟。
    在这里插入图片描述

    通过上面的 I-Cache 和 D-Cache,CPU就可以在同一个时钟周期中读取指令和数据

    2.2 时间局部性 和 空间局部性

    对大量典型程序运行情况分析的结果表明,在较短的时间间隔内,程序产生的地址往往集中在存储空间的一个很小范围,这种现象称为程序访问的局部性。这种局部性可细分为时间局部性和空间局部性。时间局部性是指被访问的某个存储单元在一个较短的时间间隔很可能又被访问。空间的局部性是指访问的某个存储单元的临近单元在一个较短的时间间隔内很可能也被访问

    时间局部性和空间局部性保证了系统采用 cache 后,通常性能都能得到很大的提高

    2.3 块(cache line)

    Cache line
    Cache 与主存储器之间以(cache line)为单位进行数据交换,Cache 在逻辑上被划分为若干 cache line,对应着一组存储器的位置。CPU 读取数据或者指令时,它同时将读取到的数据或者指令保存到一个 cache 块中。这样当 CPU 第2次需要读取相同的数据时,它可以从相应的 cache 块中得到相应的数据。

    不同系统中,cache 的块大小也是不同的。通常 cache 的块大小为几个字节。当 CPU 从主存储器中读取一个字的数据时,它将会把主存储器中和 cache 块同样大小的数据读取到 cache 的一个块中。

    2.4 Read-allocate 和 Write-allocate

    根据不同的分配方式,可以把 cache 分为读操作分配(Read-allocate)cache 和写操作分配(Write-allocate)cache。

    2.5 Cache Hit 和 Cache Miss

    Cache命中(Cache Hit)——要访问的数据/指令已经存在缓存里;
    Cache缺失(Cache Miss)——要访问的数据/指令不在缓存里;
    如果发生 cache miss 并且 cache 存储未满,则在 cache 中设置一个位置,并把新的缓存数据存到这个位置。如果 cache 已满,则要通过 cache 替换策略进行 cache line 的替换,腾出空闲的位置后,再将新的缓存数据存到这个位置。

    2.6 CPU 在 cache 中的访问过程

    在 CPU 执行程序过程中,需要从内存取指令或写数据时,先检查 cache 中有没有要访问的信息,若有,就直接在 cache 中读写,而不用访问存储器。若没有,再从主存中把当前访问信息所在的一个一个主存块复制到 cache 中。因此,cache 中的内容是主存中部分内容的副本。下图展示了带 cache 的 CPU 执行一次访存操作的过程。

    在这里插入图片描述

    cache 是一种小容量高速缓冲存储器,由快速的 SRAM 组成,直接制作在 CPU 芯片内,速度较快,几乎与 CPU 处于同一个量级。在 CPU 和主存之间设置 cache,总是把主存中被频繁访问的活跃程序块和数据块复制到 cache 中。由于程序访问的局部性,大多数情况下,CPU 可以直接从 cache 中直接取得指令和数据,而不必访问慢速的主存。

    如上图所示的访存过程中,需要判断所访问的信息是否在 cache 中。若 CPU 访问单元的主存块在 cache 中,则称 cache 命中(hit),命中的概率称为命中率 p (hit rate)。若不在 cache 中,则为不命中(miss),其概率为缺失率(miss rate)。命中时,CPU 在 cache 中直接存取信息,所用的时间开销就是 cache 的访问时间 Tc,称为命中时间。缺失时,需要从主存读取一个主存块送 cache,并同时将所需信息送 CPU,因此所用时间为主存访问时间 Tm,和 cache 访问时间 Tc 之和。通常把从主存读入一个主存块到 cache 的时间 Tm 称为缺页损失

    CPU 在 cache 和主存层次的平均访问时间为:

    Ta = p * Tc + (1 - p) * (Tm + Tc) = Tc + (1 - p) * Tm
    
    • 参考STM32社区内容

    由于写操作分配 cache 增加了 cache 内容预取的次数,它增加了写操作的开销,所以想要充分发挥 Cache 的作用,就要保证有比较高的命中率(Cache Hit)但是由于程序时间和空间的局部性,,cache 的命中率可以达到很高,接近于 1。因此,虽然缺页损失所耗费的时间远远大于命中时间,但以最终的平均访问时间仍可大大减少。

    2.7 cache 的映射方式

    在 cache 存储系统中,把 cache 和主存储器都划分成相同大小的块。因此,主存地址可以由块号 B 和块内地址 W 两部分组成。同样,cache 的地址也可以由块号 b 和块内地址 w 两部分组成。

    前面我们说到 在 cache 存储系统中,把 cache 和主存储器都划分成相同大小的块然后cache又把这些块分成了一些行,每个行里都有一定数量的块,每个块可以存储主存储器某个块的地址
    在这里插入图片描述

    STM32F429 的内部 FLASH 包含主存储器、系统存储器、 OTP 区域以及选项字节区域,它们的地址分布及大小如下:
    在这里插入图片描述
    STM32F103的中容量内部 FLASH 包含主存储器、系统存储器、 OTP 区域以及选项字节区域,它们的地址分布及大小如下:
    在这里插入图片描述

    cache 行中的信息取自主存储器中的某个块。将主存块复制到 cache 行时,主存块和 cache 行之间必须遵循一定的映射规则。这样 CPU 在要访问某个主存单元时,可以依据映射规则到 cache 对应的行中查找要访问的信息,而不用在整个 cache 中查找。

    根据不同的映射规则,主存块和 cache 行之间有以下三种映射方式。

    • 直接映射(direct):每个主存块映射到 cache 的固定行中。
    • 全相连映射(full associate):每个主存块映射到 cache 的任意行中。
    • 组相连映射(set associate):每个主存块映射到 cache 的固定组的任意行中。

    全相连(full-associative)方式

    【区块划分】将主存与 Cache 划分成若干个大小相等的块(lines)。
    【映射关系】主存中任意一块都可以映射到 Cache 中的任意一块的位置上。
    在这里插入图片描述

    如果 Cache 的块容量为 Cb,主存的块容量为 Mb,则主存和 cache 之间的映射关系共有 Cb * Mb 种。如果采用目录来存放这些映射关系,则目录表的容量为 Cb。

    【优缺点】

    优点:访问灵活,命中率高,Cache 存储空间利用率高,冲突率低,只有 Cache 满时才会出现在冲突。
    缺点:地址变换比较复杂,每次都要与全部内容比较,速度相对慢,成本高,因而应用少。
    【地址组成】

    主存:块号 + 块内地址
    缓存:块号 + 块内地址
    在这里插入图片描述

    直接映射(direct-mapping)方式

    【区块划分】

    将主存根据 Cache 的大小分成若干分区(主存的大小为 Cache 的整数倍),Cache 分成若干个相等的块(lines),主存的每个分区也分成与 Cache 相等的块。

    【映射关系】

    主存中的每一个分区由于大小与 Cache 完全相同,可以与整个 Cache 相像,每个分区中的每一块正好与 Cache 的每一块配对。也就是说,主存中一块只能映射到 Cache 中的一个特定的块,编号不一致的块是不能相互映射的。
    在这里插入图片描述

    【优缺点】

    优点:地址变换简单,只需检查区号是否相等即可,因而可以得到比较快的访问速度,硬件设备简单。
    缺点:替换操作频繁,命中率比较低,每块相互对应,不够灵活。
    【地址组成】

    主存:区号 + 块号 + 块内地址
    缓存:块号 + 块内地址

    在这里插入图片描述

    组相联(set-associative)方式

    【区块划分】

    主存:主存根据 Cache 大小划分成若干个区,每个区内划分成若干个组(sets),每个组再划分成若干个块(lines)。
    Cache:划分成若干个组(sets),每个组划分成若干个块(lines)。
    【映射关系】

    从主存的组到 Cache 的组之间采用直接映射方式,当主存中的一组与 Cache 中的一组之间建立了直接映射关系之后,在两个对应的组内部采用全关联映射方式。

    【优缺点】

    融合了直接映射与全关联映射两种映射方式,结合了两者的优点。具体实现容易,命中率与全关联映射接近。

    【地址组成】

    主存:区号 + 组号 + 块号 + 块内地址
    缓存:组号 + 块号 + 块内地址

    目前绝大多数CPU都是采用组相联的 cache 映射方式 硬件更容易实现,又结合了前两种方式的优点。

    cache一致性问题

    我们使用cache缓存(SRAM) 在享受便利性的同时也要注意下他的一些问题

    比方说我们使用DMA外设到内存,DMA 写操作直接访问主存,更新主存中的数据,如果该数据已经包含在 cache 中,则 cache 中的数据将会比主存中对应的数据“老”,不会更新 cache 和写缓冲区中相应的内容,这样就可能造成数据的不一致。

    如果是DMA从内存到外设, DMA 从主存中读取的数据已经包含在 cache 中,而且 cache 中对应的数据已经被更新,但是还没有更新到主存,这样 DMA 读到的将不是系统中最新的数据。

    在这里插入图片描述


    这章就先说这么多,关于H7的配置下篇再讲解

    请添加图片描述
    请添加图片描述

    展开全文
  • 所谓的CPU缓存是CPU内部缓存的运行频率. 缓存的大小和结构对CPU速度的影响更大,因此缓存的大小也是CPU的重要性能指标之....CPU高速缓存(英文为Cache Memory)是位于CPU和内存之间的临时内存. CPU缓存的功能主...
  • Cache原理简介及cache miss

    千次阅读 2021-05-28 10:39:36
    CPU访问它的速度介于寄存器与内存之间(数量的差别)。实现Cache的花费介于寄存器与内存之间。 现在 CPU 的 Cache 又被细分了几层,常见的有 L1 Cache, L2 Cache, L3 Cache,其读写延迟依次增加,实现的成本依次...
  • CPU基础知识之Cache介绍

    千次阅读 2020-07-31 17:00:07
    Cache就是CPU缓存,它是位于CPU和内存之间的临时存储器。CPU在读取数据进行计算的时候,首先是从内部的缓存中查找需要的数据,如果有,可以最短时间最快速度交付CPU。但是如果没有找到,CPU就会提出“要求”经过缓存...
  • 深度学习arm cache系列--篇就够了

    千次阅读 2021-04-02 22:08:02
    缓存,高速缓存,cache, CCI,CMN,CCI-550,CCI-500,DSU,SCU,L1,L2,L3,system cache, Non-cacheable,Cacheable, non-shareable,inner-shareable,outer-shareable, optee、ATF、TF-A、Trustzone、optee3.14、MMU、VMSA、...
  • Cache

    千次阅读 2020-04-08 18:27:31
    高速缓存(Cache)存储器是位于CPU和主存之间的规模较小但工作速度较高的缓冲存储器,通常由SRAM组成。 Cache的功能 提高存储系统的存取速度,缓解快速CPU与慢速的主存之间的速度差异 理论基础 局部性原理 在...
  • Cache 的基本概念与工作原理 背景知识 随着 CPU 技术的飞速发展,常用的处理器飞奔在越来越高的频率之上,虽然处理器的速度越来越快,但是与之相匹配的存储器的速度却没有获得相应的提升,这大大限制了 CPU 的处理...
  • cache(缓存)浅析

    2020-12-02 14:02:48
    位于内存和CPU之间,速度非常快,所以CPU就把数据直接写入cache,然后CPU就可以干其他的了,剩下的事情就交给cache这个跑腿的,cache在合适的时机可以慢慢的把数据写入内存,也就是相当于解了C...
  • Cache简介(

    千次阅读 多人点赞 2018-01-23 18:44:21
    cache是干啥的? 在以前,CPU的主频比较慢,CPU和内存DRAM之间速度差别不是很大,存储数据或者指令还OK。...位于内存和CPU之间,速度非常快,所以CPU就把数据直接写入cache,然后CPU就可以干其他的了
  • Cache-简介(第篇)

    千次阅读 2020-12-24 18:43:16
    概述Cache是什么1.1 时间局部性和空间局部性1.2 统一的I/Dcache和独立I/Dcache1.3 写通(write-through)cache 和写回(write-back)cache1.4 cache与内存的一致性问题 CPU的运行速度是远远高于速度的,以当前...
  • 三十七、L1,L2,L3 Cache究竟在哪里

    千次阅读 2019-01-30 11:23:08
    大多数高层程序员认为 Cache 是透明的,CPU可以很聪明地安排他们书写的程序,不需要关心数据是在内存中还是在Cache里。 他们也许是对的,大部分时间Cache都可以安静的工作。但对于操作系统、编译软件、固件工程师和...
  • Cache地址映射

    万次阅读 多人点赞 2018-09-01 15:17:35
    理解Cache地址映射之前补充一些基础知识,Cache的地址映射和MMU(内存管理单元)和TLB Cache(转译查找缓存)中的映射是有区别的。Cache、TLB Cache、MMU在CPU中结构如图1所示,图1展现的是Cortex A9 Processor内部...
  • CPU的cache工作原理

    千次阅读 2021-04-05 14:43:52
    CPU的cache工作原理 博主微信:flm13724054952,不懂的有疑惑的也可以加微信咨询,欢迎大家前来指教共同探讨,谢谢!博主最近的工作是CPU集成设计,所以接下来的篇章将以CPU的学习讲解为主。最后再打个小广告,欢迎...
  • 计组实验5:cache大小测量与 cache line 大小测量

    千次阅读 多人点赞 2020-12-28 20:24:37
    今天做了实验5,通过 c 语言测 cache 参数。其实按理来说挺简单的,只是我们班没给代码,纯靠自己。听说别的班有给代码 emm 因为《深入理解计算机系统》这本书上面给的代码是 Linux 平台下的,而且需要个 fcyc2 ...
  • 编程基础(四)——cache

    千次阅读 2019-05-04 22:29:59
    、概述 二、原理 2.1 局部性原理(principle of locality) 2.2 Memory Hierarchy 2.3 性能评估 三、cache的基本要素 3.1 cache的组成 3.1.1利用hash表理解cache参数和行为 3.2 cache的分类 3.3cacheline...
  • MyBatis一级缓存和二级缓存

    千次阅读 2022-04-03 20:36:19
    目录 为什么要用缓存 一级缓存 一级缓存的生命周期 一级缓存失效情况 二级缓存 二级缓存失效 自定义缓存 Cache组件 PerpetualCache BlockingCache FifoCache和LruCache SoftCache和WeakCache CacheKey 为什么要用...
  • 2路组相连cache例子 上图是2路组相连的cache,可以看到 物理地址tag/set/block_offset说明: Cache row entries usually have the following structure: tag data block flag bits An effective memory address ...
  • TCM和CACHE简述

    千次阅读 2021-10-22 14:45:19
    Cache存储器,电脑中为高速缓冲存储器,是位于CPU和主存储器DRAM(Dynamic Random Access Memory)之间,规模较小,但速度很高的存储器,通常由SRAM(Static Random Access Memory 静态存储器)组成。它是位于CPU与...
  • TLB和cache的关系

    万次阅读 多人点赞 2018-03-06 15:50:59
    )TLB1)TLB的概述TLB是个内存管理单元用于改进虚拟地址到物理地址转换速度的缓存.TLB是位于内存中的页表的cache,如果没有TLB,则每次取数据都需要两次访问内存,即查页表获得物理地址和取数据.分页与页表概念性...
  • Cache就是指缓存SRAM,也叫静态内存,这个内存可以保持数据不被改变,除非重新写入新数据或关闭电源。由于CPU的速度比内存和硬盘的速度要快得多,所以在存取数据时会使CPU等待,影响计算机的速度。SRAM的存取速度比...
  • Linux内存之Cache

    千次阅读 2020-12-09 17:22:11
    Cache存储器,是位于CPU和主存储器DRAM之间的块高速缓冲存储器,规模较小,但是速度很快,通常由SRAM(静态存储器)组成。 Cache的功能是提高CPU数据输入输出的速率。Cache容量小但速度快,内存速度较低但容量大,...
  • cache相关概念及工作原理介绍

    千次阅读 2020-03-10 11:31:30
    . cache是什么,为什么要用它 关于cache是什么,为什么要用它。我们从这个表格说起。下图是典型的memory大小和访问时间 memory类型 典型大小 典型的访问时间(周期) 寄存器(r0-r15等) 128B 1 L1 cache 32...
  • cache优化基础(精华)

    千次阅读 2022-04-14 16:37:18
    cache特点六讲 存储器是分层次的,离CPU越近的存储器,速度越快,每字节的成本越高,同时容量也因此越小。寄存器速度最快,离CPU最近,成本最高,所以个数容量有限,其次是高速缓存(缓存也是分级,有L1,L2等...
  • 寄存器、内存、cache简介

    千次阅读 2021-01-11 10:59:47
    、计算机的存储体系 从上面两个图看出不同的介质存储空间和访问速度是不一样的。 二、寄存器 寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,227
精华内容 20,090
热门标签
关键字:

一级cache位于