关闭

多核cache一致性

标签: cache一致性MOESI
1518人阅读 评论(0) 收藏 举报
分类:

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表示这五种状态:

  valid exclusive dirty
M 1 1 1
O 1 0 1
E 1 1 0
S 1 0 0
I 0 0 0

合法的状态组合:

   M   O   E   S   I 
 M  Red X Red X Red X Red X Green tick
 O  Red X Red X Red X Green tick Green tick
 E  Red X Red X Red X Red X Green tick
 S  Red X Green tick Red X Green tick Green tick
 I  Green tick Green tick Green tick Green tick Green 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”表示主设备在其他CPUCache中获得数据副本。

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。

参考文献



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:70458次
    • 积分:1378
    • 等级:
    • 排名:千里之外
    • 原创:65篇
    • 转载:33篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论