首页 > 其他分享 >CS149MemoryConsistency

CS149MemoryConsistency

时间:2022-11-29 20:58:35浏览次数:42  
标签:CS149MemoryConsistency Memory Write 内存 consistency 操作 Processor

Memory Consistency和Memory Order

这节课实际上解决了我一直以来非常困惑的一个问题,Memory order到底是个啥。因为之前使用到atomic之类的cpp库,一直困惑里面涉及的Memory order作用

image-20221129102350051

Memory coherence vs. memory consistency

Memory coherence实际上就是Cache 的coherence,需要满足cpu多线程操作同一内存地址的操作能够被线性化。

Memory consistency这是描述了对于不同内存地址操作的行为。

image-20221129102833544

为什么会有Memory consistency?因为无论是编译器还是CPU都可能会对代码进行reordering。

教授提到了四种Reordering的操作:

image-20221129103110108

如果是sequentially consistent内存系统,那么会保证这四种顺序,即满足上述四种顺序的两个内存操作不会被Reordering。

如果是Relaxed Memory consistency,这四种顺序的Reordering都会被允许。

值得注意的是,这里提到的ordering指的是对不同内存地址操作。

relaxed consistency 的一个好处就是能够掩盖一些操作的延迟

image-20221129103941175

Total Store Ordering(TSO)

total store ordering(TSO)去掉了写后读依赖

  • Processor P 可以先执行Read B然后执行Write A,并且所有其他processor都可以观察到这一现象
  • 如果有processor看到了Processor P已经write A, 那么其他Processor都可以看到Processor P已经Write A

Processor Consistency (PC)更加激进些

  • 如果有Processor看到Processor P已经Write A,但是其他Processor仍然有可能看到Processor P还没有Write A。
image-20221129105120805

注意, x86-64也就是Intel cpu的内存模型是TSO。

C++ memory order

教授在cs149 的ppt里面似乎没有提c++ 中的Memory order语义,但是在其cmu15418课程中简单提了c++ 中的两种语义

  • release semantic。在release之前的内存操作不能被reordering到release之后
  • acquire semantic。在acquire之后的内存操作不能被Reordering到reordering到acquire之前。

image-20221129131036652

标签:CS149MemoryConsistency,Memory,Write,内存,consistency,操作,Processor
From: https://www.cnblogs.com/kalicener/p/16936640.html

相关文章