CPU 与 内存之间的三级缓存的实现原理

初步理解三级缓存Cache 我是做C语言方面的开发工作,进入公司以来,经常需要做性能优化方面的工作,被一些性能问题给折磨的要si要活的。在想,在不允许替换更强的cpu前提下,到底怎么样才能发挥CPU的最强性能呢?这个问题一直困扰我,直到有一天不知道在哪听到还是看到一句话(大概是这个意思):“如果把cache优化的差不多了,那么性能就几乎没有什么可优化的空间了。”听到这句话后,文化程度不高的我立马拍手叫绝,惊呼WOCAO!一下引起我的好奇心,到底什么是Cache呢? 首先要知道Cache这个词怎么理解,Cache百度百科给的定义. 阅读详情
AI摘要

本文详细介绍了CPU缓存的三级结构,包括L1、L2和L3缓存的工作原理,强调了缓存命中率的重要性。缓存通过时间局部性和空间局部性的原理提高数据访问速度,同时提到了TLB(转换查找缓冲)在地址转换中的作用。缓存的大小、数据放置策略(直接相连、全相联、组相联映射)和数据淘汰策略(LFU、LRU、随机替换)也进行了探讨。最后,讨论了缓存不命中时的数据获取流程和保持缓存与主存数据一致性的策略。

目录

一. CPU 与 Memory 内存之间的三级缓存的实现原理

1.1 cache 存在的原理

1.2 cpu 三级cache

1.3 cpu cache与TLB的联系

二. 各级缓存中数据的包含关系

2.1 整个缓存和主存间

2.2 各级缓存之间

三. 各级缓存的大小设置

四. 各级缓存之间的数据放置与数据淘汰策略

4.1 各级cache之间数据放置方式

4.2 数据淘汰策略

五. 整个缓存结构的访问流程

5.1 查找命中

5.2 cache 不命中

5.3 cache和主存数据一致性保持


一. CPU 与 Memory 内存之间的三级缓存的实现原理

1.1 cache 存在的原理

  引入 Cache 的理论基础是程序局部性原理,包括时间局部性和空间局部性。时间局部性原理即最近被CPU访问的数据,短期内CPU 还要访问(时间);空间局部性即被CPU访问的数据附近的数据,CPU短期内还要访问(空间)。因此如果将刚刚访问过的数据缓存在一个速度比主存快得多的存储中,那下次访问时,可以直接从这个存储中取,其速度可以得到数量级的提高。

  CPU缓存是(Cache Memory)位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。

  在CPU中加入缓存是一种高效的解决方案,是对于存储器件成本更低,速度更快这两个互相矛盾的目标的一个最优解决方案,这样整个内存储器(缓存+内存)就变成了既有缓存的高速度,又有内存的大容量的存储系统了。缓存对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与缓存间的带宽引起的。
下图是一个典型的存储器层次结构,我们可以看到一共使用了三级缓存

CPU 与 Memory 内存之间的三级缓存的实现原理1
各级存储访问延迟的对比
CPU 与 Memory 内存之间的三级缓存的实现原理2

1.2 cpu 三级cache

  介于CPU和主存储器间的高速小容量存储器,由静态存储芯片SRAM组成,容量较小但比主存DRAM技术更加昂贵而快速, 接近于CPU的速度。CPU往往需要重复读取同样的数据块, Cache的引入与缓存容量的增大,可以大幅提升CPU内部读取数据的命中率,从而提高系统性能。通常由高速存储器、联想存储器、地址转换部件、替换部件等组成。如图所示。
CPU 与 Memory 内存之间的三级缓存的实现原理3

  • 联想存储器:根据内容进行寻址的存储器(冯氏模型中是按照地址进行寻址,但在高速存储器中往往只存有部分信息,此时需要根据内容进行检索)
  • 地址转换部件:通过联想存储器建立目录表以实现快速地址转换。命中时直接访问Cache;未命中时从内存读取放入Cache
  • 替换部件:在缓存已满时按一定策略进行数据块替换,并修改地址转换部件

  早期采用外部(Off-chip)Cache,不做在CPU内而是独立设置一个Cache。现在采用片内(On-chip)Cache,将Cache和CPU作在一个芯片上,且采用多级Cache,同时使用L1 Cache和L2 Cache,甚至有L3 Cache。

  • 一般L1 Cache都是分立Cache,分为数据缓存和指令缓存,可以减少访存冲突引起的结构冒险,这样多条指令可以并行执行;内置;其成本最高,对CPU的性能影响最大
    多级Cache的情况下,L1 Cache的命中时间比命中率更重要
  • 一般L2 Cache都是联合Cache,这样空间利用率高
    没有L3 Cache的情况下,L2 Cache的命中率比命中时间更重要(缺失时需从主存取数,并要送L1和L2 cache)
  • L3 Cache多为外置,在游戏和服务器领域有效;但对很多应用来说,总线改善比设置L3更加有利于提升系统性能

    CPU 与 Memory 内存之间的三级缓存的实现原理4

  上图显示了最简单的缓存配置。它对应着最早期使用CPU cache的系统的架构。CPU内核不再直接连接到主内存。所有的数据加载和存储都必须经过缓存。CPU核心与缓存之间的连接是一种特殊的快速连接。在一个简化的表示中,主存和高速缓存连接到系统总线,该系统总线也可用于与系统的其他组件进行通信。我们引入了系统总线(现代叫做“FSB”)。
引入缓存后不久,系统变得更加复杂。高速缓存和主存之间的速度差异再次增大,使得另一个级别的高速缓存不得不被添加进来,它比第一级高速缓存更大且更慢。出于经济原因,仅增加第一级缓存的大小不是一种选择。今天,甚至有机器在生产环境中使用了三级缓存。带有这种处理器的系统如图下所示。随着单个CPU的内核数量的增加,未来的缓存级别数量可能会增加。现在已经出现了拥有四级cache的处理器了。

CPU 与 Memory 内存之间的三级缓存的实现原理5

  上图展示了三级缓存的结构。L1d是一级数据cache,L1i是一级指令cache。请注意,这只是一个示意图; 现实中的数据流从core到主存的过程中不需要经过任何更高级别的cache。CPU设计人员有很大的自由来设计cache的接口。对于程序员来说,这些设计选择是不可见的。
另外,我们有拥有多个core的处理器,每个core可以有多个“线程”。核心和线程之间的区别在于,独立的核心具有所有硬件资源的独立的副本,早期的多核处理器,甚至具有单独的第二级缓存而没有第三级缓存。核心可以完全独立运行,除非它们在同一时间使用相同的资源,例如与外部的连接。另一方面,线程们共享几乎所有的处理器资源。英特尔的线程实现只为线程提供单独的寄存器,甚至是有限的,还有一些寄存器是共享的。
一个现代CPU的完整概貌如图所示。

CPU 与 Memory 内存之间的三级缓存的实现原理6

  • i-cache和d-cache都是32KB、8路、4个时钟周期;
  • L2 cache:256KB 、8路、11个时钟周期。
  • 所有核共享的L3 cache:8MB、16路、30~40个时钟周期。
  • Core i7中所有cache的块大小都是64B

1.3 cpu cache与TLB的联系

  由于cache中对应的都是主存地址,即物理地址,在cqu查看具体数据是否在cache中时,如果CPU传送过来的地址时一个虚拟地址,需要将其转换成实际物理地址再到cache中去寻找。Cache的实现需要TLB的帮助。可以说TLB命中是Cache命中的基本条件。TLB不命中,会更新TLB项,这个代价非常大,Cache命中的好处基本都没有了。在TLB命中的情况下,物理地址才能够被选出,Cache的命中与否才能够达成。

1.3.1 TLB的概述

  TLB是一个内存管理单元用于改进虚拟地址到物理地址转换速度的缓存。TLB是位于内存中的页表的cache,如果没有TLB,则每次取数据都需要两次访问内存,即查页表获得物理地址和取数据。

1.3.2 TLB的原理

  当cpu对数据进行读请求时,CPU根据虚拟地址(前20位)到TLB中查找.TLB中保存着虚拟地址(前20位)和页框号的对映关系,如果匹配到虚拟地址就可以迅速找到页框号(页框号可以理解为页表项),通过页框号与虚拟地址后12位的偏移组合得到最终的物理地址.

  如果没在TLB中匹配到虚拟地址,就出现TLB丢失,需要到页表中查询页表项,如果不在页表中,说明要读取的内容不在内存,需要到磁盘读取.

  TLB是MMU中的一块高速缓存,也是一种Cache.在分页机制中,TLB中的数据和页表的数据关联,不是由处理器维护,而是由OS来维护,TLB的刷新是通过装入处理器中的CR3寄存器来完成.如果MMU发现在TLB中没有命中,它在常规的页表查找后,用找到的页表项替换TLB中的一个条目.

1.3.3 TLB的刷新原则

  当进程进行上下文切换时重新设置cr3寄存器,并且刷新tlb.
有两种情况可以避免刷tlb.
第一种情况是使用相同页表的进程切换.
第二种情况是普通进程切换到内核线程.
lazy-tlb(懒惰模式)的技术是为了避免进程切换导致tlb被刷新.
当普通进程切换到内核线程时,系统进入lazy-tlb模式,切到普通进程时退出该模式.

1.3.4 cache的概念

  cache是为了解决处理器与慢速DRAM(慢速DRAM即内存)设备之间巨大的速度差异而出现的。cache属于硬件系统,linux不能管理cache.但会提供flush整个cache的接口.
cache分为一级cache,二级cache,三级cache等等.一级cache与cpu处于同一个指令周期.

1.3.5 Cache的存取单位(Cache Line)

  CPU从来不从DRAM直接读/写字节或字,从CPU到DRAM的每次读或写的第一步都要经过L1 cache,每次以整数行读或写到DRAM中.Cache Line是cache与DRAM同步的最小单位.典型的虚拟内存页面大小为4KB,而典型的Cache line通常的大小为32或64字节.

  CPU 读/写内存都要通过Cache,如果数据不在Cache中,需要把数据以Cache Line为单位去填充到Cache,即使是读/写一个字节.CPU 不存在直接读/写内存的情况,每次读/写内存都要经过Cache.

1.3.6 Cache的工作模式

  • 数据回写(write-back):这是最高性能的模式,也是最典型的,在回写模式下,cache内容更改不需要每次都写回内存,直到一个新的 cache要刷新或软件要求刷新时,才写回内存.
  • 写通过(write-through):这种模式比回写模式效率低,因为它每次强制将内容写回内存,以额外地保存cache的结果,在这种模式写耗时,而读和回写模一样快,这都为了内存与cache相一致而付出的代价.
  • 预取 (prefectching):一些cache允许处理器对cache line进行预取,以响应读请求,这样被读取的相邻内容也同时被读出来,如果读是随机的,将会使CPU变慢,预取一般与软件进行配合以达到最高性能.

二. 各级缓存中数据的包含关系

2.1 整个缓存和主存间

  缓存里有的数据,主存中一定存在。

2.2 各级缓存之间

  一级缓存中还分数据缓存(data cache,d-cache)和指令缓存(instruction cache,i-cache)。二者分别用来存放数据和执行这些数据的指令,而且两者可以同时被cpu访问,所以一级cache间数据时独立的。

  一级没有的数据二级可能有也可能没有。因为一级缓存miss会接着访问二级缓存。

  一级有二级一定有,三级也一定有。因为一级的数据从二级中读上来的。在一级缺失二级命中时发生。

  二级没有的数据三级可能有也可能没有。因为二级确实会接着访问三级缓存。找不到会继续访问主存。

  二级有的数据三级一定有。在二级缺失三级命中时,数据会从三级缓存提到二级缓存。

  三级没有的数据,主存可能有也可能没有。三级缓存缺失,会访问主存,主存也缺失就要从外存访问数据了。

  三级缓存有的数据主存一定有。因为在三级缺失主存命中时,数据会从主存提到三级缓存中来。

三. 各级缓存的大小设置

  一级缓存就是指CPU第一层级的高速缓存,主要是为了缓存指令和缓存数据,一级缓存的容量对CPU性能影响非常大,但是因为成本太高,所以一般容量特别小,也就256KB左右。

  二级缓存是CPU第二层级的高速缓存,对于CPU来说,二级缓存容量越大越好,它是直接影响CPU性能的,CPU每个核心都会有自己的缓存,一个CPU的二级缓存容量是所有核心二级缓存容量的总和。

  三级缓存就是CPU第三层级的高速缓存,主要是为了降低与内存进行数据传输时的延迟问题,三级缓存与一二级不同,三级缓存只有一个,它是所有核心共享,所以在CPU参数中可以看到,三级缓存相对于其他两级缓存来说都很大。

  由于缓存的设置与OS无关且透明,所以对于不同的体系架构下不同的处理器对待缓存区域的处理和方式都不同,不同的处理器也有不同的缓存设置值。从主流的处理器cache大小来看,一般一个cache line的大小都是固定的64B左右,这是经过经验得到的比较合理的大小,一般一级cache大小在数十KB左右,二级cache大小在数十到数百KB左右,而L3 cache大小在数MB左右。

四. 各级缓存之间的数据放置与数据淘汰策略

  由于三级cache一般来说是运用于拥有多核的处理器,对于单核处理器来说二级cache就能够足够保持够高的cache命中率。所以一般的三级cache一般只针对于多核处理器。L1和L2级cache是处理器核所单独的内容。L1又可以看成是L2的cache。L2可以看成是L3级cache的cache。所以我们分两个部分讨论数据放置与数据淘汰策略。

4.1 各级cache之间数据放置方式

  各级cache间的数据放置策略主要有三种。直接相连映射,全相联映射和组相联映射。将一个主存块存储到唯一的一个Cache行。对应的大小都是一个cache line的大小,一般来说是64B。

4.1.1直接相连映射

  多对一的映射关系,但一个主存块只能拷贝到cache的一个特定行位置上去。cache的行号i和主存的块号j有如下函数关系:i=j mod m(m为cache中的总行数)。

CPU 与 Memory 内存之间的三级缓存的实现原理7

  • 优点:硬件简单,容易实现
  • 缺点:命中率低, Cache的存储空间利用率低

4.1.2全相联映射

  可以将一个主存块存储到任意一个Cache行。
主存的一个块直接拷贝到cache中的任意一行上
CPU 与 Memory 内存之间的三级缓存的实现原理8

  • 优点:命中率较高,Cache的存储空间利用率高
  • 缺点:线路复杂,成本高,速度低

4.1.3组相联映射

  可以将一个主存块存储到唯一的一个Cache组中任意一个行。
将cache分成u组,每组v行,主存块存放到哪个组是固定的,至于存到该组哪一行是灵活的,即有如下函数关系:cache总行数m=u×v 组号q=j mod u

CPU 与 Memory 内存之间的三级缓存的实现原理9

  组间采用直接映射,组内为全相联。硬件较简单,速度较快,命中率较高。是现代处理器中一般所常用的映射方式。

4.2 数据淘汰策略

  Cache工作原理要求它尽量保存最新数据,当从主存向Cache传送一个新块,而Cache中可用位置已被占满时,就会产生Cache替换的问题。
常用的替换算法有下面三种。

4.2.1 LFU

  LFU(Least Frequently Used,最不经常使用)算法将一段时间内被访问次数最少的那个块替换出去。每块设置一个计数器,从0开始计数,每访问一次,被访块的计数器就增1。当需要替换时,将计数值最小的块换出,同时将所有块的计数器都清零。
这种算法将计数周期限定在对这些特定块两次替换之间的间隔时间内,不能严格反映近期访问情况,新调入的块很容易被替换出去。

4.2.2 LRU

  LRU(Least Recently Used,近期最少使用)算法是把CPU近期最少使用的块替换出去。这种替换方法需要随时记录Cache中各块的使用情况,以便确定哪个块是近期最少使用的块。每块也设置一个计数器,Cache每命中一次,命中块计数器清零,其他各块计数器增1。当需要替换时,将计数值最大的块换出。
  LRU算法相对合理,但实现起来比较复杂,系统开销较大。这种算法保护了刚调入Cache的新数据块,具有较高的命中率。LRU算法不能肯定调出去的块近期不会再被使用,所以这种替换算法不能算作最合理、最优秀的算法。但是研究表明,采用这种算法可使Cache的命中率达到90%左右。

4.2.3 随机替换

  最简单的替换算法是随机替换。随机替换算法完全不管Cache的情况,简单地根据一个随机数选择一块替换出去。随机替换算法在硬件上容易实现,且速度也比前两种算法快。缺点则是降低了命中率和Cache工作效率。

五. 整个缓存结构的访问流程

5.1 查找命中

  处理器微架构访问Cache的方法与访问主存储器有类似之处。主存储器使用地址编码方式,微架构可以地址寻址方式访问这些存储器。Cache也使用了类似的地址编码方式,微架构也是使用这些地址操纵着各级Cache,可以将数据写入Cache,也可以从Cache中读出内容。只是这一切微架构针对Cache的操作并不是简单的地址访问操作。为简化起见,我们忽略各类Virtual Cache,讨论最基础的Cache访问操作,并借此讨论CPU如何使用TLB完成虚实地址转换,最终完成对Cache的读写操作。
CPU 与 Memory 内存之间的三级缓存的实现原理10
  Cache的存在使得CPU Core的存储器读写操作略微显得复杂。CPU Core在进行存储器方式时,首先使用EPN(Effective Page Number)进行虚实地址转换,并同时使用CLN(Cache Line Number)查找合适的Cache Block。这两个步骤可以同时进行。在使用Virtual Cache时,还可以使用虚拟地址对Cache进行寻址。为简化起见,我们并不考虑Virtual Cache的实现细节。

  EPN经过转换后得到VPN,之后在TLB中查找并得到最终的RPN(Real Page Number)。如果期间发生了TLB Miss,将带来一系列的严重的系统惩罚,我们只讨论TLB Hit的情况,此时将很快获得合适的RPN,并依此得到PA(Physical Address)。

  在多数处理器微架构中,Cache由多行多列组成,使用CLN进行索引最终可以得到一个完整的Cache Block。但是在这个Cache Block中的数据并不一定是CPU Core所需要的。因此有必要进行一些检查,将Cache Block中存放的Address与通过虚实地址转换得到的PA进行地址比较(Compare Address)。如果结果相同而且状态位匹配,则表明Cache Hit。此时微架构再经过Byte Select and Align部件最终获得所需要的数据。如果发生Cache Miss,CPU需要使用PA进一步索引主存储器获得最终的数据。

  由上文的分析,我们可以发现,一个Cache Block由预先存放的地址信息,状态位和数据单元组成。一个Cache由多个这样的Cache Block组成,在不同的微架构中,可以使用不同的Cache Block组成结构。我们首先分析单个Cache Block的组成结构。单个Cache Block由Tag字段,状态位和数据单元组成,如图所示。
CPU 与 Memory 内存之间的三级缓存的实现原理11

  其中Data字段存放该Cache Block中的数据,在多数处理器微架构中,其大小为32或者64字节。Status字段存放当前Cache Block的状态,在多数处理器系统中,这个状态字段包含MESI,MOESI或者MESIF这些状态信息,在有些微架构的Cache Block中,还存在一个L位,表示当前Cache Block是否可以锁定。许多将Cache模拟成SRAM的微架构就是利用了这个L位。有关MOESIFL这些状态位的说明将在下文中详细描述。在多核处理器和复杂的Cache Hierarchy环境下,状态信息远不止MOESIF。

  RAT(Real Address Tag)记录在该Cache Block中存放的Data字段与那个地址相关,在RAT中存放的是部分物理地址信息,虽然在一个CPU中物理地址可能有40,46或者48位,但是在Cache中并不需要存放全部地址信息。因为从Cache的角度上看,CPU使用的地址被分解成为了若干段,如图所示。

CPU 与 Memory 内存之间的三级缓存的实现原理12

  这个地址也可以理解为CPU访问Cache使用的地址,由多个数据段组成。首先需要说明的是Cache Line Index字段。这一字段与Cache Line Number类似,CPU使用该字段从Cache中选择一个或者一组Entry。

  Bank和Byte字段之和确定了单个Cache的Data字段长度,通常也将这个长度称为Cache 行长度,上图所示的微架构中的Cache Block长度为64字节。目前多数支持DDR3 SDRAM的微架构使用的Cache Block长度都是64字节。部分原因是由于DDR3 SDRAM的一次Burst Line为8,一次基本Burst操作访问的数据大小为64字节。

  在处理器微架构中,将地址为Bank和Byte两个字段出于提高Cache Block访问效率的考虑。Multi-Bank Mechanism是一种常用的提高访问效率的方法,采用这种机制后,CPU访问Cache时,只要不是对同一个Bank进行访问,即可并发执行。Byte字段决定了Cache的端口位宽,在现代微架构中,访问Cache的总线位宽为64位或者为128位。

  剩余的字段即为Real Address Tag,这个字段与单个Cache中的Real Address Tag的字段长度相同。CPU使用地址中的Real Address Tag字段与Cache Block的对应字段和一些状态位进行联合比较,判断其访问数据是否在Cache中命中

5.2 cache 不命中

  如果cache miss,就去下一级cache或者主存中去查找数据,并将查找到的数据采用上面的数据淘汰策略将数据替换到cache中。

5.3 cache和主存数据一致性保持

  由于在发生cache miss时会产生数据替换,在运行过程中缓存的数据也可能会被修改。所以需要一个策略来保持数据在缓存和主存间的一致性。
Cache写机制分为write through和write back两种。

  • Write-through(直写模式)在数据更新时,同时写入缓存Cache和主存存储。此模式的优点是操作简单;缺点是因为数据修改需要同时写入存储,数据写入速度较慢。

  • Write-back(回写模式)在数据更新时只写入缓存Cache。只在数据被替换出缓存时,被修改的缓存数据才会被写到后端存储。此模式的优点是数据写入速度快,因为不需要写存储;缺点是一旦更新后的数据未被写入存储时出现系统掉电的情况,数据将无法找回。

  • Write-through(直写模式)在数据更新时,同时写入缓存Cache和主存存储。此模式的优点是操作简单;缺点是因为数据修改需要同时写入存储,数据写入速度较慢。

  • Write-back(回写模式)在数据更新时只写入缓存Cache。只在数据被替换出缓存时,被修改的缓存数据才会被写到后端存储。此模式的优点是数据写入速度快,因为不需要写存储;缺点是一旦更新后的数据未被写入存储时出现系统掉电的情况,数据将无法找回。

计算机系统-内存与CPU 内存(Memory),通常指随机存取存储器(RAM, Random Access Memory),是计算机系统中的一种高速存储器,用于临时存储当前正在使用的数据和程序。同样,硬盘或SSD存储计算机中的所有文件和程序,但它们访问速度较慢,需要时才加载到内存中。内存(RAM)可以类比为一个办公桌或工作台,它在计算机中起到的作用类似于你在工作时用来放置和处理当前工作资料的地方。总结来说,内存相当于计算机的工作空间,它决定了你在工作时可以同时处理多少文件和信息,以及处理这些信息的效率。 阅读详情

相关推荐

深入浅出DPDK学习笔记(3)——— Cache和内存

深入浅出DPDK学习笔记(3)——— Cache和内存系统架构的演进Cache系统简介Cache的种类TLB CacheCache地址映射和变换全关联型Cache直接关联型Cache组关联型CacheCache的写策略Cache预取Cache的预取原理软件预取软件预取指令DPDK中的预取Cache一致性Cache Line对齐Cache一致性问题的由来一致性协议MESI协议DPDK如何保证Cache一致性TLB和大页逻辑地址到物理地址的转换TLB使用大页如何激活大页DDIONUMA系统 系统架构的演进 在经

superbfly的专栏 3118

三级缓存的理解

三级缓存的理解

beiback的博客 4101

CPU三级缓存技术解析

CPU三级缓存技术解析 cpu存取数据 cpu存取数据大致可以认为是下图的流程(此处图比较简单) cpu拿到需要的内存地址,之后这个地址会被mmu转换成真正的物理地址,接下来会去查接下来查L1 cache,L1 cache不命中查L2 cache,L2 cache不命中查L3 cache,L3 cache不能命中查内存。 其实现在查到内存还算完,现在有了虚拟内存,内存其实也是一层cache,是磁盘的cache,也就是说查内存也有可能不会命中,因为内存中的数据可能被虚拟内存系统放到磁盘中了,如果内存也不能命

吴建明wujianming_110117 3463

Spring--三级缓存机制

/ 一级缓存Map 存放完整的Bean(流程跑完的)// 二级缓存Map 存放不完整的Bean(只实例化完,还没属性赋值、初始化)// 三级缓存Map 存放一个Bean的lambda表达式(也是刚实例化完)用来解决什么问题?这个大家应该熟知了,就是循环依赖什么是循环依赖?就像下面这样,AService 中注入了BService ,而BService 中又注入了AService ,这就是循环依赖@Service@Resource@Service@Resource。

gghhb12的博客 7143

CPU缓存与Java内存模型

CPU多级缓存 局部性原理: 1)时间局部性:如果某个数据被访问,那么在不久的将来它很可能再次被访问; 2)空间局部性:如果某个数据被访问,那么它相邻的数据很快也可能被访问。 缓存一致性(MESI) 定义了四种cache life的四种状态: 状态 描述 M(Modified) 这行数据有效,数据被修改了,和内存中的数据不一致,数据只存在于本Cache中。 E(Exclus...

chenxiaoti的博客 4581

CPU,缓存,内存,外存概念挖掘

目录 一:缓存 二:CPU (1)组成 (2)为什么需要缓存 (3)作用 (4)CPU的多级缓存 三:运行内存 与 物理内存 与虚拟内存 的区别 四:内存与外存的区别 五:参考文章 一:缓存 定义:凡是位于速度相差较大的两种硬件之间,用于协调两者数据传输速度差异的结构,均可称之为Cache 被扩充概念:如今缓存的概念已被扩充,不仅在CPU和主内存之间有Cach...

威少(微笑) 2616

CPU 与 Memory 内存之间的三级缓存的实现原理

title: CPU Cache date: 2019-11-17 20:20:30 keywords: cache “CPU cache” “三级缓存” 缓存映射 cache原理 多级cache TLB Linux的CPU cache 一. CPU 与 Memory 内存之间的三级缓存的实现原理 1.1 cache 存在的原理   引入 Cache 的理论基础是程序局部性原理,包括时间局部性和...

qq_38877888的博客 4167

随机森林模型及案例(Python)

1 集成模型简介 集成学习模型使用一系列弱学习器(也称为基础模型或基模型)进行学习,并将各个弱学习器的结果进行整合,从而获得比单个学习器更好的学习效果。 集成学习模型的常见算法有Bagging算法和Boosting算法两种。 Bagging算法的典型机器学习模型为随机森林模型,而Boosting算法的典型机器学习模型则为AdaBoost、GBDT、XGBoost和LightGBM模型。 1.1 Bagging算法简介 Bagging算法的原理类似投票,每个弱学习器都有一票,最终根据所有弱学习器的投

qq_42433311的博客 4万+

Java并发编程-cpu的高速缓存

在学习并发编程时,常会接触到一些诸如本地内存,主存,栈内存,堆内存,局部变量,全局变量之类的专业词汇。并且我们知道,本地内存,栈内存,局部变量是线程私有的,因此是线程安全的。而主存,对内存,全局变量则是线程共享的,是不安全的。这些其实是从JVM的内存模型中可以得到的答案,但为什么JVM的内存模型要这么设计呢?为什么JVM要设计出堆内存这种线程不安全的内存区域,然后又提供锁机制来保证线程安全,增加我...

qq_18331665的博客 1499

告别F5失灵!手把手教你为Cursor配置.Net Core控制台项目专属调试环境

本文详细指导如何在Cursor编辑器中为.Net Core控制台项目配置专属调试环境,解决F5失灵等常见问题。从调试器选择到launch.json配置,再到高级调试技巧,帮助开发者高效搭建完整的调试工具链,提升开发效率。

weixin_28834765的博客 285

Linux中Hadoop 集群搭建

零、下载Hadoop: http://archive.cloudera.com/cdh5/cdh/5/?tdsourcetag=s_pctim_aiomsg 一、集群规划: 搭建的 hadoop 集群由 3 台服务器组成,分别叫做 master,salve1 和 slave2。其中 master 作为主节点,slave1 和 slave2 作为从节点。 二、网络配置: 1.查看 3 个节点的主机名...

白墨的小白博客 3992

CPU的一、二、三级缓存

CPU高级缓存,(英语:CPU Cache,在本文中简称缓存)是用于减少处理器访问内存所需平均时间的部件。在金字塔式存储体系中它位于自顶向下的第二层,仅次于CPU寄存器。其容量远小于内存,但速度却可以接近处理器的频率。当处理器发出内存访问请求时,会先查看缓存内是否有请求数据。如果存在(命中),则不经访问内存直接返回该数据;如果不存在(失效),则要先把内存中的相应数据载入缓存,再将其返回处理器。缓存之所以有效,主要是因为程序运行时对内存的访问呈现局部性(Locality)特征。

帝上无天的博客 1万+

物体检测之非极大值抑制:NMS、softNMS、softerNMS、IoU-Net

当前的物体检测算法为了保证召回率,对于同一个真实物体往往会有多个的候选框输出。由于多余的候选框会影响检测精度,因此需要利用NMS过滤掉重叠的候选框,得到最佳的预测输出。当前有如下几种较为常见的NMS方法, 1.基本NMS 非极大值抑制, 顾名思义就是抑制不是极大值的边框,这里的抑制通常是直接去掉冗余的边框。 这个过程涉及以下两个量化指标: 1.预测得分:NMS假设一个边框的预测得分越高,这个框...

LeoLee 1941

内存条与CPU三级缓存之间的区别

🧠 内存条(RAM)与CPU三级缓存(L3 Cache)核心差异摘要 本质区别:内存条(GB级DRAM)是主存,容量大但速度慢;L3缓存(MB级SRAM)是CPU内置高速缓存,容量小但速度快10倍以上。 关键对比: 速度:L3延迟10-20ns,内存50-120ns 容量:L3约4-96MB,内存8-128GB 位置:内存插主板,L3集成在CPU内 成本:L3单位成本远高于内存 工作原理:CPU按L1→L2→L3→内存层级查找数据,缓存命中率直接影响性能。理解该机制有助于编程优化(如内存对齐、缓存预热)。

码码哈哈的博客 837

PCAN-Explorer5使用教程

在PCAN中新建工程,导入DBC文件(右键apply),导入采集的数据选择对应的CAN通道点击红框中的标记可选择想要查看的信号在plot界面跳出属性,可调整信号显示的样式和最大最小值调出cursor,选择需要观测的变量,选中右键style——Period 可显示间隔时间增加cursor,可观测多个变量。

weixin_43997043的博客 6912

2025年12月GESP真题及题解(C++一级): 小杨的爱心快递

2025年12月GESP真题及题解(C++一级): 小杨的爱心快递

王老师青少年编程 1648

CPU架构、三级缓存以及内存优化屏障

冯诺依曼体系架构下的内存、缓存布局;常见的两种CPU架构;以及内存屏障的理解。

电气工程专业本科生、辅修计算机。分享嵌入式、后端等方面的系统学习路径。 1296

国科大学习资料--自然语言处理(宗成庆)-2019期末考试题

国科大学习资料–自然语言处理(宗成庆)-2019期末考试题 国科大学习资料–自然语言处理(宗成庆)-2019期末考试题 国科大学习资料–自然语言处理(宗成庆)-2019期末考试题

无名何许人的博客 2438

一级缓存、二级缓存、三级缓存区别是什么 详解它们的区分方法

大家都知道CPU缓存很重要,但对于缓存的具体细分却知之甚少,本文只要是关于CPU缓存的介绍,并着重描述了一级缓存、二级缓存、三级缓存区别方法。 CPU缓存 CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。高速缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使...

平庸 2万+

在 Esp32 摄像头上实现边缘脉冲 FOMO 物体检测

本文将详细介绍如何在 Esp32 摄像头上实现边缘脉冲 FOMO 物体检测,并提供实现源码

DT程序员的博客 705

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

CPU三级缓存简介

计算机的CPU缓存(cache)作为一种存储结构,在数据的读写中发挥着十分重要的作用。其最主要的作用,是解决速度不匹配的问题。

weixin_43719763的博客 3486

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

CPU三级缓存原理与优化

各个层级的速度和空间大小可以参照上图,图中以普通的家用计算机为例子粗略的估计了数据,请不要有刻板的印象(不同配置的机器可能产生较大的误差),而且不是所有CPU都按照三级缓存的结构进行存储的。Disk就是我们常说的硬盘,一般分为两种,SSD(固态硬盘)和HDD(机械硬盘),现代的计算机很少见到机械硬盘了,固态硬盘的访问速度相对于RAM来讲,要断崖式的下降,但是可用空间也是爆炸式的增长。L1缓存分成两部分,指令缓存和数据缓存,指令缓存用于存储最近使用的指令,而数据缓存则存储最近使用的数据。我们称为“三级缓存‘

yueh0607 2370

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

CPU三级缓存

缓存又叫高速缓冲存储器,其作用在于缓解主存速度慢、跟不上CPU读写速度要求的矛盾。 缓存的实现原理,是把CPU最近最可能用到的少量信息(数据或指令)从主存复制到CACHE中,当CPU下次再用这些信息时,它就不必访问慢速的主存,而直接从快速的CACHE中得到,从而提高了得到这些信息的速度,使CPU有更高的运行效率。 ———————————————— 版权声明:本文为优快云博主「王小二(海阔天空)」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:ht...

qq_29547673的博客 5007

缓存双雄对决:CPU三级缓存与Mybatis二级缓存的深度解析与性能密码(第四章)

摘要:本文介绍了计算机缓存和MyBatis缓存的工作原理。计算机缓存分为三级:一级缓存(L1)集成在CPU内部,速度最快但容量最小;二级缓存(L2)协调L1与内存的工作;三级缓存(L3)进一步扩展容量。不同CPU厂商的缓存设计存在差异。MyBatis缓存分为一级缓存(SqlSession级别)和二级缓存(Mapper级别),二级缓存可跨SqlSession共享。使用二级缓存需注意数据一致性问题,建议同一namespace下的操作才使用二级缓存,以避免脏读。

weixin_38839402的博客 939

CPU三级缓存和缓存行的概念

CPU三级缓存和缓存行的概念什么是三级缓存为什么需要三级缓存缓存块(行)的概念程序局部性原理cpu cache 读取过程缓存行读多大?如何写出让cpu跑的更快的代码 什么是三级缓存 cpu存取数据大致可以认为是下图的流程 cpu拿到需要的内存地址,之后这个地址会被mmu转换成真正的物理地址,接下来会去查接下来查L1 cache,L1 cache不命中查L2 cache,L2 cache不命中查L3 cache,L3 cache不能命中查内存。 为什么需要三级缓存 为了弥补 CPU 与内存两者之间的性能差异

qq_42405967的博客 2701
上一篇: windows异常机制相关知识
下一篇: 字符编码常识简单介绍
靠谱架构阿杰
博客等级 码龄19年 1278粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

靠谱架构阿杰

你们的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值