CPU中的多级缓存

证明CPU指令是乱序执行的 单线程的情况下,2个指令乱了顺序执行没有关系,反正最终的结果是一样的,但是在多线程的情况下,非常有可能出现你不想看到的情形,比如x=0、y=0的情况,比如在预知中没有这种情况,但是多线程的情况下,会出现,所以一定会影响整个多线程程序的运行,单线程的程序不会影响。这两种是乱序执行的排列组合,比如第一个场景是线程1先执行x=b、线程2执行y=a,切换到线程1执行a=1,切换到线程2执行b=1,结果是x=0、y=0。第一种组合先执行a=1、x=b,后执行b=1、y=a,得到的结果是x=0、y=1。 阅读详情

这里是引用
https://blinkfox.github.io/2018/11/18/ruan-jian-gong-ju/cpu-duo-ji-huan-cun/

一、什么是缓存

1. CPU缓存的来历

众所周知,CPU是计算机的大脑,它负责执行程序的指令,而内存负责存数据, 包括程序自身的数据。在很多年前,CPU的频率与内存总线的频率在同一层面上。内存的访问速度仅比寄存器慢一些。但是,这一局面在上世纪90年代被打破了。CPU的频率大大提升,但内存总线的频率与内存芯片的性能却没有得到成比例的提升。并不是因为造不出更快的内存,只是因为太贵了。内存如果要达到目前CPU那样的速度,那么它的造价恐怕要贵上好几个数量级。所以,CPU的运算速度要比内存读写速度快很多,这样会使CPU花费很长的时间等待数据的到来或把数据写入到内存中。所以,为了解决CPU运算速度与内存读写速度不匹配的矛盾,就出现了CPU缓存。

2. CPU缓存的概念

CPU缓存是位于CPU与内存之间的临时数据交换器,它的容量比内存小的多但是交换速度却比内存要快得多。CPU缓存一般直接跟CPU芯片集成或位于主板总线互连的独立芯片上。

为了简化与内存之间的通信,高速缓存控制器是针对数据块,而不是字节进行操作的。高速缓存其实就是一组称之为缓存行(Cache Line)的固定大小的数据块组成的,典型的一行是64字节。

3. CPU缓存的意义

CPU往往需要重复处理相同的数据、重复执行相同的指令,如果这部分数据、指令CPU能在CPU缓存中找到,CPU就不需要从内存或硬盘中再读取数据、指令,从而减少了整机的响应时间。所以,缓存的意义满足以下两种局部性原理:

  • 时间局部性(Temporal Locality):如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。
  • 空间局部性(Spatial Locality):如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。

二、CPU的三级缓存

1. CPU的三级缓存

随着多核CPU的发展,CPU缓存通常分成了三个级别:L1,L2,L3。级别越小越接近CPU,所以速度也更快,同时也代表着容量越小。L1 是最接近CPU的, 它容量最小(例如:32K),速度最快,每个核上都有L1 缓存,L1 缓存在每个核上其实有两个, 一个用于存数据的 L1d Cache(Data Cache),一个用于存指令的 L1i Cache(Instruction Cache)。L2 缓存 更大一些(例如:256K),速度要慢一些, 一般情况下每个核上都有一个独立的L2 缓存; L3 缓存是三级缓存中最大的一级(例如3MB),同时也是最慢的一级, 在同一个CPU插槽之间的核共享一个 L3 缓存。
下图是Intel Core i5-4285U的CPU三级缓存示意图:
在这里插入图片描述
就像数据库缓存一样,获取数据时首先会在最快的缓存中找数据,如果缓存没有命中(Cache miss) 则往下一级找, 直到三级缓存都找不到时,那只有向内存要数据了。一次次地未命中,代表取数据消耗的时间越长。

2. 带有高速缓存CPU执行计算的流程

  1. 程序以及数据被加载到主内存;
  2. 指令和数据被加载到CPU的高速缓存;
  3. CPU执行指令,把结果写到高速缓存;
  4. 高速缓存中的数据写回主内存;
    目前流行的多级缓存结构如下图:在这里插入图片描述

三、CPU缓存一致性协议(MESI)

MESI(Modified Exclusive Shared Or Invalid)是一种广泛使用的支持写回策略的缓存一致性协议。为了保证多个CPU缓存中共享数据的一致性,定义了缓存行(Cache Line)的四种状态,而CPU对缓存行的四种操作可能会产生不一致的状态,因此缓存控制器监听到本地操作和远程操作的时候,需要对地址一致的缓存行的状态进行一致性修改,从而保证数据在多个缓存之间保持一致性。

1. MESI协议中的状态

CPU中每个缓存行(Caceh line)使用4种状态进行标记,使用2bit来表示:

状态描述监听任务状态转换
M 修改 (Modified)该Cache line有效,数据被修改了,和内存中的数据不一致,数据只存在于本Cache中。缓存行必须时刻监听所有试图读该缓存行相对就主存的操作,这种操作必须在缓存将该缓存行写回主存并将状态变成S(共享)状态之前被延迟执行。当被写回主存之后,该缓存行的状态会变成独享(exclusive)状态。
E 独享、互斥 (Exclusive)该Cache line有效,数据和内存中的数据一致,数据只存在于本Cache中。缓存行也必须监听其它缓存读主存中该缓存行的操作,一旦有这种操作,该缓存行需要变成S(共享)状态。当CPU修改该缓存行中内容时,该状态可以变成Modified状态
S 共享 (Shared)该Cache line有效,数据和内存中的数据一致,数据存在于很多Cache中。缓存行也必须监听其它缓存使该缓存行无效或者独享该缓存行的请求,并将该缓存行变成无效(Invalid)。当有一个CPU修改该缓存行时,其它CPU中该缓存行可以被作废(变成无效状态 Invalid)。
无效 (Invalid)该Cache line无效。无无

注意:
对于M和E状态而言总是精确的,他们在和该缓存行的真正状态是一致的,而S状态可能是非一致的。如果一个缓存将处于S状态的缓存行作废了,而另一个缓存实际上可能已经独享了该缓存行,但是该缓存却不会将该缓存行升迁为E状态,这是因为其它缓存不会广播他们作废掉该缓存行的通知,同样由于缓存并没有保存该缓存行的copy的数量,因此(即使有这种通知)也没有办法确定自己是否已经独享了该缓存行

从上面的意义看来E状态是一种投机性的优化:如果一个CPU想修改一个处于S状态的缓存行,总线事务需要将所有该缓存行的copy变成invalid状态,而修改E状态的缓存不需要使用总线事务。

MESI状态转换图:
在这里插入图片描述

2. 多核缓存协同操作

(1) 内存变量

假设有三个CPU A、B、C,对应三个缓存分别是cache a、b、c。在主内存中定义了x的引用值为0。
在这里插入图片描述

(2) 单核读取

执行流程是:

  • CPU A发出了一条指令,从主内存中读取x。
  • 从主内存通过 bus 读取到 CPU A 的缓存中(远端读取 Remote read),这时该 Cache line 修改为 E 状态(独享)。
单核读取

在这里插入图片描述
(3) 双核读取
执行流程是:

  • CPU A发出了一条指令,从主内存中读取x。
  • CPU A从主内存通过bus读取到 cache a 中并将该 Cache line 设置为E状态。
  • CPU B发出了一条指令,从主内存中读取x。
  • CPU B试图从主内存中读取x时,CPU A检测到了地址冲突。这时CPU A对相关数据做出响应。此时x存储于 cache a 和 cache b 中,x在 chche a 和 cache b 中都被设置为S状态(共享)。
双核读取

在这里插入图片描述

(4) 修改数据
执行流程是:

  • CPU A 计算完成后发指令需要修改x.
  • CPU A 将x设置为M状态(修改)并通知缓存了x的 CPU B, CPU B 将本地 cache b 中的x设置为I状态(无效)
  • CPU A 对x进行赋值。
修改数据

在这里插入图片描述
(5) 同步数据
那么执行流程是:

  • CPU B 发出了要读取x的指令。
  • CPU B 通知CPU A,CPU A将修改后的数据同步到主内存时cache a 修改为E(独享)
  • CPU A同步CPU B的x,将cache a和同步后cache b中的x设置为S状态(共享)。
同步数据

在这里插入图片描述

3. CPU 存储模型简介

MESI协议为了保证多个 CPU cache 中共享数据的一致性,定义了 Cache line 的四种状态,而 CPU 对 cache 的4种操作可能会产生不一致状态,因此 cache 控制器监听到本地操作和远程操作的时候,需要对地址一致的 Cache line 状态做出一定的修改,从而保证数据在多个cache之间流转的一致性。

但是,缓存的一致性消息传递是要时间的,这就使得状态切换会有更多的延迟。某些状态的切换需要特殊的处理,可能会阻塞处理器。这些都将会导致各种各样的稳定性和性能问题。比如你需要修改本地缓存中的一条信息,那么你必须将I(无效)状态通知到其他拥有该缓存数据的CPU缓存中,并且等待确认。等待确认的过程会阻塞处理器,这会降低处理器的性能。因为这个等待远远比一个指令的执行时间长的多。所以,为了为了避免这种阻塞导致时间的浪费,引入了存储缓存(Store Buffer)和无效队列(Invalidate Queue)。

(1) 存储缓存

在没有存储缓存时,CPU 要写入一个量,有以下情况:

  • 量不在该 CPU 缓存中,则需要发送 Read Invalidate 信号,再等待此信号返回,之后再写入量到缓存中。
  • 量在该 CPU 缓存中,如果该量的状态是 Exclusive 则直接更改。而如果是 Shared 则需要发送 Invalidate 消息让其它 CPU 感知到这一更改后再更改。

这些情况中,很有可能会触发该 CPU 与其它 CPU 进行通讯,接着需要等待它们回复。这会浪费大量的时钟周期!为了提高效率,可以使用异步的方式去处理:先将值写入到一个 Buffer 中,再发送通讯的信号,等到信号被响应,再应用到 cache 中。并且此 Buffer 能够接受该 CPU 读值。这个 Buffer 就是 Store Buffer。而不须要等待对某个量的赋值指令的完成才继续执行下一条指令,直接去 Store Buffer 中读该量的值,这种优化叫Store Forwarding。

(2) 无效队列

同理,解决了主动发送信号端的效率问题,那么,接受端 CPU 接受到 Invalidate 信号后如果立即采取相应行动(去其它 CPU 同步值),再返回响应信号,则时钟周期也太长了,此处也可优化。接受端 CPU 接受到信号后不是立即采取行动,而是将 Invalidate 信号插入到一个队列 Queue 中,立即作出响应。等到合适的时机,再去处理这个 Queue 中的 Invalidate 信号,并作相应处理。这个 Queue 就是Invalidate Queue。

四、乱序执行

乱序执行(out-of-orderexecution):是指CPU允许将多条指令不按程序规定的顺序分开发送给各相应电路单元处理的技术。这样将根据各电路单元的状态和各指令能否提前执行的具体情况分析后,将能提前执行的指令立即发送给相应电路。

这好比请A、B、C三个名人为晚会题写横幅“春节联欢晚会”六个大字,每人各写两个字。如果这时在一张大纸上按顺序由A写好”春节”后再交给B写”联欢”,然后再由C写”晚会”,那么这样在A写的时候,B和C必须等待,而在B写的时候C仍然要等待而A已经没事了。

但如果采用三个人分别用三张纸同时写的做法, 那么B和C都不必须等待就可以同时各写各的了,甚至C和B还可以比A先写好也没关系(就象乱序执行),但当他们都写完后就必须重新在横幅上(自然可以由别人做,就象CPU中乱序执行后的重新排列单元)按”春节联欢晚会”的顺序排好才能挂出去。

所以,CPU 为什么会有乱序执行优化?本质原因是CPU为了效率,将长费时的操作“异步”执行,排在后面的指令不等前面的指令执行完毕就开始执行后面的指令。而且允许排在前面的长费时指令后于排在后面的指令执行完。

CPU 执行乱序主要有以下几种:

  • 写写乱序(store store):a=1;b=2; -> b=2;a=1;
  • 写读乱序(store load):a=1;load(b); -> load(b);a=1;
  • 读读乱序(load load):load(a);load(b); -> load(b);load(a);
  • 读写乱序(load store):load(a);b=2; -> b=2;load(a);

总而言之,CPU的乱序执行优化指的是处理器为提高运算速度而做出违背代码原有顺序的优化。

CPU多级缓存机制 缓存的设计依赖于SRAM作为高速存储介质,一级缓存(L1)通常直接与CPU核心集成,而二级缓存(L2)可以集成在芯片内或外部。三级缓存(L3)则通常是多个核心共享的,容量更大但速度较慢。标签和数据存储分离的设计,帮助提高缓存的效率,减少数据访问延迟。每一层缓存的设计都是为了在速度、容量、成本、功耗之间找到最佳平衡,以提高整个系统的性能。 阅读详情

相关推荐

CPU缓存系统的设计与实现

作者:禅与计算机程序设计艺术 1.简介 现代计算机系统都采用了高速缓存(Cache)机制来缓冲主存中的数据和指令,从而提升处理器的速度。同时,缓存也起到了优化内存访问模式、改善存储器访问效率等作用。缓存分为一级缓存、二级缓存、三级缓存等,各个层次缓存之间可以共享同一块主存。在CPU中,缓存有两种类型,一

AI天才研究院 1217

CPU多级缓存概念

参考文章:CPU中的多级缓存 后更~

Dontla的博客 1248

华大HC32F460从零到200MHz:手把手教你配置时钟系统(附避坑指南)

本文详细解析了华大HC32F460 MCU的时钟系统配置,从启动过程、时钟树分析到实战配置200MHz系统时钟。文章手把手指导开发者如何正确配置外部晶振、MPLL锁相环及总线分频,并提供了硬件检查、代码解读及常见问题排查的避坑指南,帮助用户从零构建稳定可靠的高性能时钟环境。

net55的博客 296

(转)CPU乱序执行原理

处理器基本上会按照程序中书写的机器指令的顺序执行。按照书写顺序执行称为按序执行(In-Order )。按照书写顺序执行时,如果从内存读取数据的加载指令、除法运算指令等延迟(等待结果的时间)较长的指令后面紧跟着使用该指令结果的指令,就会陷入长时间的等待。尽管这种情况无可奈何,但有时,再下一条指令并不依赖于前面那条延迟较长的指令,只要有了操作数就能执行。

gjq_1988的专栏 2万+

深入解析Gerber RS274X文件格式:从基础语法到实战应用

本文深入解析PCB制造的核心标准Gerber RS274X文件格式,详细介绍了其基础语法、坐标系统、功能码以及嵌入式光圈定义等关键特性。通过实战案例演示了如何解析和手写Gerber指令,并总结了常见错误与调试技巧,帮助PCB工程师掌握这一与制造工厂沟通的“通用语言”,确保设计准确无误地转化为实体电路板。

weixin_29252171的博客 95

避坑指南:Xilinx SelectIO IP核官方例程里那些容易忽略的细节(复位、时钟与数据回环)

本文深入解析Xilinx SelectIO IP核设计中复位策略、时钟域交互和数据回环验证三大关键领域的实战避坑技巧。针对官方例程中易被忽视的细节,如复位同步链深度、时钟相位约束和数据对齐机制,提供经过项目验证的优化方案,帮助工程师节省80%以上的调试时间。特别适用于FPGA开发中高速接口设计场景。

weixin_42561476的博客 448

CPU L1(一级)、L2(二级)和L3(三级)缓存概览

这些缓存层次的设计旨在利用局部性原理(时间局部性和空间局部性),通过缓存最常用的数据和指令,减少对主内存的访问,从而提高计算机程序的执行速度。增加缓存的大小可能会导致访问时间的增加,因为更大的缓存需要更多的时间来搜索和访问。通常情况下,现代 CPU 设计已经在缓存层次结构上进行了精心的平衡,以提供足够的性能而不会引入不必要的复杂性和成本。缓存的设计是复杂而精密的,旨在在提高性能的同时最小化访问主内存的需求,因为内存访问通常是计算机系统中最昂贵的操作之一。多级缓存的存在是为了提供更高的速度和更大的容量。

Lixora's DB Home 1万+

利用pytorch长短期记忆网络LSTM实现股票预测分析

长短时记忆网络(Long Short Term Memory Network, LSTM),是一种改进之后的循环神经网络,可以解决RNN无法处理长距离的依赖的问题,目前比较流行。LSTM主要就是加入了三个门控:第一个开关遗忘门:负责控制继续保存长期状态c;第二个开关输入门:负责控制把即时状态输入到长期状态c;第三个开关输出门:负责控制是否把长期状态c作为当前的LSTM的输出。

优快云 精品推荐 1万+

CPU多级缓存-多核并发缓存架构解析

CPU多级缓存 主内存(RAM):也就是所谓的内存条,一般当数据写入电脑磁盘的时候需要先写入主内存,然后再写入磁盘。 系统主线:连接系统cpu和主内存的系统主线,就比如台式电脑连接主板上连接cpu和内存条的主线。 如下图所示最简单的高速缓存的配置,数据的读取和存储都经过高速缓存,CPU核心与高速缓存有一条特殊的快速通道;主存和高速缓存都连在系统总线上,这条总线还用于其他组件的通信。 高速缓...

q865165648的博客 1525

五步教你用GPT-5画出国自然技术路线图!轻松节省80%画图时间(附AI提示词)

七哥给大家推荐的高校都在用的AI平台——高级学术版专业应用平台,集成了ChatGPT、Claude、Gemini、Grok等Al大模型的PLUS版本平台,包括 ChatGPT-5、4o、o3、4.1、4.5、Gemini 2.5 Pro、Claude 3.7、Claude 4、DeepSeek 满血版、Grok 3 、Grok 4等原生线路,还有国际主流的GPTs学术应用,可以辅助大家高效完成科研和学术写作任务,当然撰写硕博论文,课题、职称论文、国社科、国自然基金本子也是手拿把掐。

智能AI让学术科研更容易 1501

Flutter SDK的删除与重装:一步步教你如何轻松搞定

在Flutter开发过程中,我们可能会遇到一些需要重新安装Flutter SDK的情况,例如升级Flutter版本、解决依赖冲突等。本文将详细介绍如何删除并重新安装Flutter SDK,让你轻松应对各种问题。

理论都是虚的,代码才是王道。 2247

CPU缓存一致性协议MESI - 笔记

CPU缓存一致性协议MESI CPU高速缓存(Cache Memory) CPU为何要有高速缓存 CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU。这就造成了高性能能的内存和硬盘价格及其昂贵。然而CPU的高度运算需要高速的数据。为了解决这个问题,CPU厂商在CPU中内置了少量的高速缓存以解决I\O速度和CPU运算速度之间的不匹配问题。 在CPU...

寒泉 6万+

apollo自动驾驶进阶学习之:如何实现施工路段限速绕行及其参数调试

首先需要理解Planning模块是基于Scenario、Stage、Task这样的层次来进行的,即场景->步骤->具体的决策方法。Apollo可以应对自动驾驶所面临的不同道路场景,都是通过Scenario统一注册与管理。Scenario通过一个有限状态机来判断选择当前行车场景,每个Scenario下又有多个Stage,指当前场景下需要执行的粗略步骤。.........

qq_41593516的博客 6598

cpu高速缓存(cachememory)与多级缓存一致性协议

CPU高速缓存(Cache Memory) CPU为何要有高速缓存 CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU。这就造成了高性能能的内存和硬盘价格及其昂贵。然而CPU的高度运算需要高速的数据。为了解决这个问题,CPU厂商在CPU中内置了少量的高速缓存以解决I\O速度和CPU运算速度之间的不匹配问题。 在CPU访问存储设备时,无论是存取数据抑或存取指令,都趋于聚集在一片连续的区域中,这就被称为局部性原理。 时间局部性(Temporal Locali

lingsheng_的博客 554

机器人控制基础:伺服驱动器的泄放电阻

摘要:伺服驱动器泄放电阻用于消耗电机减速或制动时产生的再生电能,防止母线电压过高损坏元件。其核心作用是将多余电能转化为热能,规避硬件损坏和停机风险。选型需关注功率、阻值和封装三大参数,功率应匹配再生能量,阻值需符合驱动器要求,封装应满足散热需求。可通过动态监测母线电压或静态检测电阻阻值来判断其是否正常工作。

start_up_go的博客 381

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

一文读懂从 CPU 多级缓存 & 缓存一致性协议(MESI)到 Java 内存模型

MESI 缓存一致性协议中为了尽可能的提高性能,引入了 Store Bufferes & Invalidate Queue ,将数据具体的失效时机和写入时间交给了内存屏障控制,而 JMM 则基于内存屏障保证数据的可见性。

Lorin 洛林的后端技术小站 1479

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

CPU缓存一致性协议MESI

文章目录一、CPU高速缓存(Cache Memory)CPU为何要有高速缓存带有高速缓存的CPU执行计算的流程多核CPU多级缓存一致性协议MESIMESI优化和他们引入的问题 一、CPU高速缓存(Cache Memory) CPU为何要有高速缓存 CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU。这就造成了高性能能的内存和硬盘价格及其昂贵。然而CPU的高度运算需要高速的数据。为了解决这个问题,CPU厂商在CPU中内置了少量的高速缓存以解决I\O速度和CPU运

qq1071643762的博客 177

Statistics and Machine Learning Toolbox

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

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

并发,高并发,CPU多级缓存概念

最近一直在学习java并发编程。整理笔记的过程也是对自己考核的过程。一、并发与高并发概念并发:同时有多个线程,【交替】被CPU执行。高并发:保证系统能同时并行处理很多请求的【设计】。可以看到,当谈论并发的时候,我们关注的是多个线程操作相同的资源时,如何保证线程安全,合理利用资源;而谈论高并发时,我们关注的是如果系统在短时间内遇到大量请求(比如淘宝双十一),那么我们如何提高系统的性能(包括硬件、网络...

weixin_40459875的博客 2756

彻底搞懂 CPU 中的内存结构

今天主要就是介绍一下 CPU 中的多级缓存和乱序执行优化,为后面学习多线程做铺垫。先来理解一下 CPU 的结构,后面再说 Java 虚拟机的内存模型。 先放两张图看一下 CPU 和各级缓存、内存、硬盘之间的关系。 下面就来介绍一下为什么会出现多级缓存,以及会出现什么问题,CPU 又是如何解决的。 为什么会出现多级缓存呢?说的简单一点因为 CPU 的频率太快了,...

weixin_30314631的博客 760

CPU高速缓存原理梳理

为什么要用CPU高速缓存? 原因本质是局部性原理,体现在两个方面。 时间局部性: 如果一个信息最近被访问,那么很可能会被再次访问 空间局部性: 如果一个地址被读取,那么它临近的地址也很可能会被访问。 所以相当于我们从时间上缓存了将要执行的指令,从空间上我们缓存将要读取的数据来加速性能。 当然速度上肯定是,寄存器>高速缓存>主内存 为什么多级呢? 我们知道CPU通常都是三级缓存,L1,L2,L3。我们如果想的话,如果性能和成本都足够的话,那么一级就行了。 所以还是资本的原因,精细化管理

sutonline的博客 1120

java缓存--缓存一致性

java缓存--缓存一致性为什么需要缓存缓存是如何运转的缓存的数据结构缓存行高速缓存的存储结构是怎样的多核CPU多级缓存一致性协议MESI 为什么需要缓存 在现代的CPU(大多数)上,所有的内存访问都需要通过层层的缓存来进行。CPU的读/写(以及去指令)单元正常情况下甚至都不能直接与内存进行访问-这是物理结构决定的;CPU都没有管脚直接连到内存。相反,CPU和一级缓存(L1 Cache)通讯,而一级缓存才能和内存进行通讯。大约20年前,一级缓存可以直接和内存传输数据。如今,更多级别的缓存加入到设计中,一级缓

weixin_43840460的博客 1257

vue读取本地cpu_CPU缓存一致性协议MESI

CPU高速缓存(Cache Memory)CPU为何要有高速缓存CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU。这就造成了高性能能的内存和硬盘价格及其昂贵。然而CPU的高度运算需要高速的数据。为了解决这个问题,CPU厂商在CPU中内置了少量的高速缓存以解决IO速度和CPU运算速度之间的不匹配问题。在CPU访问存储设备时,无论是存取数据抑或存取指令,都...

weixin_33037313的博客 520

CPU缓存结构

CPU缓存结构 现代CPU为了提升执行效率,减少CPU与内存的交互(交互影响CPU效率),一般在CPU上集 成了多级缓存架构, 常见的为三级缓存结构 L1 Cache,分为数据缓存和指令缓存,逻辑核独占 L2 Cache,物理核独占,逻辑核共享 L3 Cache,所有物理核共享 存储器存储空间大小:内存>L3>L2>L1>寄存器; 存储器速度快慢排序:寄存器>L1>L2>L3>内存; 缓存行:缓存是由最小的存储区块-缓存行(cacheli...

sunshineKay的博客 1368

揭示volatile关键字背后的奥秘——CPU多级缓存与指令重排

Volatile的两大作用 内存可见性 防止指令重排 Volatile是如何保证内存可见性的? CPU多级缓存 CPU的运行速度非常快,而对磁盘的读写IO速度却很慢,为了解决这个问题,有了内存的诞生; 而CPU的速度与内存的读写速度之比仍然有着100 : 1的差距,为了解决这个问题,CPU又在内存与CPU之间建立了多级别缓存:寄存器、L1、L2、L3三级缓存。 CPU缓存一个最小单位是64Byte:经过工业实践得出,缓存64Byte是一个较为合适的单位大小,不会因为缓存过大,而使得读取速度降低,

eddie's Blog 671

Java高并发--CPU多级缓存与Java内存模型

Java高并发--CPU多级缓存与Java内存模型 主要是学习慕课网实战视频《Java并发编程入门与高并发面试》的笔记 CPU多级缓存 为什么需要CPU缓存:CPU的频率太快,以至于主存跟不上,这样在处理器时钟周期内,CPU常常需要等待主存,浪费了资源。所有缓存的出现是为了缓解CPU和主存之间速度不匹配的问题——将运算所需数据复制到缓存中,使得运算能快速进行;当运算结束后再将缓存同步回内存中,...

weixin_30322405的博客 90

字节面试问到CPU的多级缓存架构,诸佬们怎么回答?_面试 cpu的缓存机制

与L1,L2缓存一样,首先会将L3缓存锁住,将L3缓存复制到L2缓存,在从L2缓存复制到L1缓存上,然后CPU从L1缓存中读取数据后,会对L3进行解锁操作,此时表示从L3缓存中读取数据操作结束。如果CPU需要读取L2缓存中的数据,那么会先从L1缓存中读取数据,如果要读取的数据在L1缓存中不存在,就会将L2缓存加锁,加锁成功后,将L2缓存中的数据复制到L1缓存上,CPU从L1缓存中读取数据完成后,再对L2缓存进行解锁操作,意味着从L2缓存中读取数据的操作结束。L1缓存的存储速度最快,但是存储容量最小。

2401_84573531的博客 1017
上一篇: 常见技术名词的简述:Docker容器、Kubernetes、Paas、微服务、SOA、云原生、Devops
下一篇: leetCode322. 零钱兑换-动态规划
GuoMell
博客等级 码龄11年 30粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值