Skip to content

Commit 2fbca7d

Browse files
committed
update memory barrier
1 parent d5b51b3 commit 2fbca7d

File tree

1 file changed

+51
-1
lines changed

1 file changed

+51
-1
lines changed

memory_barrier.md

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ mesi 协议解决了多核环境下,内存多层级带来的问题。使得 ca
126126

127127
## CPU 导致乱序
128128

129-
使用 litmus 进行形式化验证:
129+
使用 litmus 进行验证:
130130

131131
```
132132
cat sb.litmus
@@ -181,6 +181,56 @@ Time SB 0.11
181181

182182
在两个核心上运行汇编指令,意料之外的情况 100w 次中出现了 96 次。虽然很少,但确实是客观存在的情况。
183183

184+
有文档提到,x86 体系的内存序本身比较严格,除了 store-load 以外不存在其它类型的重排,也可以用下列脚本验证:
185+
186+
```
187+
X86 RW
188+
{ x=0; y=0; }
189+
P0 | P1 ;
190+
MOV EAX,[y] | MOV EAX,[x] ;
191+
MOV [x],$1 | MOV [y],$1 ;
192+
locations [x;y;]
193+
exists (0:EAX=1 /\ 1:EAX=1)
194+
```
195+
196+
```
197+
%%%%%%%%%%%%%%%%%%%%%%%%%
198+
% Results for sb.litmus %
199+
%%%%%%%%%%%%%%%%%%%%%%%%%
200+
X86 OOO
201+
202+
{x=0; y=0;}
203+
204+
P0 | P1 ;
205+
MOV EAX,[y] | MOV EAX,[x] ;
206+
MOV [x],$1 | MOV [y],$1 ;
207+
208+
locations [x; y;]
209+
exists (0:EAX=1 /\ 1:EAX=1)
210+
Generated assembler
211+
##START _litmus_P0
212+
movl -4(%rsi,%rcx,4), %eax
213+
movl $1, -4(%rbx,%rcx,4)
214+
##START _litmus_P1
215+
movl -4(%rbx,%rcx,4), %eax
216+
movl $1, -4(%rsi,%rcx,4)
217+
218+
Test OOO Allowed
219+
Histogram (2 states)
220+
500000:>0:EAX=1; 1:EAX=0; x=1; y=1;
221+
500000:>0:EAX=0; 1:EAX=1; x=1; y=1;
222+
No
223+
224+
Witnesses
225+
Positive: 0, Negative: 1000000
226+
Condition exists (0:EAX=1 /\ 1:EAX=1) is NOT validated
227+
Hash=7cdd62e8647b817c1615cf8eb9d2117b
228+
Observation OOO Never 0 1000000
229+
Time OOO 0.14
230+
```
231+
232+
无论运行多少次,Positive 应该都是 0。
233+
184234
## barrier
185235

186236
从功能上来讲,barrier 有四种:

0 commit comments

Comments
 (0)