Optimizing the Automated Programming Stack James Bornholt - - PowerPoint PPT Presentation

optimizing the automated programming stack
SMART_READER_LITE
LIVE PREVIEW

Optimizing the Automated Programming Stack James Bornholt - - PowerPoint PPT Presentation

Optimizing the Automated Programming Stack James Bornholt University of Washington Software is everywhere Bugs are everywhere Bugs are everywhere Automated programming tools Program Verifier + test case Specification Language


slide-1
SLIDE 1

Optimizing the
 Automated Programming Stack

James Bornholt

University of Washington

slide-2
SLIDE 2

Software is everywhere

slide-3
SLIDE 3

Bugs are everywhere

slide-4
SLIDE 4

Bugs are everywhere

slide-5
SLIDE 5

Automated programming tools

Verifier

Program Specification

✅ ❌ + test case

Language

slide-6
SLIDE 6

Automated programming tools

Verifier

Program Specification

✅ ❌ + test case

Synthesizer

Specification

✅ ❌

+ program

Language Language

slide-7
SLIDE 7

Automated programming successes

Verified

  • perating systems

[Nelson et al, SOSP’17]

Synthesized network configs

[McClurg et al, PLDI’15]

Verified SQL optimizers

[Chu et al, VLDB’18]

Synthesized crypto primitives

[Erbsen et al, Oakland’19]

Synthesized biology experiments

[Köksal et al, POPL’13]

Synthesized memory models

[Bornholt et al, PLDI’17]

Synthesized educational models

[Butler et al, VMCAI’18]

slide-8
SLIDE 8

Challenges in automated programming

Intractability Specification

Most problems in automated programming are intractable (many undecidable). Automated programming requires
 a specification, which is often
 difficult to construct and audit.

slide-9
SLIDE 9

Challenges in automated programming

Intractability Specification

Most problems in automated programming are intractable (many undecidable). Automated programming requires
 a specification, which is often
 difficult to construct and audit.

Domain specialization

Specialization reduces the size

  • f the search space, eliminating

irrelevant programs/behaviors. Specialization allows for concise
 and expressive specifications
 that capture programmer intent.

slide-10
SLIDE 10

Domain specialization

Automated programming stack

Domain-specific tools

slide-11
SLIDE 11

Domain specialization

Automated programming stack

SAT/SMT solving improvements in scale and expressiveness

Domain-specific tools

slide-12
SLIDE 12

Domain specialization

Automated programming stack

Symbolic evaluation algorithms to translate programs to SAT/SMT SAT/SMT solving improvements in scale and expressiveness

Domain-specific tools

slide-13
SLIDE 13

Domain specialization

Automated programming stack

Solver-aided languages front-end abstractions for verification/synthesis Symbolic evaluation algorithms to translate programs to SAT/SMT SAT/SMT solving improvements in scale and expressiveness

Domain-specific tools

slide-14
SLIDE 14

Automated programming stack

Solver-aided languages front-end abstractions for verification/synthesis Symbolic evaluation algorithms to translate programs to SAT/SMT SAT/SMT solving improvements in scale and expressiveness

Domain-specific tools

slide-15
SLIDE 15

New abstractions and tools can empower programmers to build specialized automated programming tools that improve software reliability.

slide-16
SLIDE 16

New abstractions and tools can empower programmers to build specialized automated programming tools that improve software reliability.

MemSynth [PLDI’17]: an automated tool for synthesizing memory consistency models Ferrite [ASPLOS’16]: a tool for synthesizing crash-safe file system code

slide-17
SLIDE 17

New abstractions and tools can empower programmers to build specialized automated programming tools that improve software reliability.

MemSynth [PLDI’17]: an automated tool for synthesizing memory consistency models Metasketches [POPL’16]: a strategy abstrac`on for synthesis problems SymPro [OOPSLA’18]: a technique for systema`cally building scalable tools Ferrite [ASPLOS’16]: a tool for synthesizing crash-safe file system code

slide-18
SLIDE 18

New abstractions and tools can empower programmers to build specialized automated programming tools that improve software reliability.

MemSynth [PLDI’17]: an automated tool for synthesizing memory consistency models Metasketches [POPL’16]: a strategy abstrac`on for synthesis problems SymPro [OOPSLA’18]: a technique for systema`cally building scalable tools Ferrite [ASPLOS’16]: a tool for synthesizing crash-safe file system code

slide-19
SLIDE 19

Automated tools are worth building

The case of memory models [PLDI’17]

Building them can be made systematic

Symbolic profiling [OOPSLA’18]

The future is more automation

Automating the automated programming stack

slide-20
SLIDE 20

Automated tools are worth building

The case of memory models [PLDI’17]

Building them can be made systematic

Symbolic profiling [OOPSLA’18]

The future is more automation

Automating the automated programming stack

slide-21
SLIDE 21

Memory models define the memory

  • rdering behavior of multiprocessors

X = 1 Y = 1 if Y == 0: print “hello” if X == 0: print “goodbye” Thread 1 Thread 2

1 2 3 4

All variables initialized to 0

slide-22
SLIDE 22

Memory models define the memory

  • rdering behavior of multiprocessors

X = 1 Y = 1 if Y == 0: print “hello” if X == 0: print “goodbye” Thread 1 Thread 2

1 2 3 4

Can this print… hello?

All variables initialized to 0

slide-23
SLIDE 23

Memory models define the memory

  • rdering behavior of multiprocessors

X = 1 Y = 1 if Y == 0: print “hello” if X == 0: print “goodbye” Thread 1 Thread 2

1 2 3 4

Can this print… hello?

3 4 1 2

All variables initialized to 0

slide-24
SLIDE 24

Memory models define the memory

  • rdering behavior of multiprocessors

X = 1 Y = 1 if Y == 0: print “hello” if X == 0: print “goodbye” Thread 1 Thread 2

1 2 3 4

Can this print… hello? goodbye?

3 4 1 2

All variables initialized to 0

slide-25
SLIDE 25

Memory models define the memory

  • rdering behavior of multiprocessors

X = 1 Y = 1 if Y == 0: print “hello” if X == 0: print “goodbye” Thread 1 Thread 2

1 2 3 4

Can this print… hello? goodbye?

3 4 1 2 1 2 3 4

All variables initialized to 0

slide-26
SLIDE 26

Memory models define the memory

  • rdering behavior of multiprocessors

X = 1 Y = 1 if Y == 0: print “hello” if X == 0: print “goodbye” Thread 1 Thread 2

1 2 3 4

Can this print… hello? goodbye? nothing?

3 4 1 2 1 2 3 4

All variables initialized to 0

slide-27
SLIDE 27

Memory models define the memory

  • rdering behavior of multiprocessors

X = 1 Y = 1 if Y == 0: print “hello” if X == 0: print “goodbye” Thread 1 Thread 2

1 2 3 4

Can this print… hello? goodbye? nothing?

3 4 1 2 1 2 3 4 3 4 1 2

All variables initialized to 0

slide-28
SLIDE 28

Memory models define the memory

  • rdering behavior of multiprocessors

X = 1 Y = 1 if Y == 0: print “hello” if X == 0: print “goodbye” Thread 1 Thread 2

1 2 3 4

Can this print… hello? goodbye? nothing? both?

3 4 1 2 1 2 3 4 3 4 1 2

All variables initialized to 0

slide-29
SLIDE 29

Memory models define the memory

  • rdering behavior of multiprocessors

X = 1 Y = 1 if Y == 0: print “hello” if X == 0: print “goodbye” Thread 1 Thread 2

1 2 3 4

Can this print… hello? goodbye? nothing? both?

3 4 1 2 1 2 3 4 3 4 1 2

No! (sequential consistency)

All variables initialized to 0

slide-30
SLIDE 30

Memory models define the memory

  • rdering behavior of multiprocessors

X = 1 Y = 1 if Y == 0: print “hello” if X == 0: print “goodbye” Thread 1 Thread 2

1 2 3 4

Can this print… hello? goodbye? nothing? both?

3 4 1 2 1 2 3 4 3 4 1 2

No! (sequential consistency) Yeah! We wanna go fast!

All variables initialized to 0

slide-31
SLIDE 31

Memory models define the memory

  • rdering behavior of multiprocessors

…correctness of my compiler…

Compiler writers 

…rules to verify against…

Verifica`on tools ✅

…possible low- level behaviors…

Kernel/library developers

slide-32
SLIDE 32

Memory models define the memory

  • rdering behavior of multiprocessors

…correctness of my compiler…

Compiler writers 

…rules to verify against…

Verifica`on tools ✅

…possible low- level behaviors…

Kernel/library developers

Litmus tests
 and prose

slide-33
SLIDE 33

Memory models define the memory

  • rdering behavior of multiprocessors

…correctness of my compiler…

Compiler writers 

…rules to verify against…

Verifica`on tools ✅

…possible low- level behaviors…

Kernel/library developers

Litmus tests
 and prose

∀ ∃ ∈ ∧ ∨ ∩ ∪ ⊂ ⋈ ⇒

Formal
 specifica`ons

slide-34
SLIDE 34

Memory models define the memory

  • rdering behavior of multiprocessors

…correctness of my compiler…

Compiler writers 

…rules to verify against…

Verifica`on tools ✅

…possible low- level behaviors…

Kernel/library developers

Litmus tests
 and prose

∀ ∃ ∈ ∧ ∨ ∩ ∪ ⊂ ⋈ ⇒

Formal
 specifica`ons

x86 [Sewell et al, CACM’10] PowerPC [Alglave et al, CAV’10, etc] ARM [Flur et al, POPL’16]

slide-35
SLIDE 35

MemSynth: automated programming for memory consistency models

Litmus tests
 and prose

∀ ∃ ∈ ∧ ∨ ∩ ∪ ⊂ ⋈ ⇒

Formal
 specifica`ons

slide-36
SLIDE 36

MemSynth: automated programming for memory consistency models

Litmus tests
 and prose

∀ ∃ ∈ ∧ ∨ ∩ ∪ ⊂ ⋈ ⇒

Formal
 specifica`ons

Synthesize specifica`ons from litmus tests

slide-37
SLIDE 37

MemSynth: automated programming for memory consistency models

Litmus tests
 and prose

∀ ∃ ∈ ∧ ∨ ∩ ∪ ⊂ ⋈ ⇒

Formal
 specifica`ons

Synthesize specifica`ons from litmus tests Detect ambigui`es in synthesized models

slide-38
SLIDE 38

MemSynth: automated programming for memory consistency models

Litmus tests
 and prose

∀ ∃ ∈ ∧ ∨ ∩ ∪ ⊂ ⋈ ⇒

Formal
 specifica`ons

Synthesize specifica`ons from litmus tests Detect ambigui`es in synthesized models x86: 2 seconds PowerPC: 12 seconds x86: 4 ambigui`es PowerPC: 9 ambigui`es

slide-39
SLIDE 39

MemSynth: automated programming for memory consistency models

Litmus tests
 and prose

∀ ∃ ∈ ∧ ∨ ∩ ∪ ⊂ ⋈ ⇒

Formal
 specifica`ons

Litmus tests
 as rela`ons Memory models
 as constraints Synthesis via sketches

1 2 3

slide-40
SLIDE 40

Litmus tests as relations

X = 1 Y = 1 if Y == 0: print “hello” if X == 0: print “goodbye” Thread 1 Thread 2

1 2 3 4

All variables initialized to 0

slide-41
SLIDE 41

Litmus tests as relations

X = 1 Y = 1 r0 = Y r1 = X Thread 1 Thread 2

1 2 3 4

All variables initialized to 0

slide-42
SLIDE 42

Litmus tests as relations

X = 1 Y = 1 r0 = Y r1 = X Thread 1 Thread 2

1 2 3 4

All variables initialized to 0

Encode programs and behaviors as relations in relational logic
 (like Alloy)

slide-43
SLIDE 43

Litmus tests as relations

X = 1 Y = 1 r0 = Y r1 = X Thread 1 Thread 2

1 2 3 4

All variables initialized to 0

Encode programs and behaviors as relations in relational logic
 (like Alloy) Program relations extracted from program text: po = {( , ), ( , )}

1 2 3 4

Program order: (a,b) ∈ po if b is aoer a on the same thread

slide-44
SLIDE 44

Litmus tests as relations

X = 1 Y = 1 r0 = Y r1 = X Thread 1 Thread 2

1 2 3 4

All variables initialized to 0

Encode programs and behaviors as relations in relational logic
 (like Alloy) Program relations extracted from program text: po = {( , ), ( , )}

1 2 3 4

Program order: (a,b) ∈ po if b is aoer a on the same thread

Execution relations describe dynamic behavior: rf = {( , ), ( , )}

2 3 4 1

Reads-from: (r,w) ∈ rf if r reads the value wripen by w

slide-45
SLIDE 45

Litmus tests as relations

X = 1 Y = 1 r0 = Y r1 = X Thread 1 Thread 2

1 2 3 4

All variables initialized to 0

Encode programs and behaviors as relations in relational logic
 (like Alloy) Program relations extracted from program text: po = {( , ), ( , )}

1 2 3 4

Program order: (a,b) ∈ po if b is aoer a on the same thread

Execution relations describe dynamic behavior: rf = {( , ), ( , )}

2 3 4 1

Reads-from: (r,w) ∈ rf if r reads the value wripen by w

slide-46
SLIDE 46

Memory models as relational constraints

Program relations extracted from program text: po = {( , ), ( , )}

1 2 3 4

Program order

Execution relations describe dynamic behavior: rf = {( , ), ( , )}

2 3 4 1

Reads-from

A memory model constrains the allowed executions of a program Written as a predicate in relational logic

slide-47
SLIDE 47

Memory models as relational constraints

Program relations extracted from program text: po = {( , ), ( , )}

1 2 3 4

Program order

Execution relations describe dynamic behavior: rf = {( , ), ( , )}

2 3 4 1

Reads-from

A memory model constrains the allowed executions of a program Written as a predicate in relational logic M(T, E) ≜

slide-48
SLIDE 48

Memory models as relational constraints

Program relations extracted from program text: po = {( , ), ( , )}

1 2 3 4

Program order

Execution relations describe dynamic behavior: rf = {( , ), ( , )}

2 3 4 1

Reads-from

A memory model constrains the allowed executions of a program Written as a predicate in relational logic M(T, E) ≜

(&& (&& (&& (in rf (& (-> Writes Reads) (join loc (~ loc)) (join data (~ data)))) (no (- (join rf (~ rf)) iden)) (all ((r4 (- Reads (join Writes rf)))) (= (join r4 data) Zero))) (&& (in ws (& (-> Writes Writes) (join loc (~ loc)))) (no (& iden ws)) (in (join ws ws) ws) (all ((r5 Writes)) (all ((r6 (- (& Writes (join loc (join r5 loc))) r5))) (or (in (-> r5 r6) ws) (in (-> r6 r5) ws)))) (in ws (join loc (~ loc))))) (no (& (^ (+ (+ rf ws (+ (join (~ rf) ws) (& (-> (- Reads (join Writes rf)) Writes) (join loc (~ loc))))) (& po (join loc (~ loc))))) iden)) (all ((r7 Writes)) (=> (&& (in r7 (- (join univ ws) (join ws univ))) (some (join (join r7 loc) finalValue))) (= (join r7 data) (join (join r7 loc) finalValue)))) (no (& (^ (+ (& po dp) ws (+ (join (~ rf) ws) (& (-> (- Reads (join Writes rf)) Writes) (join loc (~ loc)))) (-> none none) (+ (^ (+ (+ (join (:> po Syncs) po) (join (join (:> po Syncs) po) rf)) (join rf (join (:> po Syncs) po)))) (^ (+ (+ (& (join (:> po Lwsyncs) po) (+ (-> Writes Writes) (-> Reads MemoryEvent))) (:> (join rf (& (join (:> po Lwsyncs) po) (+ (-> Writes Writes) (-> Reads MemoryEvent)))) Writes)) (<: Reads (join (& (join (:> po Lwsyncs) po) (+ (-> Writes Writes) (-> Reads MemoryEvent))) rf))))))) iden))) (no (& (^ (+ po rf)) iden))

slide-49
SLIDE 49

Memory models as relational constraints

Program relations extracted from program text: po = {( , ), ( , )}

1 2 3 4

Program order

Execution relations describe dynamic behavior: rf = {( , ), ( , )}

2 3 4 1

Reads-from

A memory model constrains the allowed executions of a program Written as a predicate in relational logic M(T, E) ≜ (no (& (^ (+ po rf)) iden))

slide-50
SLIDE 50

Memory models as relational constraints

Program relations extracted from program text: po = {( , ), ( , )}

1 2 3 4

Program order

Execution relations describe dynamic behavior: rf = {( , ), ( , )}

2 3 4 1

Reads-from

A memory model constrains the allowed executions of a program Written as a predicate in relational logic M(T, E) ≜ (no (& (^ (+ po rf)) iden))

Constraining the possible values of rf… …by forbidding cycles involving rf ∪ po

slide-51
SLIDE 51

Memory models as relational constraints

Program relations extracted from program text: po = {( , ), ( , )}

1 2 3 4

Program order

Execution relations describe dynamic behavior: rf = {( , ), ( , )}

2 3 4 1

Reads-from

A memory model constrains the allowed executions of a program Written as a predicate in relational logic M(T, E) ≜ (no (& (^ (+ po rf)) iden))

Constraining the possible values of rf… …by forbidding cycles involving rf ∪ po A memory model allows a test T if there exists an execu`on E that sa`sfies the predicate

slide-52
SLIDE 52

(no (& (^ (+ po rf)) iden))

Synthesis from a memory model sketch

M(T, E) ≜

slide-53
SLIDE 53

(no (& (^ (+ po rf)) iden))

Synthesis from a memory model sketch

M(T, E) ≜ (no (& (^ (+ ?? ??)) iden))

Expression holes for a synthesizer to complete

slide-54
SLIDE 54

(no (& (^ (+ po rf)) iden))

Synthesis from a memory model sketch

M(T, E) ≜ (no (& (^ (+ ?? ??)) iden))

po rf po + rf po & rf po - rf … Expression holes for a synthesizer to complete

slide-55
SLIDE 55

(no (& (^ (+ po rf)) iden))

Synthesis from a memory model sketch

M(T, E) ≜ (no (& (^ (+ ?? ??)) iden))

po rf po + rf po & rf po - rf … Expression holes for a synthesizer to complete A sketch specifies things we know (e.g., want a happens- before ordering)…

slide-56
SLIDE 56

(no (& (^ (+ po rf)) iden))

Synthesis from a memory model sketch

M(T, E) ≜ (no (& (^ (+ ?? ??)) iden))

po rf po + rf po & rf po - rf … Expression holes for a synthesizer to complete A sketch specifies things we know (e.g., want a happens- before ordering)… …and defines the shape of the parts we don’t know

slide-57
SLIDE 57

Memory model frameworks

(no (& (^ (+ ws rf ppo grf)) iden))

[Alglave et al, CAV’10]

M(T, E) ≜

slide-58
SLIDE 58

Preserved program order: same-thread reorderings

Memory model frameworks

(no (& (^ (+ ws rf ppo grf)) iden))

[Alglave et al, CAV’10]

Global reads-from: inter-thread reorderings

M(T, E) ≜

slide-59
SLIDE 59

Preserved program order: same-thread reorderings

Memory model frameworks

(no (& (^ (+ ws rf ppo grf)) iden))

[Alglave et al, CAV’10]

Global reads-from: inter-thread reorderings

Sequential consistency Total store


  • rder (x86)

po rf po - (Wr→Rd) rf & SameThd M(T, E) ≜

slide-60
SLIDE 60

Preserved program order: same-thread reorderings

Memory model frameworks

(no (& (^ (+ ws rf ppo grf)) iden))

[Alglave et al, CAV’10]

Global reads-from: inter-thread reorderings

Sequential consistency Total store


  • rder (x86)

po rf po - (Wr→Rd) rf & SameThd M(T, E) ≜

?? ??

slide-61
SLIDE 61

Ocelot DSL for relational logic with holes

M(T, E) ≜ Ocelot embeds rela`onal logic in the RoseZe solver-aided language [Torlak & Bodik 2014]

Also in use for SQL query synthesis and protocol reasoning

http://ocelot.tools

(no (& (^ (+ ws rf ppo grf)) iden)) ?? ??

Expression holes for a synthesizer to complete

slide-62
SLIDE 62

The synthesis query

Allowed litmus tests Forbidden litmus tests

Synth

Completed memory model M Memory model sketch M ˆ

slide-63
SLIDE 63

The synthesis query

Synth x86

5 3

2 allowed tests

1 2 4 6 7 8 9 10

8 forbidden tests Total store order Memory model sketch M ˆ

slide-64
SLIDE 64

The synthesis query

Allowed litmus tests Forbidden litmus tests

Synth

Completed memory model M Memory model sketch M ˆ

slide-65
SLIDE 65

The synthesis query

Allowed litmus tests Forbidden litmus tests Memory model M Memory model sketch M ˆ

∃ M. ∀ T∈T+. M allows T

slide-66
SLIDE 66

The synthesis query

Allowed litmus tests Forbidden litmus tests Memory model M Memory model sketch M ˆ

∃ M. ∀ T∈T+. M allows T ∃ M. ∀ T∈T-. M forbids T

slide-67
SLIDE 67

The synthesis query

Allowed litmus tests Forbidden litmus tests Memory model M Memory model sketch M ˆ

∃ M. ∀ T∈T+. M allows T ∃ M. ∀ T∈T-. M forbids T

Standard exists-forall quan`fier papern for synthesis

slide-68
SLIDE 68

The synthesis query

Allowed litmus tests Forbidden litmus tests Memory model M Memory model sketch M ˆ

∃ M. ∀ T∈T+. M allows T ∃ M. ∀ T∈T-. M forbids T

M allows T: ∃ E. M(T, E)

Standard exists-forall quan`fier papern for synthesis

slide-69
SLIDE 69

The synthesis query

Allowed litmus tests Forbidden litmus tests Memory model M Memory model sketch M ˆ

∃ M. ∀ T∈T+. ∃ E. M(T,E) ∃ M. ∀ T∈T-. ∀ E. ¬M(T,E)

M allows T: ∃ E. M(T, E)

Standard exists-forall quan`fier papern for synthesis

slide-70
SLIDE 70

The synthesis query

Allowed litmus tests Forbidden litmus tests Memory model M Memory model sketch M ˆ

∃ M. ∀ T∈T+. ∃ E. M(T,E) ∃ M. ∀ T∈T-. ∀ E. ¬M(T,E)

M allows T: ∃ E. M(T, E)

Higher-order quan`fica`on

  • ver rela`ons! 😲

Standard exists-forall quan`fier papern for synthesis

slide-71
SLIDE 71

The synthesis query

Allowed litmus tests Forbidden litmus tests Memory model M Memory model sketch M ˆ

∃ M. ∀ T∈T+. ∃ E. M(T,E) ∃ M. ∀ T∈T-. ∀ E. ¬M(T,E)

M allows T: ∃ E. M(T, E)

slide-72
SLIDE 72

The synthesis query

Allowed litmus tests Forbidden litmus tests Memory model M Memory model sketch M ˆ

∃ M. ∀ T∈T+. ∃ E. M(T,E) ∃ M. ∀ T∈T-. ∀ E. ¬M(T,E)

M allows T: ∃ E. M(T, E)

Handled by a quan`fied boolean formula (QBF) solver

slide-73
SLIDE 73

The synthesis query

Allowed litmus tests Forbidden litmus tests Memory model M Memory model sketch M ˆ

∃ M. ∀ T∈T+. ∃ E. M(T,E) ∃ M. ∀ T∈T-. ∀ E. ¬M(T,E)

M allows T: ∃ E. M(T, E)

Handled by a quan`fied boolean formula (QBF) solver Handled by incremental synthesis engine

slide-74
SLIDE 74

Incremental synthesis

Allowed litmus tests Forbidden litmus tests

Synth

T T T T T T T T T T T T T T T T T1 T2

slide-75
SLIDE 75

T T T T T

Incremental synthesis

Allowed litmus tests Forbidden litmus tests

Synth

T T T T T T T T T T T T T T T T T1 T2

slide-76
SLIDE 76

T T T T T

Incremental synthesis

Allowed litmus tests Forbidden litmus tests

Synth

T T T T T T T T T T T T T T T T T1 T2

Handled by a quan`fied boolean formula (QBF) solver

slide-77
SLIDE 77

T T T T T

Incremental synthesis

Allowed litmus tests Forbidden litmus tests

Synth

T T T T T T T T T T T T T T T T T1 T2

M’ Handled by a quan`fied boolean formula (QBF) solver

slide-78
SLIDE 78

T T T T T

Incremental synthesis

Allowed litmus tests Forbidden litmus tests

Synth

T T T T T T T T T T T T T T T T T1 T2

M’

T

Handled by a quan`fied boolean formula (QBF) solver

slide-79
SLIDE 79

Incremental synthesis

Allowed litmus tests Forbidden litmus tests

Synth

T T T T T T T T T T T T T T T T1 T2

M’

T

Handled by a quan`fied boolean formula (QBF) solver

slide-80
SLIDE 80

Incremental synthesis

Allowed litmus tests Forbidden litmus tests Completed memory model M

Synth

T T T T T T T T T T T T T T T T1 T2

M’

T

Handled by a quan`fied boolean formula (QBF) solver

slide-81
SLIDE 81

Incremental synthesis

Allowed litmus tests Forbidden litmus tests Completed memory model M

Synth

T T T T T T T T T T T T T T T T1 T2

M’

T

Empirically, need very few itera`ons to converge Handled by a quan`fied boolean formula (QBF) solver

slide-82
SLIDE 82

Disambiguating synthesized models

Ambig

Key idea: aoer synthesis, is there a different memory model that also explains the input tests?

slide-83
SLIDE 83

Disambiguating synthesized models

Allowed litmus tests Forbidden litmus tests

Ambig

Key idea: aoer synthesis, is there a different memory model that also explains the input tests? Memory model sketch M ˆ

slide-84
SLIDE 84

Disambiguating synthesized models

Allowed litmus tests Forbidden litmus tests

Ambig

Completed memory model M Key idea: aoer synthesis, is there a different memory model that also explains the input tests? Memory model sketch M ˆ

slide-85
SLIDE 85

Disambiguating synthesized models

Allowed litmus tests Forbidden litmus tests

Ambig

Litmus test T Completed memory model M Completed memory model M2 Key idea: aoer synthesis, is there a different memory model that also explains the input tests? Memory model sketch M ˆ

slide-86
SLIDE 86

Disambiguating synthesized models

Allowed litmus tests Forbidden litmus tests

Ambig

Litmus test T Completed memory model M Completed memory model M2 Key idea: aoer synthesis, is there a different memory model that also explains the input tests? Difference between M and M2 is not just syntac`c: they disagree about test T Memory model sketch M ˆ

slide-87
SLIDE 87

Synthesizing existing memory models

x86 PowerPC

slide-88
SLIDE 88

Synthesizing existing memory models

x86 PowerPC 768 tests

[Alglave et al, CAV’10]

10 tests

slide-89
SLIDE 89

Synthesis

Synthesizing existing memory models

x86 PowerPC 768 tests

[Alglave et al, CAV’10]

10 tests ✓ 2 seconds ✓ 12 seconds

slide-90
SLIDE 90

Synthesis

Synthesizing existing memory models

x86 PowerPC 768 tests

[Alglave et al, CAV’10]

10 tests ✓ 2 seconds ✓ 12 seconds

Not equivalent to TSO!

slide-91
SLIDE 91

Synthesis

Synthesizing existing memory models

x86 PowerPC 768 tests

[Alglave et al, CAV’10]

10 tests ✓ 2 seconds ✓ 12 seconds

Not equivalent to published model! Not equivalent to TSO!

slide-92
SLIDE 92

Synthesis

Synthesizing existing memory models

x86 PowerPC 768 tests

[Alglave et al, CAV’10]

10 tests ✓ 2 seconds ✓ 12 seconds

Not equivalent to published model!

4 new tests 9 new tests Ambiguity

Not equivalent to TSO! mfence, xchg sync, lwsync

slide-93
SLIDE 93

MemSynth: automated programming for memory consistency models

Litmus tests
 and prose

∀ ∃ ∈ ∧ ∨ ∩ ∪ ⊂ ⋈ ⇒

Formal
 specifica`ons

Synthesize specifica`ons from litmus tests Detect ambigui`es in synthesized models x86: 2 seconds PowerPC: 12 seconds x86: 4 ambigui`es PowerPC: 9 ambigui`es

slide-94
SLIDE 94

Automated tools are worth building

The case of memory models [PLDI’17]

Building them can be made systematic

Symbolic profiling [OOPSLA’18]

The future is more automation

Automating the automated programming stack

slide-95
SLIDE 95

Automated tools are worth building

The case of memory models [PLDI’17]

Building them can be made systematic

Symbolic profiling [OOPSLA’18]

The future is more automation

Automating the automated programming stack

slide-96
SLIDE 96

Scaling a synthesis tool is hard work

12 seconds

slide-97
SLIDE 97

Scaling a synthesis tool is hard work

Time (secs) 3000 6000 9000 12000 January February March April May June

12 seconds

slide-98
SLIDE 98

Scaling a synthesis tool is hard work

Time (secs) 3000 6000 9000 12000 January February March April May June

12 seconds 3 hours

slide-99
SLIDE 99

Scaling a synthesis tool is hard work

Time (secs) 3000 6000 9000 12000 January February March April May June

12 seconds 3 hours Finding these op`miza`on

  • pportuni`es is the key to

good performance and new func`onality

slide-100
SLIDE 100

Symbolic profiling

Time (secs) 3000 6000 9000 12000 January February March April May June

12 seconds 3 hours

A symbolic profiler identifies optimization

  • pportunities in an

automated tool.

slide-101
SLIDE 101

Symbolic profiling

Time (secs) 3000 6000 9000 12000 January February March April May June

12 seconds 3 hours

A symbolic profiler identifies optimization

  • pportunities in an

automated tool.

What makes scaling an automated programming tool hard? How does symbolic profiling work? How effective is symbolic profiling?

slide-102
SLIDE 102

Symbolic evaluation executes all paths through a program

(filter even? ‘(3 6 8 2 ))

slide-103
SLIDE 103

Symbolic evaluation executes all paths through a program

(filter even? ‘(3 6 8 2 ))

‘()

slide-104
SLIDE 104

Symbolic evaluation executes all paths through a program

(filter even? ‘(3 6 8 2 ))

‘() ‘()

¬(even? 3)

slide-105
SLIDE 105

Symbolic evaluation executes all paths through a program

(filter even? ‘(3 6 8 2 ))

‘() ‘() ‘(6)

¬(even? 3) (even? 6)

slide-106
SLIDE 106

Symbolic evaluation executes all paths through a program

(filter even? ‘(3 6 8 2 ))

‘() ‘() ‘(6) ‘(6 8)

¬(even? 3) (even? 6) (even? 8)

slide-107
SLIDE 107

Symbolic evaluation executes all paths through a program

(filter even? ‘(3 6 8 2 ))

‘() ‘() ‘(6) ‘(6 8)

¬(even? 3) (even? 6)

‘(6 8 2)

(even? 8) (even? 2)

slide-108
SLIDE 108

Symbolic evaluation executes all paths through a program

(filter even? ‘(3 6 8 2 ))

‘() ‘() ‘(6) ‘(6 8)

¬(even? 3) (even? 6)

‘(6 8 2)

(even? 8) (even? 2)

Does this expression always return only even numbers?

slide-109
SLIDE 109

Values of list elements are unknown (e.g., verifying filter for all inputs)

Symbolic evaluation executes all paths through a program

(filter even? ‘(x0 x1 x2 x3))

‘() ‘() ‘(6) ‘(6 8)

¬(even? 3) (even? 6)

‘(6 8 2)

(even? 8) (even? 2)

Does this expression always return only even numbers?

slide-110
SLIDE 110

Values of list elements are unknown (e.g., verifying filter for all inputs)

Symbolic evaluation executes all paths through a program

(filter even? ‘(x0 x1 x2 x3))

‘() ‘() ‘(x1) ‘(x1 x2)

¬(even? x0) (even? x1)

‘(x0) ‘() ‘(x0) ‘(x0 x1) ‘(x2) ‘(x1) ‘(x0) ‘(x0 x2) ‘(x0 x ‘(x1 x2 x3) ‘(x1 x3)‘(x1 x2) ‘(x1) ‘(x2 x3) ‘(x0) ‘(x0 x3)‘(x0 x2) ‘(x0 x2 x3) ‘(x0 x

(even? x2) (even? x3)

Does this expression always return only even numbers?

slide-111
SLIDE 111

Values of list elements are unknown (e.g., verifying filter for all inputs)

Symbolic evaluation executes all paths through a program

(filter even? ‘(x0 x1 x2 x3))

‘() ‘() ‘(x1) ‘(x1 x2)

¬(even? x0) (even? x1)

‘(x0) ‘() ‘(x0) ‘(x0 x1) ‘(x2) ‘(x1) ‘(x0) ‘(x0 x2) ‘(x0 x ‘(x1 x2 x3) ‘(x1 x3)‘(x1 x2) ‘(x1) ‘(x2 x3) ‘(x0) ‘(x0 x3)‘(x0 x2) ‘(x0 x2 x3) ‘(x0 x

(even? x2) (even? x3)

Does this expression always return only even numbers?

(length )

slide-112
SLIDE 112

Values of list elements are unknown (e.g., verifying filter for all inputs)

Symbolic evaluation executes all paths through a program

(filter even? ‘(x0 x1 x2 x3))

‘() ‘() ‘(x1) ‘(x1 x2)

¬(even? x0) (even? x1)

‘(x0) ‘() ‘(x0) ‘(x0 x1) ‘(x2) ‘(x1) ‘(x0) ‘(x0 x2) ‘(x0 x ‘(x1 x2 x3) ‘(x1 x3)‘(x1 x2) ‘(x1) ‘(x2 x3) ‘(x0) ‘(x0 x3)‘(x0 x2) ‘(x0 x2 x3) ‘(x0 x

(even? x2) (even? x3)

Does this expression always return only even numbers?

(length )

2 2 3 1 2 2 3 2 1 2

slide-113
SLIDE 113

Symbolic evaluation techniques

Symbolic execution Bounded model checking

Always fork into independent paths (more paths, but more concrete) Merge aoer every fork (fewer paths, but less concrete)

slide-114
SLIDE 114

Symbolic evaluation techniques

Symbolic execution Bounded model checking

Always fork into independent paths (more paths, but more concrete) Merge aoer every fork (fewer paths, but less concrete) Rosepe [Torlak & Bodik 2014] Jalangi [Sen et al 2014] Crucible [Galois, Inc.]

slide-115
SLIDE 115

Symbolic evaluation techniques

Symbolic execution Bounded model checking

Always fork into independent paths (more paths, but more concrete) Merge aoer every fork (fewer paths, but less concrete) Rosepe [Torlak & Bodik 2014] Jalangi [Sen et al 2014] Crucible [Galois, Inc.] Controlling the trade-off between these strategies is key to good scalability

slide-116
SLIDE 116

Two data structures to summarize symbolic evaluation

‘() ‘() ‘(x0) ‘() ‘(x1) ‘(x0) ‘(x0 x1)

¬(even? x0) (even? x0) (even? x1) ¬(even? x1) (even? x1) ¬(even? x1)

(even? x0) ∧ ¬ ∧ ∧ ∧ ¬ (even? x1)

Symbolic evalua\on graph Reflects the evaluator’s strategy
 for all-paths execu`on of the program Symbolic heap Shape of all symbolic values
 created by the program

slide-117
SLIDE 117

Two data structures to summarize symbolic evaluation

‘() ‘() ‘(x0) ‘() ‘(x1) ‘(x0) ‘(x0 x1)

¬(even? x0) (even? x0) (even? x1) ¬(even? x1) (even? x1) ¬(even? x1)

(even? x0) ∧ ¬ ∧ ∧ ∧ ¬ (even? x1)

Symbolic evalua\on graph Reflects the evaluator’s strategy
 for all-paths execu`on of the program Symbolic heap Shape of all symbolic values
 created by the program

Any symbolic evalua\on technique can be summarized by these two data structures

slide-118
SLIDE 118

Analyzing symbolic data structures

slide-119
SLIDE 119

For each procedure, measure metrics that summarize the evolu`on of the symbolic evalua`on graph and symbolic heap Summarize metrics as a score to rank procedures in the program

Analyzing symbolic data structures

slide-120
SLIDE 120

For each procedure, measure metrics that summarize the evolu`on of the symbolic evalua`on graph and symbolic heap Summarize metrics as a score to rank procedures in the program

Analyzing symbolic data structures

The most likely bopleneck is not the slowest procedure The most likely bopleneck is not the slowest procedure

slide-121
SLIDE 121

Three symbolic profilers

We developed two implementa`ons:

  • The RoseZe solver-aided language (Racket)
  • The Jalangi dynamic analysis framework (JavaScript)

Since publica`on, based on our work:

  • The Crucible symbolic simula`on library (C, Java, …) by Galois
slide-122
SLIDE 122

Three symbolic profilers

We developed two implementa`ons:

  • The RoseZe solver-aided language (Racket)
  • The Jalangi dynamic analysis framework (JavaScript)

Since publica`on, based on our work:

  • The Crucible symbolic simula`on library (C, Java, …) by Galois

Today

slide-123
SLIDE 123

Symbolic profiling in practice

Refinement type checker for Ruby [VMCAI’18] 6× speedup Cryptographic protocol verifier [FM’18] 29× speedup SQL query verifier [CIDR’17] 75× speedup Safety-critical radiotherapy system verifier [CAV’16] 290× speedup Case studies: fixed 8 performance issues in 15 Rosette tools

slide-124
SLIDE 124

Symbolic profiling in practice

Refinement type checker for Ruby [VMCAI’18] 6× speedup Cryptographic protocol verifier [FM’18] 29× speedup SQL query verifier [CIDR’17] 75× speedup Safety-critical radiotherapy system verifier [CAV’16] 290× speedup

Used in produc`on at the UW Medical Center

Case studies: fixed 8 performance issues in 15 Rosette tools

slide-125
SLIDE 125

Symbolic profiling in practice

Refinement type checker for Ruby [VMCAI’18] 6× speedup Cryptographic protocol verifier [FM’18] 29× speedup SQL query verifier [CIDR’17] 75× speedup Safety-critical radiotherapy system verifier [CAV’16] 290× speedup Case studies: fixed 8 performance issues in 15 Rosette tools User study: 8 Rosette users tasked with finding known performance issues in 4 programs Users solved every task more quickly when they had access to symbolic profiling

6 failures without symbolic profiling vs. none with it

slide-126
SLIDE 126

Symbolic profiling

Time (secs) 3000 6000 9000 12000 January February March April May June

12 seconds 3 hours

A symbolic profiler identifies optimization

  • pportunities in an

automated tool.

slide-127
SLIDE 127

Automated tools are worth building

The case of memory models [PLDI’17]

Building them can be made systematic

Symbolic profiling [OOPSLA’18]

The future is more automation

Automating the automated programming stack

slide-128
SLIDE 128

Automated tools are worth building

The case of memory models [PLDI’17]

Building them can be made systematic

Symbolic profiling [OOPSLA’18]

The future is more automation

Automating the automated programming stack

slide-129
SLIDE 129

Automated programming abstractions

File systems

[ASPLOS’16, OSDI’16]

Operating systems

[SOSP’17, OSDI’18]

Memory models

[PLDI’17]

Metasketches

[POPL’16]

Symbolic profiling

[OOPSLA’18]

Solver-aided languages front-end abstractions for verification/synthesis Symbolic evaluation algorithms to translate programs to SAT/SMT SAT/SMT solving improvements in scale and expressiveness

slide-130
SLIDE 130

Diagnosing SMT solver behavior

File systems

[ASPLOS’16, OSDI’16]

Operating systems

[SOSP’17, OSDI’18]

Memory models

[PLDI’17]

Metasketches

[POPL’16]

Symbolic profiling

[OOPSLA’18]

Solver-aided languages front-end abstractions for verification/synthesis Symbolic evaluation algorithms to translate programs to SAT/SMT SAT/SMT solving improvements in scale and expressiveness ?

slide-131
SLIDE 131

Diagnosing SMT solver behavior

SAT/SMT solving improvements in scale and expressiveness

slide-132
SLIDE 132

Diagnosing SMT solver behavior

File systems

[ASPLOS’16, OSDI’16]

Operating systems

[SOSP’17, OSDI’18]

Memory models

[PLDI’17]

Metasketches

[POPL’16]

Symbolic profiling

[OOPSLA’18]

Solver-aided languages front-end abstractions for verification/synthesis Symbolic evaluation algorithms to translate programs to SAT/SMT SAT/SMT solving improvements in scale and expressiveness Solver profiling

slide-133
SLIDE 133

Self-optimizing automated tools

File systems

[ASPLOS’16, OSDI’16]

Operating systems

[SOSP’17, OSDI’18]

Memory models

[PLDI’17]

Metasketches

[POPL’16]

Symbolic profiling

[OOPSLA’18]

Solver-aided languages front-end abstractions for verification/synthesis Symbolic evaluation algorithms to translate programs to SAT/SMT SAT/SMT solving improvements in scale and expressiveness Solver profiling

Exploit this profiling data for profile-guided op`miza`on

slide-134
SLIDE 134

Application opportunities

File systems

[ASPLOS’16, OSDI’16]

Operating systems

[SOSP’17, OSDI’18]

Memory models

[PLDI’17]

Hardware accelerator design/programming High-performance
 low-precision kernels

2 4 . . . 3 5 ⇥ . . . ⇤

<latexit sha1_base64="82XuOPTGgCFx506OuCN1kMU+8=">AHl3icdVXfj9NGEPZBuUBa4ICnqi9WA4inKM4BOXQPICpV9A2qHiBlo9N6M05Wtz/M7hgSWf47K/4YpI5/0ATbseRkPN8387MjtdxqTHyeTr0bXrP904Hty8Nfz5l9t37p7cu/e28wJuBWfcx5h6UNHCBEhV8TB1wHSv4EF/9UeIfPoPz0p/cJvCQvOVkYkUHMl1efKJKUhwPmQxrKTJuXN8W+SiGLzkLEhW1r0lXE+ZGCWDWHInFytcRH2R4syvozsi7k8GU3GZ7Ppi6fPQzLOTl8m9bGbDoLo/GkukZBc729vHd8h8REpsGgUNz7eTRJcUGyKIUCEs48pFxc8RXMyTRcg1/kVW+K8BF5lmFiHd0Gw8q7H5Fz7f1Wx8TUHNe+jZXOPmyeYXK2yKVJMwQj6oWSTIVow7LR4VI6EKi2ZHDhJOUaijV3XCBtx5AZ+CKs1pz6w/4u5tEip175zEG5Us6q9ZJ8FBUF23has6xzP0YoW7K7kQgbRKz/uRdSCumoeQVJ9StlRn4uKIm8MlqgsQYqsDJaoFyCqcDKaIOGCqVZxKbnxf5X/DB9KSxiM3KDnCIYUdYafx6AcRVae/H21TcBytK8ckr/ADCehMoUzrBjtQfMNkorVdQp2B0+XusPOCgfIwilgi+3WMLb6LURfbfJWw6vnlqMuoSG0LMLbl0Z0divjxUmAfdHRulYprNK8BwFIXMueapvRiX5Y6XITG98JVBjSBnh2gs7tfdVaLfHqnS26HSi9xlkrObnaZDE3xfig3SDUmSPjp5uxkrtSupfGgTYEMnt9xmucWDVqVP24TEnRZe2ybvCqkw084jWB/QA21IzBLe0aAm5WCev8r89D8pCK+WlngFLu6Iheg5eRM7D0ZTu03KY9pADmpgWOY0ylx7G0Qw2bB3bTf6QeTo6U/S4VcC81A/LSugL8v0zER423k/H0WQcvXs6evW6+ZbcDH4Lfg+eBFEwC14Fb4K3wUgn+Db0fHR4PBr4OXgz8Hb2rqtaMm5kHwzV49x8Tq9ah</latexit><latexit sha1_base64="82XuOPTGgCFx506OuCN1kMU+8=">AHl3icdVXfj9NGEPZBuUBa4ICnqi9WA4inKM4BOXQPICpV9A2qHiBlo9N6M05Wtz/M7hgSWf47K/4YpI5/0ATbseRkPN8387MjtdxqTHyeTr0bXrP904Hty8Nfz5l9t37p7cu/e28wJuBWfcx5h6UNHCBEhV8TB1wHSv4EF/9UeIfPoPz0p/cJvCQvOVkYkUHMl1efKJKUhwPmQxrKTJuXN8W+SiGLzkLEhW1r0lXE+ZGCWDWHInFytcRH2R4syvozsi7k8GU3GZ7Ppi6fPQzLOTl8m9bGbDoLo/GkukZBc729vHd8h8REpsGgUNz7eTRJcUGyKIUCEs48pFxc8RXMyTRcg1/kVW+K8BF5lmFiHd0Gw8q7H5Fz7f1Wx8TUHNe+jZXOPmyeYXK2yKVJMwQj6oWSTIVow7LR4VI6EKi2ZHDhJOUaijV3XCBtx5AZ+CKs1pz6w/4u5tEip175zEG5Us6q9ZJ8FBUF23has6xzP0YoW7K7kQgbRKz/uRdSCumoeQVJ9StlRn4uKIm8MlqgsQYqsDJaoFyCqcDKaIOGCqVZxKbnxf5X/DB9KSxiM3KDnCIYUdYafx6AcRVae/H21TcBytK8ckr/ADCehMoUzrBjtQfMNkorVdQp2B0+XusPOCgfIwilgi+3WMLb6LURfbfJWw6vnlqMuoSG0LMLbl0Z0divjxUmAfdHRulYprNK8BwFIXMueapvRiX5Y6XITG98JVBjSBnh2gs7tfdVaLfHqnS26HSi9xlkrObnaZDE3xfig3SDUmSPjp5uxkrtSupfGgTYEMnt9xmucWDVqVP24TEnRZe2ybvCqkw084jWB/QA21IzBLe0aAm5WCev8r89D8pCK+WlngFLu6Iheg5eRM7D0ZTu03KY9pADmpgWOY0ylx7G0Qw2bB3bTf6QeTo6U/S4VcC81A/LSugL8v0zER423k/H0WQcvXs6evW6+ZbcDH4Lfg+eBFEwC14Fb4K3wUgn+Db0fHR4PBr4OXgz8Hb2rqtaMm5kHwzV49x8Tq9ah</latexit><latexit sha1_base64="82XuOPTGgCFx506OuCN1kMU+8=">AHl3icdVXfj9NGEPZBuUBa4ICnqi9WA4inKM4BOXQPICpV9A2qHiBlo9N6M05Wtz/M7hgSWf47K/4YpI5/0ATbseRkPN8387MjtdxqTHyeTr0bXrP904Hty8Nfz5l9t37p7cu/e28wJuBWfcx5h6UNHCBEhV8TB1wHSv4EF/9UeIfPoPz0p/cJvCQvOVkYkUHMl1efKJKUhwPmQxrKTJuXN8W+SiGLzkLEhW1r0lXE+ZGCWDWHInFytcRH2R4syvozsi7k8GU3GZ7Ppi6fPQzLOTl8m9bGbDoLo/GkukZBc729vHd8h8REpsGgUNz7eTRJcUGyKIUCEs48pFxc8RXMyTRcg1/kVW+K8BF5lmFiHd0Gw8q7H5Fz7f1Wx8TUHNe+jZXOPmyeYXK2yKVJMwQj6oWSTIVow7LR4VI6EKi2ZHDhJOUaijV3XCBtx5AZ+CKs1pz6w/4u5tEip175zEG5Us6q9ZJ8FBUF23has6xzP0YoW7K7kQgbRKz/uRdSCumoeQVJ9StlRn4uKIm8MlqgsQYqsDJaoFyCqcDKaIOGCqVZxKbnxf5X/DB9KSxiM3KDnCIYUdYafx6AcRVae/H21TcBytK8ckr/ADCehMoUzrBjtQfMNkorVdQp2B0+XusPOCgfIwilgi+3WMLb6LURfbfJWw6vnlqMuoSG0LMLbl0Z0divjxUmAfdHRulYprNK8BwFIXMueapvRiX5Y6XITG98JVBjSBnh2gs7tfdVaLfHqnS26HSi9xlkrObnaZDE3xfig3SDUmSPjp5uxkrtSupfGgTYEMnt9xmucWDVqVP24TEnRZe2ybvCqkw084jWB/QA21IzBLe0aAm5WCev8r89D8pCK+WlngFLu6Iheg5eRM7D0ZTu03KY9pADmpgWOY0ylx7G0Qw2bB3bTf6QeTo6U/S4VcC81A/LSugL8v0zER423k/H0WQcvXs6evW6+ZbcDH4Lfg+eBFEwC14Fb4K3wUgn+Db0fHR4PBr4OXgz8Hb2rqtaMm5kHwzV49x8Tq9ah</latexit><latexit sha1_base64="82XuOPTGgCFx506OuCN1kMU+8=">AHl3icdVXfj9NGEPZBuUBa4ICnqi9WA4inKM4BOXQPICpV9A2qHiBlo9N6M05Wtz/M7hgSWf47K/4YpI5/0ATbseRkPN8387MjtdxqTHyeTr0bXrP904Hty8Nfz5l9t37p7cu/e28wJuBWfcx5h6UNHCBEhV8TB1wHSv4EF/9UeIfPoPz0p/cJvCQvOVkYkUHMl1efKJKUhwPmQxrKTJuXN8W+SiGLzkLEhW1r0lXE+ZGCWDWHInFytcRH2R4syvozsi7k8GU3GZ7Ppi6fPQzLOTl8m9bGbDoLo/GkukZBc729vHd8h8REpsGgUNz7eTRJcUGyKIUCEs48pFxc8RXMyTRcg1/kVW+K8BF5lmFiHd0Gw8q7H5Fz7f1Wx8TUHNe+jZXOPmyeYXK2yKVJMwQj6oWSTIVow7LR4VI6EKi2ZHDhJOUaijV3XCBtx5AZ+CKs1pz6w/4u5tEip175zEG5Us6q9ZJ8FBUF23has6xzP0YoW7K7kQgbRKz/uRdSCumoeQVJ9StlRn4uKIm8MlqgsQYqsDJaoFyCqcDKaIOGCqVZxKbnxf5X/DB9KSxiM3KDnCIYUdYafx6AcRVae/H21TcBytK8ckr/ADCehMoUzrBjtQfMNkorVdQp2B0+XusPOCgfIwilgi+3WMLb6LURfbfJWw6vnlqMuoSG0LMLbl0Z0divjxUmAfdHRulYprNK8BwFIXMueapvRiX5Y6XITG98JVBjSBnh2gs7tfdVaLfHqnS26HSi9xlkrObnaZDE3xfig3SDUmSPjp5uxkrtSupfGgTYEMnt9xmucWDVqVP24TEnRZe2ybvCqkw084jWB/QA21IzBLe0aAm5WCev8r89D8pCK+WlngFLu6Iheg5eRM7D0ZTu03KY9pADmpgWOY0ylx7G0Qw2bB3bTf6QeTo6U/S4VcC81A/LSugL8v0zER423k/H0WQcvXs6evW6+ZbcDH4Lfg+eBFEwC14Fb4K3wUgn+Db0fHR4PBr4OXgz8Hb2rqtaMm5kHwzV49x8Tq9ah</latexit>
slide-135
SLIDE 135

File systems

[ASPLOS’16, OSDI’16]

Operating systems

[SOSP’17, OSDI’18]

Memory models

[PLDI’17]

Metasketches

[POPL’16]

Symbolic profiling

[OOPSLA’18]

Solver profiling

Hardware accelerator design/programming High-performance
 low-precision kernels

2 4 . . . 3 5 ⇥ . . . ⇤

<latexit sha1_base64="82XuOPTGgCFx506OuCN1kMU+8=">AHl3icdVXfj9NGEPZBuUBa4ICnqi9WA4inKM4BOXQPICpV9A2qHiBlo9N6M05Wtz/M7hgSWf47K/4YpI5/0ATbseRkPN8387MjtdxqTHyeTr0bXrP904Hty8Nfz5l9t37p7cu/e28wJuBWfcx5h6UNHCBEhV8TB1wHSv4EF/9UeIfPoPz0p/cJvCQvOVkYkUHMl1efKJKUhwPmQxrKTJuXN8W+SiGLzkLEhW1r0lXE+ZGCWDWHInFytcRH2R4syvozsi7k8GU3GZ7Ppi6fPQzLOTl8m9bGbDoLo/GkukZBc729vHd8h8REpsGgUNz7eTRJcUGyKIUCEs48pFxc8RXMyTRcg1/kVW+K8BF5lmFiHd0Gw8q7H5Fz7f1Wx8TUHNe+jZXOPmyeYXK2yKVJMwQj6oWSTIVow7LR4VI6EKi2ZHDhJOUaijV3XCBtx5AZ+CKs1pz6w/4u5tEip175zEG5Us6q9ZJ8FBUF23has6xzP0YoW7K7kQgbRKz/uRdSCumoeQVJ9StlRn4uKIm8MlqgsQYqsDJaoFyCqcDKaIOGCqVZxKbnxf5X/DB9KSxiM3KDnCIYUdYafx6AcRVae/H21TcBytK8ckr/ADCehMoUzrBjtQfMNkorVdQp2B0+XusPOCgfIwilgi+3WMLb6LURfbfJWw6vnlqMuoSG0LMLbl0Z0divjxUmAfdHRulYprNK8BwFIXMueapvRiX5Y6XITG98JVBjSBnh2gs7tfdVaLfHqnS26HSi9xlkrObnaZDE3xfig3SDUmSPjp5uxkrtSupfGgTYEMnt9xmucWDVqVP24TEnRZe2ybvCqkw084jWB/QA21IzBLe0aAm5WCev8r89D8pCK+WlngFLu6Iheg5eRM7D0ZTu03KY9pADmpgWOY0ylx7G0Qw2bB3bTf6QeTo6U/S4VcC81A/LSugL8v0zER423k/H0WQcvXs6evW6+ZbcDH4Lfg+eBFEwC14Fb4K3wUgn+Db0fHR4PBr4OXgz8Hb2rqtaMm5kHwzV49x8Tq9ah</latexit><latexit sha1_base64="82XuOPTGgCFx506OuCN1kMU+8=">AHl3icdVXfj9NGEPZBuUBa4ICnqi9WA4inKM4BOXQPICpV9A2qHiBlo9N6M05Wtz/M7hgSWf47K/4YpI5/0ATbseRkPN8387MjtdxqTHyeTr0bXrP904Hty8Nfz5l9t37p7cu/e28wJuBWfcx5h6UNHCBEhV8TB1wHSv4EF/9UeIfPoPz0p/cJvCQvOVkYkUHMl1efKJKUhwPmQxrKTJuXN8W+SiGLzkLEhW1r0lXE+ZGCWDWHInFytcRH2R4syvozsi7k8GU3GZ7Ppi6fPQzLOTl8m9bGbDoLo/GkukZBc729vHd8h8REpsGgUNz7eTRJcUGyKIUCEs48pFxc8RXMyTRcg1/kVW+K8BF5lmFiHd0Gw8q7H5Fz7f1Wx8TUHNe+jZXOPmyeYXK2yKVJMwQj6oWSTIVow7LR4VI6EKi2ZHDhJOUaijV3XCBtx5AZ+CKs1pz6w/4u5tEip175zEG5Us6q9ZJ8FBUF23has6xzP0YoW7K7kQgbRKz/uRdSCumoeQVJ9StlRn4uKIm8MlqgsQYqsDJaoFyCqcDKaIOGCqVZxKbnxf5X/DB9KSxiM3KDnCIYUdYafx6AcRVae/H21TcBytK8ckr/ADCehMoUzrBjtQfMNkorVdQp2B0+XusPOCgfIwilgi+3WMLb6LURfbfJWw6vnlqMuoSG0LMLbl0Z0divjxUmAfdHRulYprNK8BwFIXMueapvRiX5Y6XITG98JVBjSBnh2gs7tfdVaLfHqnS26HSi9xlkrObnaZDE3xfig3SDUmSPjp5uxkrtSupfGgTYEMnt9xmucWDVqVP24TEnRZe2ybvCqkw084jWB/QA21IzBLe0aAm5WCev8r89D8pCK+WlngFLu6Iheg5eRM7D0ZTu03KY9pADmpgWOY0ylx7G0Qw2bB3bTf6QeTo6U/S4VcC81A/LSugL8v0zER423k/H0WQcvXs6evW6+ZbcDH4Lfg+eBFEwC14Fb4K3wUgn+Db0fHR4PBr4OXgz8Hb2rqtaMm5kHwzV49x8Tq9ah</latexit><latexit sha1_base64="82XuOPTGgCFx506OuCN1kMU+8=">AHl3icdVXfj9NGEPZBuUBa4ICnqi9WA4inKM4BOXQPICpV9A2qHiBlo9N6M05Wtz/M7hgSWf47K/4YpI5/0ATbseRkPN8387MjtdxqTHyeTr0bXrP904Hty8Nfz5l9t37p7cu/e28wJuBWfcx5h6UNHCBEhV8TB1wHSv4EF/9UeIfPoPz0p/cJvCQvOVkYkUHMl1efKJKUhwPmQxrKTJuXN8W+SiGLzkLEhW1r0lXE+ZGCWDWHInFytcRH2R4syvozsi7k8GU3GZ7Ppi6fPQzLOTl8m9bGbDoLo/GkukZBc729vHd8h8REpsGgUNz7eTRJcUGyKIUCEs48pFxc8RXMyTRcg1/kVW+K8BF5lmFiHd0Gw8q7H5Fz7f1Wx8TUHNe+jZXOPmyeYXK2yKVJMwQj6oWSTIVow7LR4VI6EKi2ZHDhJOUaijV3XCBtx5AZ+CKs1pz6w/4u5tEip175zEG5Us6q9ZJ8FBUF23has6xzP0YoW7K7kQgbRKz/uRdSCumoeQVJ9StlRn4uKIm8MlqgsQYqsDJaoFyCqcDKaIOGCqVZxKbnxf5X/DB9KSxiM3KDnCIYUdYafx6AcRVae/H21TcBytK8ckr/ADCehMoUzrBjtQfMNkorVdQp2B0+XusPOCgfIwilgi+3WMLb6LURfbfJWw6vnlqMuoSG0LMLbl0Z0divjxUmAfdHRulYprNK8BwFIXMueapvRiX5Y6XITG98JVBjSBnh2gs7tfdVaLfHqnS26HSi9xlkrObnaZDE3xfig3SDUmSPjp5uxkrtSupfGgTYEMnt9xmucWDVqVP24TEnRZe2ybvCqkw084jWB/QA21IzBLe0aAm5WCev8r89D8pCK+WlngFLu6Iheg5eRM7D0ZTu03KY9pADmpgWOY0ylx7G0Qw2bB3bTf6QeTo6U/S4VcC81A/LSugL8v0zER423k/H0WQcvXs6evW6+ZbcDH4Lfg+eBFEwC14Fb4K3wUgn+Db0fHR4PBr4OXgz8Hb2rqtaMm5kHwzV49x8Tq9ah</latexit><latexit sha1_base64="82XuOPTGgCFx506OuCN1kMU+8=">AHl3icdVXfj9NGEPZBuUBa4ICnqi9WA4inKM4BOXQPICpV9A2qHiBlo9N6M05Wtz/M7hgSWf47K/4YpI5/0ATbseRkPN8387MjtdxqTHyeTr0bXrP904Hty8Nfz5l9t37p7cu/e28wJuBWfcx5h6UNHCBEhV8TB1wHSv4EF/9UeIfPoPz0p/cJvCQvOVkYkUHMl1efKJKUhwPmQxrKTJuXN8W+SiGLzkLEhW1r0lXE+ZGCWDWHInFytcRH2R4syvozsi7k8GU3GZ7Ppi6fPQzLOTl8m9bGbDoLo/GkukZBc729vHd8h8REpsGgUNz7eTRJcUGyKIUCEs48pFxc8RXMyTRcg1/kVW+K8BF5lmFiHd0Gw8q7H5Fz7f1Wx8TUHNe+jZXOPmyeYXK2yKVJMwQj6oWSTIVow7LR4VI6EKi2ZHDhJOUaijV3XCBtx5AZ+CKs1pz6w/4u5tEip175zEG5Us6q9ZJ8FBUF23has6xzP0YoW7K7kQgbRKz/uRdSCumoeQVJ9StlRn4uKIm8MlqgsQYqsDJaoFyCqcDKaIOGCqVZxKbnxf5X/DB9KSxiM3KDnCIYUdYafx6AcRVae/H21TcBytK8ckr/ADCehMoUzrBjtQfMNkorVdQp2B0+XusPOCgfIwilgi+3WMLb6LURfbfJWw6vnlqMuoSG0LMLbl0Z0divjxUmAfdHRulYprNK8BwFIXMueapvRiX5Y6XITG98JVBjSBnh2gs7tfdVaLfHqnS26HSi9xlkrObnaZDE3xfig3SDUmSPjp5uxkrtSupfGgTYEMnt9xmucWDVqVP24TEnRZe2ybvCqkw084jWB/QA21IzBLe0aAm5WCev8r89D8pCK+WlngFLu6Iheg5eRM7D0ZTu03KY9pADmpgWOY0ylx7G0Qw2bB3bTf6QeTo6U/S4VcC81A/LSugL8v0zER423k/H0WQcvXs6evW6+ZbcDH4Lfg+eBFEwC14Fb4K3wUgn+Db0fHR4PBr4OXgz8Hb2rqtaMm5kHwzV49x8Tq9ah</latexit>

New abstractions and tools can empower programmers to build specialized automated programming tools that improve software reliability.

slide-136
SLIDE 136

New abstractions and tools can empower programmers to build specialized automated programming tools that improve software reliability.

Thanks!

bornholt@uw.edu https://unsat.org