多核cache一致性

原创 2013年12月05日 17:31:53

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。

参考文献

http://blog.csdn.net/muxiqingyang/article/details/6615199
http://en.wikipedia.org/wiki/MOESI_protocol
AMD64 Architecture Programmer's Manual Vol 2 'System Programming
http://blog.sina.com.cn/s/blog_6472c4cc0100qxcd.html


相关文章推荐

关于CPU的Cache

0 前言 这其实是对参考文献的一些总结和翻译,有一些内容和原文的顺序不一致,另外就是我的翻译水平不高,一些用词可能不准确。 本来想大部分都翻译的,不过后面一些看起来有点迷糊,而且发现其实和...

CCS编译器报错: error #10234-D: unresolved symbols remain

刚接触CCS编译器,新建test工程,出现如下错误:error #10234-D: unresolved symbols remain如果出现一些系统的声明函数调用不到。解决办法:右击工程->Prop...

基于目录的cache一致性

基于目录的cache一致性: 目录协议必须进行的操作: 处理读缺失和处理共享未修改cache块的写操作 cache块出现的状态: 共享:一个或者多个处理器拥有cache...

多核程序设计——缓存一致性协议MESI

MESI协议    在MP系统中,每个CPU都有自己独立的cache,缓存之间的一致性很很容易受到破坏的,所以缓存一致性协议就应运而生了。MESI是一种使用非常广泛的缓存一致性协议。    MESI存...

转载:多核环境下编写程序需注意cache

转载来自:http://blog.chinaunix.net/uid-14617649-id-3058621.html 前阵子接触到一道关于数组内部链表(多用于内存池技术)的数据结构的题, 这种...

主从DB与cache一致性

  • 2017年03月01日 18:27
  • 184KB
  • 下载

cache一致性协:MESI和MOESI

转自:http://blog.sina.com.cn/s/blog_6472c4cc0100qxcd.html PCI设备对可Cache的存储器空间进行DMA读写的操作的过程较为复杂,有关Ca...

C64+ DSP Cache 一致性

  • 2017年07月18日 23:14
  • 134KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多核cache一致性
举报原因:
原因补充:

(最多只允许输入30个字)