CPU三级缓存

       缓存又叫高速缓冲存储器,其作用在于缓解主存速度慢、跟不上CPU读写速度要求的矛盾。
       缓存的实现原理,是把CPU最近最可能用到的少量信息(数据或指令)从主存复制到CACHE中,当CPU下次再用这些信息时,它就不必访问慢速的主存,而直接从快速的CACHE中得到,从而提高了得到这些信息的速度,使CPU有更高的运行效率。

      如果你需要对同一批数据操作很多次, 那么把数据放至离CPU更近的缓存, 会给程序带来很大的速度提升. 例如, 做一个循环计数, 把计数变量放到缓存里,就不用每次循环都往内存存取数据了. 下面是CPU Cache的简单示意图. 

    随着多核的发展, CPU Cache分成了三个级别: L1, L2, L3. 级别越小越接近CPU, 所以速度也更快, 同时也代表着容量越小. L1是最接近CPU的, 它容量最小, 例如32K, 速度最快,每个核上都有一个L1 Cache(准确地说每个核上有两个L1 Cache, 一个存数据 L1d Cache, 一个存指令 L1i Cache). L2 Cache 更大一些,例如256K, 速度要慢一些, 一般情况下每个核上都有一个独立的L2 Cache; L3 Cache是三级缓存中最大的一级,例如12MB,同时也是最慢的一级, 在同一个CPU插槽之间的核共享一个L3 Cache.获取数据时首先会在最快的cache中找数据, 如果没有命中(Cache miss) 则往下一级找, 直到三层Cache都找不到,那只要向内存要数据了. 一次次地未命中,代表取数据消耗的时间越长.

缓存行:    

     为了高效地存取缓存, 不是简单随意地将单条数据写入缓存的.  缓存是由缓存行组成的, 典型的一行是64字节. CPU存取缓存都是按行为最小单位操作的. 在这儿我将不提及缓存的associativity问题, 将问题简化一些. 一个Java long型占8字节, 所以从一条缓存行上你可以获取到8个long型变量. 所以如果你访问一个long型数组, 当有一个long被加载到cache中, 你将无消耗地加载了另外7个. 所以你可以非常快地遍历数组.


参考文档:

https://juejin.cn/post/6877820636773761037

https://blog.csdn.net/qq_29229567/article/details/80561212

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
三级缓存是计算机体系结构中的一种层次化缓存结构,用于提高计算机系统的性能和响应速度。 第一级缓存是CPU内部的高速缓存,也叫做L1缓存。它直接集成在CPU芯片中,与CPU同步工作,速度非常快,但容量较小。L1缓存通常以字节为单位,用于存储指令和数据块,供CPU快速读取或写入,以减少对主存的访问次数。 第二级缓存是位于CPU与主存之间的缓存,也叫做L2缓存。它的容量比L1缓存大,速度相对较慢,但仍远快于主存。L2缓存可以缓存L1缓存无法容纳的数据块,提供更多的数据访问并减少对主存的访问延迟。 第三级缓存是位于CPU和主存之间的更大容量的高速缓存,也叫做L3缓存。它主要用于降低对主存的访问频率和延迟,提高整体系统的性能。L3缓存通常由多个缓存模块组成,每个模块包含自己的控制器和存储单元,可以独立读取和写入数据。 由于三级缓存层次结构依次增大容量、降低成本并逐渐扩大访问延迟,数据从L1缓存到L3缓存的访问速度依次减慢。 CPU在访问数据时会先尝试访问L1缓存,如果未命中,则会依次向下尝试访问L2缓存和L3缓存。当数据在L3缓存中未命中时,CPU将从主存中获取数据,并将其存储在L3缓存中以供后续使用。 三级缓存的引入可以大大提高计算机系统的性能,减少对主存的访问次数,缓解主存带宽的压力,并且可以根据不同的应用需求进行灵活配置,从而优化系统性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值