AutoMO: Automatic Inference of Memory Order Parameters for...
Transcript of AutoMO: Automatic Inference of Memory Order Parameters for...
![Page 1: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/1.jpg)
AutoMO: Automatic Inference of
Memory Order Parameters for C/C++11
Peizhao Ou and Brian Demsky
University of California, Irvine
Oct 28, 2015
![Page 2: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/2.jpg)
Programming with Multi-cores
SharedMemory
Building Blocks
ConcurrentData
Structureswith Atomics
![Page 3: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/3.jpg)
C/C++11 Memory Model
memory order parameters
int x, y;// Thread 1 // Thread 2x = 1; r1 = y;y = 1; r2 = x;
Pseudo code
atomic_int x, y;// Thread 1 // Thread 2x.store(1, relaxed); r1 = y.load(acquire);y.store(1, release); r2 = x.load(relaxed);
C/C++11
![Page 4: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/4.jpg)
C/C++11 Memory Model
memory order parameters
atomic_int x, y;// Thread 1 // Thread 2x.store(1, relaxed); r1 = y.load(acquire);y.store(1, release); r2 = x.load(relaxed);
C/C++11
int x, y;// Thread 1 // Thread 2x = 1; r1 = y;y = 1; r2 = x;
Pseudo code
● Language-level atomics portabi
lity
● Memory order parameters complicate
d
![Page 5: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/5.jpg)
Memory Order Parameters
acq_rel
acquire
relaxed
release
seq_cst
consume
SpeedParameterweakness
stronger
weaker
slower
faster
![Page 6: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/6.jpg)
Choosing Memory Order Parameters
atomic_int x, y;// Thread 1 // Thread 2x.store(1, ? ); r1 = y.load( ? );y.store(1, ? ); r2 = x.load( ? );
![Page 7: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/7.jpg)
Choosing Memory Order Parameters
atomic_int x, y;// Thread 1 // Thread 2x.store(1, seq_cst); r1 = y.load(seq_cst);y.store(1, seq_cst); r2 = x.load(seq_cst);
Overly strong parameters hurt performance
![Page 8: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/8.jpg)
Choosing Memory Order Parameters
atomic_int x, y;// Thread 1 // Thread 2x.store(1, relaxed); r1 = y.load(relaxed);y.store(1, relaxed); r2 = x.load(relaxed);
Too weak parametersbugs
Wrong
![Page 9: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/9.jpg)
Choosing Memory Order Parameters
atomic_int x, y;// Thread 1 // Thread 2x.store(1, relaxed); r1 = y.load(acquire);y.store(1, release); r2 = x.load(relaxed);
While ensuring correctness seek for weaker parameters
Difficult
![Page 10: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/10.jpg)
What We Propose
A tool that AUTOMATES the
process of confguring memory
order parameters
![Page 11: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/11.jpg)
A Motivational Scenario
Some Memory ModelPortC/C++11 Memory Model
A fairly exhaustivetest suite
C/C++11Implementations
ExistingImplementations
What parameters??
Same test suite has correct behaviors
![Page 12: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/12.jpg)
Our Solution
Originally allowedbehaviors
Allowed behaviorsof AutoMO
implementation
Criterion: Only allow SC
behaviors
Strong enoughparameters
All possible behaviors
![Page 13: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/13.jpg)
It Boils down to
Infer memory order parameters
Guarantee SC for provided test cases
![Page 14: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/14.jpg)
A Search Problem
atomic_int x, y;// Thread 1 // Thread 2x.store(1, ? ); r1 = y.load( ? );y.store(1, ? ); r2 = x.load( ? );
Fill out these blankswith parameters
![Page 15: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/15.jpg)
A Search Problem
atomic_int x, y;// Thread 1 // Thread 2x.store(1, relaxed); r1 = y.load(relaxed);y.store(1, relaxed); r2 = x.load(relaxed);
Start with the weakestparameters (relaxed)
![Page 16: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/16.jpg)
A Search Problem
atomic_int x, y;// Thread 1 // Thread 2x.store(1, relaxed); r1 = y.load(relaxed);y.store(1, relaxed); r2 = x.load(relaxed);
Such parameterassignment allows non-SC
behaviors
![Page 17: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/17.jpg)
A Search Problem
atomic_int x, y;// Thread 1 // Thread 2x.store(1, relaxed); r1 = y.load(acquire);y.store(1, release); r2 = x.load(relaxed);
Try some strongerparameter assignment
![Page 18: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/18.jpg)
A Search Problem
atomic_int x, y;// Thread 1 // Thread 2x.store(1, relaxed); r1 = y.load(acquire);y.store(1, release); r2 = x.load(relaxed);
This parameterassignment only allows
SC behaviors: terminate
![Page 19: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/19.jpg)
A Search Problem
atomic_int x, y;// Thread 1 // Thread 2x.store(1, relaxed); r1 = y.load(acquire);y.store(1, release); r2 = x.load(relaxed);
Question 1:
How to detect SCviolations
Question 2:
How to repair SCviolations
![Page 20: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/20.jpg)
Overview of Approach
CDSChecker SC Analysis Input:test case
Parameterassignment
run eachtrace
initialize
AutoMO
non-SCtrace
Trace Reordering
Parameter Synthesis
reorderedtrace
strongerparameters
![Page 21: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/21.jpg)
Overview of Approach
AutoMO
SC Analysis
non-SCtrace
Trace Reordering
Parameter Synthesis
reorderedtrace
CDSCheckerInput:test case
Parameterassignment
run eachtrace
initialize
strongerparameters
![Page 22: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/22.jpg)
Overview of Approach
CDSChecker SC Analysis Input:test case
run eachtrace
non-SCtrace
initialize Trace Reordering
AutoMO
Parameterassignment
Parameter Synthesis
reorderedtrace
strongerparameters
![Page 23: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/23.jpg)
SC Analysis
SC
Not SC
A C/C++ trace
![Page 24: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/24.jpg)
Trace Reordering
Trace Reordering
A reordered trace
A non-SC trace
● Rearrange non-SC trace to mostly SC
➢ expose real SC violations
● Ensure the involved SC violations arerepairable
➢ preserve hb & SC relation
![Page 25: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/25.jpg)
Parameter Synthesis – Naïve Approach
A reorderednon-SC trace
Parameter Synthesis
Stronger parameters
Impracticalcomplexity
Try all strongerparameter
assignments
![Page 26: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/26.jpg)
Parameter Synthesis – Our Approach
Parameter Synthesis
Heuristic rules to repair SCviolations
Stronger parameters
Two universalnon-SCpatterns
A reorderednon-SC trace
![Page 27: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/27.jpg)
Two Universal Non-SC Patterns
isc
A:.v.store(0)
B: v.store(1)
C: v.load()
Stale Read
isc
B: v.store(1)
A: v.load()
Future Read
isc
rf
rf
![Page 28: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/28.jpg)
Inference Rule Example
B: v.store(1)
A: v.load()
Future Read
isc
rf
B: v.store(1)
A: v.load()
Inference Rule
hb/sc
rf
![Page 29: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/29.jpg)
Inference Rule Example
B: v.store(1)
A: v.load()
Inference Rule
hb/sc
rf● happens-before:➢ a chain of reads-from &
sequenced-before:establish synchronization
![Page 30: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/30.jpg)
Inference Rule Example
B: v.store(1)
A: v.load()
Inference Rule
hb/sc
rf● Impose SC:
➢ both seq_cst
![Page 31: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/31.jpg)
Termination of Inference Process
➢ Able to apply some rule for each violation
➢ Each rule application strengthens at leastsome parameter
➢ Finite number of parameter assignments
![Page 32: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/32.jpg)
Benchmarks
11 real-world data structures
➢ Barrier
➢ Dekker's algorithm
➢ Three concurrent queues: SPSC, M&S queue &MPMC
➢ Three locks: Linux RW lock, Seqlock & MCS lock
➢ Treiber stack
➢ Chase-Lev deque
➢ Concurrent hashtable
![Page 33: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/33.jpg)
Inference Algorithm Performance
Benchmarks Inference Time (sec)
Chase-Lev deque 536.322
Dekker 396.756
Linux RW lock 24.982
M&S queue 4.808
MCS lock 4.056
MPMC 0.143
Seqlock 0.095
Barrier 0.019
Treiber's stack 0.018
Concurrent hashtable 0.016
SPSC 0.015
within 9 min
8/11 within5 sec
On Intel Core i7 3770
![Page 34: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/34.jpg)
As Good As Manual Version
● Dekker
● Linux RW lock
● Treiber's stack
● Seqlock
![Page 35: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/35.jpg)
Better Than Manual Version
● MCS lock
● Barrier
![Page 36: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/36.jpg)
Expose Bugs of Manual Version
● M&S queue implementation
➢ AutoMO infers two stronger parameters
➢ Both are necessarily stronger (fixed twobugs)
![Page 37: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/37.jpg)
Close to Manual Version
● Chase-Lev deque
➢ Only take 9 min to finish
➢ Found an incorrect claim
![Page 38: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/38.jpg)
Overly Strong Parameters
● MPMC & Concurrent hashtable
➢ Take advantage of SC-violations
![Page 39: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/39.jpg)
Related Work
● Test behaviors for relaxed language models➢ C/C++: CPPMEM, Nitpick, CDSChecker, Relacy...
➢ Axiomatic model: MemSAT
● Detect data race (lock-based)➢ Glodilocks, RacerX, FastTrack, Eraser...
● Automatic parallelization (sequential parallel)● Check SC
➢ Complexity: At least NP-Complete
➢ Hardware M.M.: TRF, Herding cat, CheckFence, DFence...
● Automatically infer SC➢ Dfence (infer fences for hardware memory model)
![Page 40: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/40.jpg)
Conclusion
●AutoMO
➢ Automatically infers memory order parametersfor C/C++11 programs
➢ Available on our site(http://plrg.eecs.uci.edu/automo/)
![Page 41: AutoMO: Automatic Inference of Memory Order Parameters for C/C++…plrg.eecs.uci.edu/~peizhaoo/profile/presentations/oopsla15_automo... · Memory Order Parameters for C/C++11 Peizhao](https://reader036.fdocuments.in/reader036/viewer/2022080717/5f7822b21cb18912c607274e/html5/thumbnails/41.jpg)
Questions