深入理解内存屏障

本文翻译自perfbook的Appendix C章节,深入解析内存屏障和MESI协议。介绍了MESI状态(M、E、S、I)及其转换,以及Read、Writeback等消息类型。通过实例解释了内存屏障如何避免不必要的等待,防止并行编程中的问题,如Store Buffer和Invalidate Queues导致的数据不一致。
摘要由CSDN通过智能技术生成

perfbook Appendix C 章节的翻译,感觉这本书讲内存屏障讲的非常好,以下只是该章节部分英文翻译,想深入理解的可以看看书。

MESI state

M(modify) : CPU拥有该cache line,这个cache line内包含最新的数据,这个cache负责最终写回内存或者传递数据到其他cpu cache
E(exclusiv) : 和modify状态相似,唯一的区别是没有被该CPU修改,和内存中的保持一致.这个CPU可以store data不需要和其他CPU交流
S(Shared) : read only, 至少还有一个CPU的cache有它的相同,和内存的数据也相同
I(invalidate) : empty, it hold no data

MESI protocol 消息类型

Read:
Read消息包含被读cache line的物理地址
Read Response:
回复read消息,内存和其他CPU cache都可以提供该回复消息
如果一个cache line的状态是Modify,这个cache必须提供read response
Invalidate;
包含被无效cache line的物理地址,其他cpu caches 必须移除相应数据并给出响应
Invalidate Acknowledge
收到Invalidate的CPU 必须响应该类型消息
Read Invalidate:
包含被读cache line的物理地址,同时告诉其他cpu cache 无效数据
它是read he invalidate的结合,必须收到read respond 和 incalidate acknowledge回复.
Writeback:
写回内存
该消息允许高速缓存根据需要弹出处于“修改”状态的行,以便为其他数据腾出空间。

MESI 状态转换表:
MESI state

解释:
a(M–>E)
一个cache line 被写回内存,并且该CPU还保留cache line在自己的cache中,未来还有权限修改它.
这个转换需要Writeback消息
b(E–>M)
CPU写一个状态已经是exclusive的cache line
这个转换不需要接受或者发送消息
c(M–>I)
CPU收到它已经修改的某一cache line的read invalidate消息, CPU必须无效他的本地copy,
并发送read respond和invalidate ackknowledge
d(I–>M)
CPU对在他自己的cache上不存在的内存做一个原子的read-modify-write操作,
发送read invalidate
等待接收相对应的respond
e(S–>M)
CPU对在他自己

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值