CPU的缓存行(Cache Line)是什么

11 篇文章 0 订阅

存储器的层次结构

存储器的层次如下:

其中,L1、L2在CPU内部,L3在主板上,越往上CPU到达的时间越短,CPU内部的数据是独立的,CPU外部的数据是所有CPU共享的。

CPU的数据不一致问题

产生原因

假如主存里有x、y两个数据,它们会先被加载到L3缓存里,让在加载到L1、L2缓存,但是L1、L2是在CPU内部的,那就有可能CPU1把x加载到缓存修改成1,CPU2把x加载到缓存修改成2,产生CPU之间的数据不一致问题,也就是CPU1修改数据CPU2不知道。

解决方案

方案一:总线锁。由于L2是通过使用总线与L3通讯的,所有当CPU1访问L3是可以对总线加锁,不允许其他CPU访问。
缺点:效率偏低
方案二:缓存锁。各种各样的一致性协议,例如英特尔CPU使用了MESI一致性协议,标记成不同的状态,不同的状态进行不同的处理
缺点:对于不能进入缓存的数据无法加锁
现在的CUP是总线锁+缓存锁一起完成的数据一致性

缓存行

缓存行是什么

当CPU从内存里读取一个4个字节数据时,不会只把这4个字节读进来,而是会把这4个字节之后的很多的数据一起读进来,这就是缓存行,现在缓存行的大小多数是64个字节

伪共享问题

假设有内存相邻的数据想x、y,CPU1要修改x,CPU要修改y,CPU1读取x时会把x、y都读进来,CPU1改完要通知其他CPU,CPU1会把整个缓存行数据都通知一遍,这时CPU2虽然不用x但y被通知了,需要重新在读取y所在的缓存行,CPU2改完y后也会把整个缓存行数据都通知一遍,这时CPU1虽然不用y但y被通知了也需要重新读取缓存行,这就产生了位于同一缓存行的两个不同数据,被两个不同CPU锁定,产生互相影响问题 ,也就是伪共享问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值