博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内存屏障 Memery Barrier .
阅读量:3521 次
发布时间:2019-05-20

本文共 1433 字,大约阅读时间需要 4 分钟。

数据(即DMA想把它写入内存的),用来更新Cache Line的相关部分。

//

“在line 3,GCC不会用存放b的寄存器给a赋值,而是invalidate b的Cache line,重新读内存中的b值,赋值给a。”

感觉这个是不对的。上面都说了“barrier()宏只约束gcc编译器,不约束运行时的CPU行为”,
而invalidate Cache line要调用wbinvd命令,我对GCC的代码进行grep 没有发现使用wbinvd的地方。

4.2) IA32
CPU调用有lock前缀的指令,或者如xchg这样的指令,会导致其它的CPU也触发一定的动作来同步自
己的Cache。
CPU的#lock引脚链接到北桥芯片(North
Bridge)的#lock引脚,当带lock前缀的执行执行时,北桥芯片会拉起#lock
电平,从而锁住总线,直到该指令执行完毕再放开。 而总线加锁会自动invalidate所有CPU对
_该指令涉及的内存_
的Cache,因此barrier就能保证所有CPU的Cache一致性。 ”

总线加锁的功能是保证程序执行的顺序不乱掉,一旦加LOCK指令了,CPU会将此指令前的读写操作都串行完成,这最主要的作用是使CPU的预取等无效了。在这个串行操作中,MESI协议会起作用。但保证所有CPU的Cache一致性的是MESI协议,这是硬件上保证的。barrier是对GCC编译器做约束,是软件层次上的。“因此barrier就能保证所有CPU的Cache一致性”这种说法是不对的。
“4.3) 接着解释。
lock前缀(或cpuid、xchg等指令)使得本CPU的Cache写入了内存,该写入动作也会引起别的CPU
invalidate其Cache。
IA32在每个CPU内部实现了Snoopying(BUS-Watching)技术,监视着总线上是否发生了写内存操作(�
赡掣鯟PU或DMA控
制器发出的),只要发生了,就invalidate相关的Cache line。
因此,只要lock前缀导致本CPU写内存,就必将导致
所有CPU去invalidate其相关的Cache line。 ”
lock指令保证程序执行的顺序不乱掉,没有将“本CPU的Cache写入了内存”的功能。 总线监视功能是由各个CPU的CACHE完成的,这个功能可以算是MESI协议的实现。MESI保证了SMP下的CACHE一致性。

memory barrier的实质是对内存的操作施加顺序上的约束。Memory barrier, also known as membar or memory fence, is a class of instructions whichcause a central processing unit (CPU) to enforce an ordering constraint on memoryoperations issued before and after the barrier instruction.  上文源于:http://www.answers.com/topic/memory-barrier  至于“SMP情况下CACHE的一致性”只是memorybarrier在执行lock,sfence,lfence等指令时的副作用 !!!!,    “SMP情况下CACHE的一致性”是由MESI来做的。

转载地址:http://iyhqj.baihongyu.com/

你可能感兴趣的文章
fjut 1862 奇怪数列(判断一个数是否为2的整次方)
查看>>
C++ STL 之 set 与 multiset 的基本用法
查看>>
Powers of two(multiset的运用)
查看>>
并查集入门(普通并查集+带删除并查集+关系并查集)
查看>>
吉首大学第八届“新星杯”大学生程序设计大赛 A:组合数(递推组合+求因子数)
查看>>
吉首大学第八届“新星杯”大学生程序设计大赛 I: 夫子云游(简单搜索)
查看>>
吉首大学第八届“新星杯”大学生程序设计大赛 K: WaWa的难题(找规律)
查看>>
Codeforces Round #533 (Div. 2) C. Ayoub and Lost Array(dp)
查看>>
Codeforces Round #533 (Div. 2) D. Kilani and the Game(bfs)
查看>>
牛客寒假算法基础集训营3 D:处女座的训练(贪心)
查看>>
G:处女座和小姐姐(三)(思维)
查看>>
求最短路径的四种方法(Dijkstra,Floyd,Bellman-Ford,SPFA算法)
查看>>
处女座的比赛资格(拓扑排序求最短路)
查看>>
牛客寒假算法基础集训营4 I:Applese 的回文串(思维)
查看>>
牛客寒假算法基础集训营4 E:Applese 涂颜色(费马小定理+快速幂)
查看>>
牛客寒假算法基础集训营4 C:Applese 走迷宫(bfs)
查看>>
牛客寒假算法基础集训营4 F:Applese 的QQ群(拓扑排序判环)
查看>>
牛客寒假算法基础集训营4 G:Applese 的毒气炸弹(Kruskal求最小生成树)
查看>>
Codeforces Round #536 (Div. 2) B. Lunar New Year and Food Ordering(思维)
查看>>
Codeforces Round #536 (Div. 2) D. Lunar New Year and a Wander(基础图论)
查看>>