/
The Sketch Synthesis System The Sketch Synthesis System

The Sketch Synthesis System - PowerPoint Presentation

liane-varnes
liane-varnes . @liane-varnes
Follow
384 views
Uploaded On 2017-11-16

The Sketch Synthesis System - PPT Presentation

Armando SolarLezama bitlyiptutorial2015 Designing a language for partial programs Language Design Strategy Extend base language with one construct Constant hole Synthesizer replaces ID: 605782

bit int amp return int bit return amp bnd mux count gen assert expressions swap lin ret sets void

Share:

Link:

Embed:

Download Presentation from below link

Download Presentation The PPT/PDF document "The Sketch Synthesis System" 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

The Sketch Synthesis System

Armando Solar-Lezamabit.ly/iptutorial2015Slide2

Designing a language for partial programsSlide3

Language Design Strategy

Extend base language with one construct

Constant hole:

??

Synthesizer replaces

?? with a constantHigh-level constructs defined in terms of ??

int bar (int x){ int t = x * ??; assert t == x + x; return t;}

int bar (int x){ int t = x * 2; assert t == x + x; return t;} Slide4

Integer Generator

 Sets of ExpressionsExpressions with

??

== sets of expressions

linear expressions

x*

?? + y*?? polynomials

x*x*?? + x*?? + ?? sets of variables ?? ? x : y Slide5

Example: Registerless Swap

Swap two words without an extra temporary

int

W = 32;

void

swap(ref bit

[W] x, ref bit[W] y){ if(??){ x = x ^ y;}else{ y = x ^ y; } if(??){ x = x ^ y;}else{ y = x ^ y; } if(??){ x = x ^ y;}else{ y = x ^ y; } }harness void main(bit[W] x, bit[W] y){

bit[W] tx = x; bit[W] ty = y; swap(x, y); assert x==ty && y == tx;}Slide6

From simple to complex holes

We need to compose ?? to form complex holesBorrow ideas from generative programmingDefine generators

to produce families of functions

Use partial evaluation aggressivelySlide7

Generators

Look like a function but are partially evaluated into their calling contextKey feature:

Different invocations

 Different code

Can recursively define arbitrary families of programsSlide8

Example: Least Significant Zero Bit

0010 0101

 0000 0010

Trick:

Adding 1 to a string of ones turns the next zero to a 1

i.e. 000111 + 1 = 001000

int

W = 32;bit[W] isolate0 (bit[W] x) { // W: word size bit[W] ret = 0; for (int i = 0; i < W; i++) if (!x[i]) { ret[i] = 1; return ret; } }Slide9

Sample Generator

/**

* Generate the set of all bit-vector expressions

* involving +, &,

xor

and bitwise negation (~).

* the bnd param limits the size of the generated expression. */generator bit[W] gen(bit[W] x, int bnd){ assert bnd > 0; if(??) return

x; if(??) return ??; if(??) return ~gen(x, bnd-1); if(??){ return {| gen(x, bnd-1) (+ | & | ^) gen(x, bnd-1) |}; }}Slide10

Example: Least Significant Zero Bit

generator bit[W] gen(bit[W] x,

int

bnd

){

assert bnd > 0; if

(??) return x; if(??) return ??; if(??) return ~gen(x, bnd-1); if(??){ return {| gen(x, bnd-1) (+ | & | ^) gen(x, bnd-1) |}; }}bit[W] isolate0sk (bit[W] x) implements isolate0 { return gen(x, 3);}Slide11

How does it work?Slide12

Insert your favorite

checker here

CEGIS Synthesis algorithm

 

 

 

Synthesize

Check

 

 Slide13

CEGIS

 

 

Synthesize

Check

 

 

 

 

 

 

 

 

 

 Slide14

A sketch as a constraint system

14

int

lin

(

int x){

if(x > ??1) return ??2*x + ??3; else return ??4*x;}void main(int x){ int t1 = lin(x); int t2 = lin(x+1); if(x<4) assert t1 >= x*x;

if(x>=3) assert t2-t1 == 1;}??2*x + ??3??4*xx >

??1

??

2

*(

x+1) +

??

3

??

4

*(

x+1)

x+1 >

??

1

x>=4

x<3

mux

mux

x*x

-

=

1

or

>=

or

andSlide15

Ex : Population count. 0010

0110  315

int

pop (

bit

[

W] x)

{ int count = 0; for (int i = 0; i < W; i++) { if (x[i]) count++; } return count;

} x

count

0

0

0

0

one

0

0

0

1

+

mux

count

+

count

mux

+

count

+

count

mux

mux

F(

x

) =

Slide16

16

int

popSketched

(

bit

[

W] x) implements pop { repeat(??) { x = (x & ??

) + ((x >> ??) & ??); } return x;}

x

&

>>

&

+

mux

x

&

>>

&

+

mux

x

&

>>

&

+

mux

x

S(

x

,

o

) =