多线程基础——缓存一致性

本文详细介绍了CPU缓存的结构,包括单核和多核CPU的高速缓存设计,重点讨论了缓存一致性问题,特别是MESI协议的工作原理。缓存一致性旨在保证多核环境下多个缓存副本数据的一致性,通过write through和write back策略管理数据。MESI协议通过四种状态(Modified、Exclusive、Shared、Invalidated)确保缓存行的有效性和同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CPU缓存

CPU的时钟频率非常的快,以至于运行效率与读写内存的效率存在着巨大的鸿沟,在读写内存过程中带来的等待浪费了很大的CPU算力。所以缓存的出现,是为了缓解CPU和内存之间速度的不匹配问题(cpu -> cache -> memory)。

时钟周期:CPU完成一个基本动作需要的时间周期。

向内存中写入数据,据权威资料,需要107个CPU时钟周期,即CPU的运行效率是写内存的107倍。如果CPU只执行写操作需要一个时钟周期,那CPU等待这个写完成需要等待106个时钟周期。

CPU缓存的容量远远小于主存,因此出现cache miss在所难免。缓存不能包含CPU所需要的所有数据,所以缓存存在的意义就在于局部性原理局部性原理具体是指在CPU访问存储设备时,无论是存取数据还是存取指令,都趋于聚集在一片连续的区域中,主要包含时间与空间上的局部性。

  • 时间局部性:如果某个数据被访问,那么在不久的将来它很可能被再次访问
  • 空间局部性:如果某个数据被访问,那么与它相邻的数据很快也可能被访问

程序中,包含着很多连续创建的数组、对象,各种循环、递归、调用同一函数等,其实本质上符合了局部性原理。

高速缓存

有了这样的特性,就可以在CPU和内存之间添加高速缓存存储CPU经常访问的数据,缓解CPU和内存速度严重差异的问题。

高速缓存

CPU和cache之间进行数据/指令存取,而内存(主存)和高速缓存则通过系统总线来实现通信。程序以及数据被加载到内存中后,随后被加载到高速缓存,CPU执行完指令处理完数据将结果写回高速缓存中,最后高速缓存再写回内存。

然而,由于CPU的运算速度不断提升,很快超越了一级缓存的数据 I\O 能力,CPU厂商们又开始引入了多级的缓存结构。多核的CPU至少拥有着不止一个一级缓存,当高速缓存中拷贝了内存中同一个数据多个副本时,CPU操作的是每一个副本,利用缓存一致性的原则保证副本与副本之间,以及副本与主存的数据一致。
多级缓存

单核CPU cache结构

在单核CPU结构中,为了缓解CPU指令流水中cycle冲突,L1分成了指令(L1P)和数据(L1D)两部分,而L2则是指令和数据共存。

多核CPU cache结构

 多核CPU的结构与单核相似,但是多了所有CPU共享的L3三级缓存。在多核CPU的结构中,L1和L2是CPU私有的,L3则是所有CPU核心共享的。

缓存一致性

用于保证多个CPU cache之间缓存共享数据的一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值