CS149MemoryConsistency

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

Lock implement

这块内容主要讲了一些Lock的实现方法,首先是test and set lock

test-and-set lock

实现Lock需要原子操作,例如slides中提到的情况,如果没有原子操作可能多个processor同时获得锁

image-20221129205541389

hw提供test-and-set原子指令

image-20221129205747711

但是test-and-se lockt有个问题

  • 它是spin lock,当然在某些情况下需要spin lock,但是除非非常在意延迟,不然不会想用spin Lock的
  • 因为test-and-set是一个写操作(虽然不一定写成),会导致Cache bus 繁忙
image-20221129211501013

可以看到因为BusRdx,不断drop其他processor中的Cache,导致Cache traffic特别糟糕

test-and-test-and-set lock

image-20221129211640522

其他processor现在不需要busRdx,只需要BusRd,相当于大家一块读Lock,Cache的命中会好很多。

image-20221129211820762

ticket lock

image-20221129211950906

ticket lock在release Lock时候,只会drop一个processor对应的的Cache line(因为该processor一直读对应位置)

posted @ 2022-11-29 20:44  kalice  阅读(113)  评论(0)    收藏  举报