Skip to content

Commit 541d54e

Browse files
committed
2017/Memory_Model: Refine assembly code with a more reasonable syntax
1 parent 069424e commit 541d54e

File tree

2 files changed

+41
-41
lines changed

2 files changed

+41
-41
lines changed

2017/Memory_Model.md

+41-41
Original file line numberDiff line numberDiff line change
@@ -58,19 +58,19 @@
5858
```
5959
- `寄存器分配(Register Allocation)`:下例将对g的2次读取优化成了1
6060
```c++
61-
a = g; //-----------> load r1, mem1
62-
b += a; // rewrite add r2, r2, r1
61+
a = g; //-----------> load %r1, 0($mem1)
62+
b += a; // rewrite add %r2, %r2, %r1
6363
a = g; //
64-
c += a; // add r3, r3, r1
64+
c += a; // add %r3, %r3, %r1
6565
```
6666
- `指令调度(Instruction Scheduling)`:下例重排的后一条指令不必等待前一条的结果减少了停顿*(这里的静态流水线调度缓解了`RAW Hazard`)*
6767
```asm
68-
load r0, mem0 // load r0, mem0
69-
mul r1, r1, r0 //-----------> load r2, mem2
70-
store mem1, r1 // rewrite mul r1, r1, r0
71-
load r2, mem2 // mul r3, r3, r2
72-
mul r3, r3, r2 // store mem1, r1
73-
store mem3, r3 // store mem3, r3
68+
load %r0, 0($mem0) // load %r0, 0($mem0)
69+
mul %r1, %r1, %r0 //-----------> load %r2, 0($mem2)
70+
store 0($mem1), %r1 // rewrite mul %r1, %r1, %r0
71+
load %r2, 0($mem2) // mul %r3, %r3, %r2
72+
mul %r3, %r3, %r2 // store 0($mem1), %r1
73+
store 0($mem3), %r3 // store 0($mem3), %r3
7474
```
7575

7676
## Memory Model
@@ -99,59 +99,59 @@
9999
{ data == 0, flag == 0 }
100100
// thread 0 thread 1
101101
//----------------------------------------
102-
store data, 1 loop:
103-
store flag, 1 load r0, flag
104-
beq r0, 0, loop
105-
load r1, data
102+
store 0($data), $1 loop:
103+
store 0($flag), $1 load %r0, 0($flag)
104+
beq %r0, $0, loop
105+
load %r1, 0($data)
106106
```
107107
可能r1 == 0。本例在ARM上能重现
108108
- Store-Load乱序
109109
```asm
110110
{ x == 0, y == 0 }
111111
// thread 0 thread 1
112112
//----------------------------------------
113-
store x, 1 store y, 1
114-
load r0, y load r1, x
113+
store 0($x), $1 store 0($y), $1
114+
load %r0, 0($y) load %r1, 0($x)
115115
```
116116
可能r0 == 0 && r1 == 0。本例在ARM/x86上能重现
117117
- `Dependent Loads`乱序$^{[5]}$
118-
```c++
118+
```asm
119119
{ A == 1, B == 2, C == 3, P == &A, Q == &C }
120120
// thread 0 thread 1
121121
//--------------------------------------
122-
B = 4;
123-
BARRIER;
124-
P = &B;
125-
Q = P;
126-
D = *Q;
122+
store 0($B), $4
123+
BARRIER
124+
store 0($P), $B
125+
load %r0, 0($P)
126+
load %r1 0(%r0)
127127
```
128-
可能Q == &B && D == 2。本例在DEC Alpha上能重现
128+
可能r0 == &B && r1 == 2。本例在DEC Alpha上能重现
129129
- `Non-Causality`/`Non-Transitivity`$^{[3]}$
130130
```asm
131131
{ flag0 == 0, flag1 == 0 }
132-
// thread 0 thread 1 thread 2
133-
//-------------------------------------------------------
134-
store flag0, 1
135-
loop:
136-
load r0, flag0
137-
beq r0, 0, loop
138-
BARRIER
139-
store flag1, 1
140-
loop:
141-
load r1, flag1
142-
beq r1, 0, loop
143-
BARRIER
144-
load r2, flag0
132+
// thread 0 thread 1 thread 2
133+
//-----------------------------------------------------------------
134+
store 0($flag0), $1
135+
loop:
136+
load %r0, 0($flag0)
137+
beq %r0, $0, loop
138+
BARRIER
139+
store 0($flag1), $1
140+
loop:
141+
load %r1, 0($flag1)
142+
beq %r1, $0, loop
143+
BARRIER
144+
load %r2, 0($flag0)
145145
```
146146
可能r2 == 0。本例在不支持Causality的系统中能重现
147147
- `IRIW(Independent Read Independent Write)`$^{[3]}$
148148
```asm
149-
// thread 0 thread 1 thread 2 thread 3
150-
//-------------------------------------------------------------------------
151-
store data1, 1 store data2, 1
152-
load r1, data1 load r3, data2
153-
BARRIER BARRIER
154-
load r2, data2 load r4, data1
149+
// thread 0 thread 1 thread 2 thread 3
150+
//---------------------------------------------------------------------------------
151+
store 0($data1), 1 store 0($data2), 1
152+
load %r1, 0($data1) load %r3, 0($data2)
153+
BARRIER BARRIER
154+
load %r2, 0($data2) load %r4, 0($data1)
155155
```
156156
在r1 == 1 && r3 == 1的前提下,可能r2 == 0 && r4 == 0,即thread 2和3看见了不同的写顺序。本例在不支持`Atomic Store`的系统中能重现,比如某些NUMA和带SMT的UMA系统
157157
- #### Memory Model由哪些属性构成

2017/Memory_Model.pdf

346 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)