当前位置:网站首页>CPU缓存一致性问题
CPU缓存一致性问题
2022-07-30 05:45:00 【zpv2jdfc】
今天复习了下CPU缓存的知识。(๑•̀ㅂ•́)و*
CPU的访问速率要远高于内存的访问速率,为了减少内存访问次数,提高计算机系统效率,CPU中引入了缓存。

这是我虚拟机的三级缓存结构。L1d和L1i是一级缓存,他距离cpu核心最近,
其中,l1d用来存数据,l1i用来存指令。L1和L1 cache是每个核心独有的缓存,而L3则是多个cpu核心共享的。
缓存每次从内存中读取的数据的大小cache line 可以从这里看到,默认是64字节。
接下来进入正题:
数据写入内存的两种方式
如何同步cache和内存的数据呢?
写直达 & 写回
写直达就是每次写数据的时候都同时往cache和内存写。如果写操作比较频繁的话,这样显然效率很低。
写回则是cpu只往cache写,只有当某个cache block要被替换时,才把他写回内存,这就引出了下一个问题:
缓存一致性问题
因为每个cpu核心都有自己私有的cache。假设有两个cpu核心A和B,他们都从内存读取了同一个变量i,之后A修改了 i 的值并且写回了内存,此时B的缓存中 i 的值就和内存中的i不一样了。
- 为了保证数据的一致性,首先要做到 写传播,即一个cpu修改了cache数据时,要通知给其他的cpu。
- 其次要做到 事务串行化,假设有两个个cpu核心,都修改了同一个变量 i,他们俩在把“我修改了 i ”这个消息传递给其他cpu时,可能消息达到的顺序不同,这样也会产生问题。
总线嗅探
通过总线嗅探可以实现写传播,但是会增加总线的压力,另外,总线嗅探也不能保证事务串行化。
MESI协议
MESI协议解决了写传播和事务串行化这两个问题。
MESI用四种状态来表示cache的状态:
- M:Modified 修改
- E:Exclusive 独占
- S:Shared 共享
- I:Invalidated 失效
MESI协议中,如果有个cpu核心修改了cache的值,他就会把自己这个cache block标志为M,同时告诉其他的核心,让他们把对应的cache block标记为I,如果qita核心要读取这块内容的话,他就要先把这个cache block写回内存,然后状态该改为S。
还有其他几种情况,比如要写的时候发现是 I。用MESI的四种状态都可以解决。
伪共享
但这里还有一个不太合理的地方,假设cpu核心A和B都读取了相同的cache block,A一直修改缓存中 a的值,B则一直修改 b的值。按理说他们俩操作不同的值应该是不存在一致性问题的,但由于a和b这俩变量挨得比较近,会读取到同一个cache block中,A每次修改完a就会把B的cache block置为无效,B也一样,这就是伪共享问题。
留在下一篇 ヾ(≧▽≦*)o
边栏推荐
- Kotlin协程的简单用法:1、GlobalScope(不建议使用);2、lifecycleScope、viewModelScope(建议使用);
- 十二、Kotlin进阶学习:一、Lambda 表达式;二、高阶函数;
- Pytorch(三):可视化工具(Tensorboard、Visdom)
- 配置MMdetection环境并训练
- 【总结】工业检测项目中如何选择合适的损失函数
- Function functional interface and application
- 联影医疗一面
- 思谋面试准备
- FPGA解析B码----连载2
- UAV ecological environment monitoring, image processing and GIS data analysis
猜你喜欢

2021-09-16 集成学习上--task1机器学习数学基础

大气颗粒物 PMF 源解析

标准化(Normalization)知识点总结

十八、Kotlin进阶学习:1、挂起函数执行的顺序;2、使用 async 和 await 异步执行挂起函数;3、协程的调度器;4、父子协程;

边境的悍匪—机器学习实战:第十章 Keras人工神经网络简介

探究make_shared效率

Flood Control Assessment Report Compilation Method and Flood Modelling under the New Guidelines (HEC-RAS)

十四、Kotlin进阶学习:一、内联函数 inline;二、泛型;三、泛型约束;四、子类与子类型;

QT连载3:基于QT和STM32H750的LORA试验平台(2)

Pytorch(一):动态图机制以及框架结构
随机推荐
六、Kotlin基础学习:函数
Dropout原理及作用
Target detection, object classification and semantic segmentation of UAV remote sensing images based on PyTorch deep learning
昆仑通态屏幕制作(连载4)---基础篇(图形设定与显示,按钮灯)
HSPF 模型应用
2021-09-16 集成学习上--task1机器学习数学基础
Rsync realizes folder or data synchronization between Win systems
AAcell五号文档室——跨平台文件传输的小室一间一间的
Nodejs PM2 monitoring and alarm email (2)
边境的悍匪—机器学习实战:第十五章 使用CNN和RNN处理序列
Application of remote sensing, GIS and GPS technology in hydrology, meteorology, disaster, ecology, environment and health
C语言实战小项目(传统卡牌游戏)
十九、Kotlin进阶学习:1、管道数据的收和发;2、管道的关闭;3、生产者和消费者;4、管道的缓存区;
Biome-BGC 生态系统模型与应用
R-GIS: 如何用R语言实现GIS地理空间分析及模型预测
Arthas command parsing (watch/tt/sc)
迪文串口屏幕制作(连载一)=====准备工作
Receive emails from gmail with pop3
昆仑通态屏幕制作(连载2)---基础篇(设定与显示,串口发送)
八、Kotlin基础学习:1、数据类;2、单例;3、伴生对象;4、密封类;