多核cache一致性

1 多核cache标志位

多核cache主要有两种一致性协议,一种是基于监听的,另外一种是基于目录,在这里我们主要考察基于监听的MOESI协议。

标志位有:

valid: 是否有效

dirty: 脏位

exclusive: 独占标志

cacheline中的状态即如其名称所说:M、O、E、S和I。


状态状态含义
M该Cache行数据有效,数据被修改了,和内存中的数据不一致,数据只存在于本Cache中
O本Cache line被修改,和内存中的数据不一致,不过其它的核可以有这份数据的拷贝
E这行数据有效,数据和内存中的数据一致,数据只存在于本Cache中
S这行数据有效,数据和内存中的数据一致,数据存在于很多Cache中
I这行数据无效

使用valid、dirty、exclusive表示这五种状态:

 validexclusivedirty
M111
O101
E110
S100
I000

合法的状态组合:

   M   O   E   S   I 
 M Red XRed XRed XRed XGreen tick
 O Red XRed XRed XGreen tickGreen tick
 E Red XRed XRed XRed XGreen tick
 S Red XGreen tickRed XGreen tickGreen tick
 I Green tickGreen tickGreen tickGreen tickGreen tick


2 多核cache操作

多核Cache操作主要有Local Read、 Local Write、Remote Read 和 Remote Write。
根据所要访问的数据在本地Cache、其他核Cache或者内存中,这些操作会改变本地Cache和其他核中Cache的状态。

AMD中MOESI协议转换图:
3.3.1 <wbr>Cache一致性的基本概念
MOESI 模型中,“ Probe Read ”表示主设备从其他 CPU 中获取数据拷贝的目的是为了读取数据;而“ Probe Write ”表示主设备从其他 CPU 中获取数据拷贝的目的是为了写入数据;“ Read Hit ”和“ Write Hit ”表示主设备在本地 Cache 中获得数据副本;“ Read Miss ”和“ Write Miss ”表示主设备没有在本地 Cache 中获得数据副本;“ Probe Read Hit ”和“ Probe Write Hit ”表示主设备在其他 CPU Cache 中获得数据副本。

1)Load指令
首先检查本地是否存在,如果存在,则状态就是M、O、E、S,状态不变,直接获取数据返回。
如果不存在,就会访问远程核中的Cache,如果核中存在,则状态可能为M、O、E、S,
则M改成O,E改为S,O、S不变,本地状态变成S。
如果远端核也不存在,那么只能去查询内存了,本地cache中的状态变成E。
2)Store指令
同样要先检查本地是否存在,若存在的话,不管什么状态,都变成M,不能像Load指令那样返回了,还得去告诉其他核,其他核的状态都变成I。
具体在做的时候,可以这样:
如果状态是M、E,则将数据直接写入Cache中,并将状态改为M(当然原来就是M,就不用改了);如果是O、S,则将其他核中的Cache行置为I,本地写入,改成M,返回。
如果不存在,那么就要查找其他核,如果其他核中存在,不管什么状态,都置成I,本地得到数据后,本地状态置成M。
具体做的时候,可以这样:
如果状态为M、O,则要将数据写回到内存,改为I,本地Cache数据写入,状态位M;如果是E和S,改为I,本地数据写入,状态改为M。
如果其他核中也不存在,那么就去从内存中获取数据,本地cache中的状态变成M。

参考文献



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值