@@ -126,7 +126,7 @@ mesi 协议解决了多核环境下,内存多层级带来的问题。使得 ca
126126
127127## CPU 导致乱序
128128
129- 使用 litmus 进行形式化验证 :
129+ 使用 litmus 进行验证 :
130130
131131```
132132cat 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