/
Making synthesis practical Making synthesis practical

Making synthesis practical - PowerPoint Presentation

trish-goza
trish-goza . @trish-goza
Follow
401 views
Uploaded On 2017-09-11

Making synthesis practical - PPT Presentation

Are we there yet Armando SolarLezama Synthesis 1980s view Complete Formal Specification Synthesis modern view     Space of programs   Safety Properties Test Harnesses InputOutput ID: 587020

int synthesis results iend synthesis int iend results ibeg list min users max roles partition solvers language program rules holes unroll vol

Share:

Link:

Embed:

Download Presentation from below link

Download Presentation The PPT/PDF document "Making synthesis practical" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

Slide1

Making synthesis practical Are we there yet?

Armando Solar-LezamaSlide2

Synthesis: 1980s view

Complete Formal SpecificationSlide3

Synthesis: modern view

 

 

Space of programs

 

Safety Properties

Test Harnesses

Input/Output

Examples

 Slide4

Example

You want to partition N elements over P procsHow many elements should a processor get?

Obvious answer is N/PObvious answer is wrong!

N = 18

P = 5 Slide5

void

partition(int p,

int P, int

N,

ref

int ibeg

, ref

int iend){

if(p< {$

p, P, N, N/P, N%P : *, + $} ){

iend =

{$

p, P, N, N/P, N%P : *, +

$}

;

ibeg = {$ p, P, N, N/P, N%P : *, + $}; }else{ iend = {$ p, P, N, N/P, N%P : *, + $}; ibeg = {$ p, P, N, N/P, N%P : *, + $}; }}

Synthesizing a partition function

What do we know?The interface to the function we wantNot all processors will get the same # of elementsThe kind of expressions we expect

p

P

N

N/P

N%P

*

+Slide6

Key Idea

A sketch is a parameterized programThe goal is to find parameters that work for all inputs

Where does the specification come from?

 Slide7

harness

void

testPartition(int p,

int

N,

int P){

if(p>=P || P < 1){ return

; } int

ibeg, iend;

partition(p, P, N, ibeg, iend

);

assert

iend

- ibeg < (N/P) + 2; if(p+1 < P){ int ibeg2, iend2; partition(p+1, P, N, ibeg2, iend2); assert iend == ibeg2; } if(p==0){

assert ibeg == 0; }

if(p==P-1){

assert iend == N; }

}Tests as specifications

How does the system know what a partition is?

Partitions should be balanced

Adjacent partitions should match

First and last partition should go all the way to the endsSlide8

And 5 seconds later…

void

partition(

int

p,

int P, int N, ref

int ibeg

, ref int iend){

if(p < (N % P)){ iend = ((N / P) + 1) * (1 + p);

ibeg = p + ((N / P) * p); }else{

iend = ((N / P) * p) + ((N / P) + (N % P));

ibeg = (N % P) + ((N / P) * p);

}

}

Now can you synthesize programs with more than 5 lines of code?

Cool!Slide9

Can you synthesize more than 5 LOC?

Not that much moreIn the example we synthesized 25 AST nodesWe can do twice as much, but not much more

But…We can synthesize them within larger pieces of code1-2K LOC in some of our testsWe can do it very reliably

So what can you do if you can synthesize 5-10 expressions in a program?Slide10

Program

+ Pre/Post

cond + Invariants

VC

Generator

Sketch

C-like language with holes and assertions

 

Unroll

Inline

Enumerate

Provably Correct Synthesis

Program Optimization

 Slide11

Sketch

C-like language with holes and assertions

 

High-Level Language

Compiler

Unroll

Inline

Enumerate

Automated Tutoring

 

Solver

Synthesis

Provably Correct Synthesis

Program OptimizationSlide12

Program

+ Pre/Post

cond + Invariants

VC

Generator

Sketch

C-like language with holes and assertions

 

Unroll

Inline

Enumerate

Automated Tutoring

Provably Correct Synthesis

Program Optimization

 

Solver

SynthesisSlide13

Invariant Synthesis for Optimization

Work with Alvin Cheung and Shoaib KamilSlide14

Optimization then and now

Naïve source code

Optimal executable

Kind-of-OK executable

ATLAS

Pochoir

Domain specific problem description

Close to optimal implementation

HalideSlide15

What about existing

source code?

Source Code

DSL Program

Proof of

Equivalence

SynthesisSlide16

Java to SQL

Application

SQL Queries

Database

Relations

ORM

libraries

Methods

ObjectsSlide17

Java to SQL

Application

SQL Queries

Database

Relations

ORM

libraries

Methods

ObjectsSlide18

Java to SQL

List getUsersWithRoles () {

List users =

User.getAllUsers

();

List roles =

Role.getAllRoles

(); List results = new

ArrayList

();

for

(User u : users) {

for

(Role r : roles) { if (u.roleId == r.id) results.add(u); }}

return

results; }

SELECT * FROM user

SELECT * FROM role

List getUsersWithRoles ()

{

  return

executeQuery

(

SELECT u FROM user u, role r WHERE

u.roleId

== r.id

ORDER BY u.roleId, r.id”; }

convert toSlide19

Java to SQL

List getUsersWithRoles () {

List users =

User.getAllUsers

();

List roles =

Role.getAllRoles

(); List results = new

ArrayList

();

for

(User u : users) {

for

(Role r : roles) { if (u.roleId == r.id) results.add(u); }}

return

results; }

results =

outputExpr(users, roles)

Verification conditions

preCondition

outerInvariant

(users/query(…), results/[], …)

outerInvariant

(…)

outer loop terminates 

results = outputExpr(users, roles) …outerInvariant(users, roles, u, results, …)

innerInvariant

(users, roles, u, r, results, …)Slide20

Program

+ Unkown Post

cond + Unknown Invariants

VC

Generator

Sketch

C-like language with holes and assertions

 

Unroll

Inline

EnumerateSlide21

6/17/2013

PLDI 2013

21

Join Query

Nested-loop join

Hash join!

O(n2) O(n)Slide22

What about HPC?

Legacy

Fortran/C++

Code

Stencil DLS

(Halide)

Proof of

Equivalence

SynthesisSlide23

Legacy to Halide

for

(k=y_min-2;k<=y_max+2;k++) {

for

(j=x_min-2;j<=x_max+2;j++) {

post_vol[((x_max+5)*(k-(y_min-2))+(j)-(x_min-2

))] =

volume[((x_max+4)*(k-(y_min-2))+(j)-(x_min-2))]

+

vol_flux_y

[((x_max+4)*(k+1 -(y_min-2))+(j)-(x_min-2))]

- vol_flux_y[((x_max+4)*(k-(y_min-2))+(j)-(x_min-2))]; }}

post_vol[j,k] = volume[j,k]

+ vol_flux[j,k+1] + vol_flux[j,k]

 Slide24

Invariants

 Slide25

Example

out = 0

for

(

int

i

=0; i<n-1; ++i

){ out[i+1] = in[

i];

}

 

Loop invariantSlide26

Challenges

Big invariantsComplex floating point arithmeticUniversal QuantifiersSlide27

Quantifiers

 

i

f

(

outerInvariant

(…)

&&

!

outerCond

()){

assert

out ==

outputExpr

(in) ;

}

The

leads to a

constraint!

 

 

 

 Slide28

Quantifiers

 

i

f

(

outerInvariant

(…)

&&

cond

()){

assert

out ==

outputExpr

(in) ;

}

Always safe to weaken this condition (more true)

 

 

Let the synthesizer discover

!

 Slide29

Example

 

 

Loop invariant

 

loopCond

 

 

 

out = 0

f

or

(

int

i

=0;

i

<n-1; ++

i

){

out[i+1] = in[

i

];

}Slide30

Example

 

 

Loop invariant

 

loopCond

 

 

 

out = 0

f

or

(

int

i

=0;

i

<n-1; ++

i

){

out[i+1] = in[

i

];

}Slide31

Benchmarks

29 Kernels from 3 DOE MiniApps16 distinct kernelsSlide32

Synthesis time

12

hrs

Synthesis time with parallel synthesis on 24 coresSlide33

Speedups

Speedups on 24 coresSlide34

Solver Synthesis

With Rohit Singh, Jeevana Inala, Willy VasquezSlide35

SMT Solvers are great!

UCLID

Boolector

Spec#

How can this possibly work?Slide36

How is this possible?

Solvers leverage the structure in problems of practical interestTo a limited extent

Can find bugsCan’t crack RSA

Only so much structure to use!

Can we do better?Slide37

Solvers: a high-level view

Rewriter

Refinement

SAT

Under-approximation

Checking

Formula

SolutionSlide38

Solvers: a high-level view

Rewriter

Refinement

SAT

Under-approximation

Checking

Formula

SolutionSlide39

Rewriter

Pattern

Assumptions–> Pattern

Inputs

:

<

<

OR

a

b

d

<

d

a

b<d

Predicate

a

b

d

 

 

 Slide40

DSL for Rewriters

Input Specification: list of rules

DSL Compiler

Efficient pattern matching

Rule verification

Rule generalization (eliminating common parts in the patterns, weakening the predicate)

Incorporating

symmetries

Efficient rule application (ordering of rules)

 

18-Jan-15

A new approach to building solvers

40Slide41

Sketch

C-like language with holes and assertions

 

High-Level Language

Compiler

Unroll

Inline

Enumerate

 

We can synthesize all rules from

autogenerated

sketches!Slide42

Synthesizing rules

Corpus of problems

from a domain

Pattern

Extraction

Sketches for

potential rules

Synthesis

Rewrite

RulesSlide43

The synthesis problem

What about optimality?

should be as true as possible

For a given

,

should be as small as possible?

 

 

 Slide44

Does it work?

Problem sizeSlide45

Does it work?

Solution timeSlide46

Enhancing the IR

=

Replace all

with

in the

IR

?

 

18-Jan-15

A new approach to building solvers

46Slide47

Enhancing the IR

+ Conciseness + Simpler rewrite rules

Without

max

operation?

 

18-Jan-15

A new approach to building solvers

47Slide48

Enhancing the IR

+ Conciseness +

Simpler rewrite rules+ Specialized constraints for max during translation to SAT

 

18-Jan-15

A new approach to building solvers

48Slide49

Autogenerating Encodings

What about temporaries?What about optimality?

 

 

 

 

Must be in CNF formSlide50

Autogenerating with temporaries

 

 

 

 Slide51

Autogenerating with temporaries

This direction is easy

 

 

 

 Slide52

Autogenerating with temporaries

This direction is easy

 

 

 

 Slide53

Autogenerating with temporaries

This direction is harder

 

 

 

 Slide54

Solution

Enforce that all clauses have only (x,t

) or (t,y)We know how to derive

from

Essentially encoding a little solver in a sketch

Now you can do skolemization!

 

 

 

 

 

 Slide55

Does this work?

Encodings for booleans can be generated in secondsAlready useful in generating constraints for composite nodesSlide56

??

Sketch

C-like language with holes and assertions

 

Unroll

Inline

Enumerate

There is more to synthesis than “synthesis”

You can do this too!

All the sketch infrastructure is available in open source