handling non-linear operations in the value analysis of...

21
Handling non-linear operations in the value analysis of Costa Diego Alonso, Puri Arenas, Samir Genaim Departamento de Sistemas Inform´ aticos y Computaci´on (DSIC) Complutense University of Madrid (UCM) March 27 th 2011 Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27 th 2011 1 / 19

Upload: others

Post on 07-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Handling non-linear operations in the value analysis of Costacosta.fdi.ucm.es/papers/costa/AlonsoAG11-slides.pdf · int log2 ( int x)f int l = 0; int y = 1; while (x>y)f y = y * 2;

Handling non-linear operations in the value analysis ofCosta

Diego Alonso, Puri Arenas, Samir Genaim

Departamento de Sistemas Informaticos y Computacion (DSIC)Complutense University of Madrid (UCM)

March 27th 2011

Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27th 2011 1 / 19

Page 2: Handling non-linear operations in the value analysis of Costacosta.fdi.ucm.es/papers/costa/AlonsoAG11-slides.pdf · int log2 ( int x)f int l = 0; int y = 1; while (x>y)f y = y * 2;

Costa in a nutshell

Costa is a COSt and Termination Analyzer that

analyzes a Java Bytecode(JBC) program

with a cost model (termination, instructions, heap)

and computes bounds on its execution cost

CostaCostaJava

BytecodeProgram

Cost Model

Termination

Upper Bounds

Asymptotic Complexity

Lower Bounds

Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27th 2011 2 / 19

Page 3: Handling non-linear operations in the value analysis of Costacosta.fdi.ucm.es/papers/costa/AlonsoAG11-slides.pdf · int log2 ( int x)f int l = 0; int y = 1; while (x>y)f y = y * 2;

Example: logarithm with a fixed base b = 2

Example

// Pre : x>0i n t l o g 2 ( i n t x ) {

i n t l = 0 ;i n t y = 1 ;whi le ( x>y ) {

y = y * 2;

l = l + 1 ;}return l ;

}

y is initialized as y = 1

each iteration duplicates y untilit reaches x

therefore, an execution oflog2(x) terminates after log2xiterations

Costa infers a cost inO(log(x))

Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27th 2011 3 / 19

Page 4: Handling non-linear operations in the value analysis of Costacosta.fdi.ucm.es/papers/costa/AlonsoAG11-slides.pdf · int log2 ( int x)f int l = 0; int y = 1; while (x>y)f y = y * 2;

Example: logarithm with a parametric base b

Example

// Pre : x>0,b>1i n t logB ( i n t b , i n t x ) {

i n t l = 0 ;i n t y = 1 ;whi le ( x>y ) {

y = y * b;

l = l + 1 ;}return l ;

}

y is initialized as y = 1.

each iteration multiplies y untilit reaches x

therefore, an execution oflogB(b, x) terminates afterapprox logbx iterations

Costa fails to provetermination or complexity

Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27th 2011 4 / 19

Page 5: Handling non-linear operations in the value analysis of Costacosta.fdi.ucm.es/papers/costa/AlonsoAG11-slides.pdf · int log2 ( int x)f int l = 0; int y = 1; while (x>y)f y = y * 2;

Analysis overview

Costa first “compiles” the bytecode to abstract rules in which

data is represented as size values

each operation is replaced with its cost and

its effect is modeled with linear constraints

AbstractRules

JavaBytecode

Cost Model

AbstractCompilation

AbstractCompilation

Size Measures

Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27th 2011 5 / 19

Page 6: Handling non-linear operations in the value analysis of Costacosta.fdi.ucm.es/papers/costa/AlonsoAG11-slides.pdf · int log2 ( int x)f int l = 0; int y = 1; while (x>y)f y = y * 2;

Analysis example: logarithm with a fixed base b = 2

Example

// Pre : x>0i n t l o g 2 ( i n t x ) {

i n t l = 0 ;i n t y = 1 ;whi le ( x>y ) {

y = y * 2;

l = l + 1 ;}return l ;

}

log2(〈x〉, 〈l〉)←{l0 = 0} ,{y0 = 1} ,log2w (〈x , l0, y0〉, 〈l1〉),{l = l1} .

log2w (〈x , l1, y1〉, 〈l3〉)←{x > y1} ,{y2 = y1 ∗ 2} ,{l2 = l1 + 1} ,log2w (〈x , l2, y2〉, 〈l3〉).

log2w (〈x , l , y1〉, 〈l〉)←{x ≤ y1} .

Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27th 2011 6 / 19

Page 7: Handling non-linear operations in the value analysis of Costacosta.fdi.ucm.es/papers/costa/AlonsoAG11-slides.pdf · int log2 ( int x)f int l = 0; int y = 1; while (x>y)f y = y * 2;

Resolution overview

The resolution phase obtains the desired results from the Cost-Size-Rules:

Entries model the program’s starting state

A postcondition models the size effect of a call

A transition describes how variables change from the rule’s header toa recursive call

Cost Size

Rules

Value AnalysisValue

Analysis

PostcontionsPreconditions

Loop Transitions

IterationBounds

ProgramEntries

Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27th 2011 7 / 19

Page 8: Handling non-linear operations in the value analysis of Costacosta.fdi.ucm.es/papers/costa/AlonsoAG11-slides.pdf · int log2 ( int x)f int l = 0; int y = 1; while (x>y)f y = y * 2;

Resolution example: logarithm with a fixed base b = 2

Example

log2(〈x〉, 〈l〉)←{l0 = 0} ,{y0 = 1} ,log2w (〈x , l0, y0〉, 〈l1〉),{l = l1} .

log2w (〈x , l1, y1〉, 〈l3〉)←{x > y1} ,{y2 = y1 ∗ 2} ,{l2 = l1 + 1} ,log2w (〈x , l2, y2〉, 〈l3〉).

log2w (〈x , l , y1〉, 〈l〉)←{x ≤ y1} .

Preconditions:

log2(〈x0〉) J {x0 ≥ 0}log2w (〈x , l1, y1〉) J{x > 0, l1 ≥ 0, y1 > 0}

Loop transition of log2w :

〈x , l1, y1〉 → 〈x , l2, y2〉 J{x > 0, l1 ≥ 0, y1 > 0}u{x > y1, y2 = y1 ∗ 2, l2 = l1 + 1}

This transition can be provento have a logarithmic order

Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27th 2011 8 / 19

Page 9: Handling non-linear operations in the value analysis of Costacosta.fdi.ucm.es/papers/costa/AlonsoAG11-slides.pdf · int log2 ( int x)f int l = 0; int y = 1; while (x>y)f y = y * 2;

Analysis example: logarithm with a parametric base b

Example

// Pre : x>0,b>1i n t logB ( i n t b , i n t x ) {

i n t l = 0 ;i n t y = 1 ;whi le ( x>y ) {

y = y * b;

l = l + 1 ;}return l ;

}

logB(〈b, x〉, 〈l〉)←{l0 = 0} ,{y0 = 1} ,logBw (〈b, x , l0, y0〉, 〈l〉).

logBw (〈b, x , l1, y1〉, 〈l2〉)←{x > y1} ,{y2 = },{l2 = l1 + 1} ,logBw (〈b, x , l2, y2〉, 〈l2〉).

logBw (〈b, x , l , y1〉, 〈l〉)←{x ≤ y1} .

Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27th 2011 9 / 19

Page 10: Handling non-linear operations in the value analysis of Costacosta.fdi.ucm.es/papers/costa/AlonsoAG11-slides.pdf · int log2 ( int x)f int l = 0; int y = 1; while (x>y)f y = y * 2;

Resolution example: logarithm with a parametric base b

Example

logB(〈b, x〉, 〈l〉)←{l0 = 0} ,{y0 = 1} ,logBw (〈b, x , l0, y0〉, 〈l〉).

logBw (〈b, x , l1, y1〉, 〈l2〉)←{x > y1} ,{y2 = },{l2 = l1 + 1} ,logBw (〈b, x , l2, y2〉, 〈l2〉).

logBw (〈b, x , l , y1〉, 〈l〉)←{x ≤ y1} .

Preconditions

logB(〈b, x〉) J {b > 1, x ≥ 0}logBw (〈b, x , l1, y1〉) J{b > 1, x ≥ 1, l1 ≥ 0, y1 = }

Loop transition of log2w :

〈b, x , l1, y1〉 → 〈b, x , l2, y2〉 J{x > y1, y2 = , l2 = l1 + 1}

This loop is non-terminating

Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27th 2011 10 / 19

Page 11: Handling non-linear operations in the value analysis of Costacosta.fdi.ucm.es/papers/costa/AlonsoAG11-slides.pdf · int log2 ( int x)f int l = 0; int y = 1; while (x>y)f y = y * 2;

Linear or non-linear operations

A linear operation like z = x+ycan be modeled with a linearconstraint

A nonlinear operation like z = x∗ycan only be modeled as >

Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27th 2011 11 / 19

Page 12: Handling non-linear operations in the value analysis of Costacosta.fdi.ucm.es/papers/costa/AlonsoAG11-slides.pdf · int log2 ( int x)f int l = 0; int y = 1; while (x>y)f y = y * 2;

Solution: disjunctive abstraction of z = x ∗ y

Example (z = x ∗ y)

ϕ1 ≡ {x = 0} , {z = 0}ϕ2 ≡ {y = 0} , {z = 0}ϕ3 ≡ {x = 1} , {z = y}ϕ4 ≡ {y = 1} , {z = x}ϕ5 ≡ {x = −1} , {z = −y}ϕ6 ≡ {y = −1} , {z = −x}ϕ7 ≡ {x ≥ 2, y ≥ 2}

{z ≥ 2x , z ≥ 2y}ϕ8 ≡ {x ≥ 2, y ≤ −2}

{z ≤ −2x , z ≤ 2y}ϕ9 ≡ {x ≤ −2, y ≥ 2}

{z ≤ 2x , z ≤ −2y}ϕ10 ≡ {x ≤ −2, y ≤ −2}

{z ≥ −2x , z ≥ −2y}

Input space of z = x ∗ yY

X

φ1

φ2

φ3

φ4

φ5

φ6

φ7

φ8

φ9

φ10

Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27th 2011 12 / 19

Page 13: Handling non-linear operations in the value analysis of Costacosta.fdi.ucm.es/papers/costa/AlonsoAG11-slides.pdf · int log2 ( int x)f int l = 0; int y = 1; while (x>y)f y = y * 2;

The solution: disjunctive abstractions

Nonlinear operations can’t be modeled with linear constraints becauseno linear constraint holds for all input values (input space).

But a constraint can hold for the inputs in a subset of the space.

We abstract a non-linear operation F to a finite disjunctionϕ1 ∨ ϕ2 ∨ · · · ∨ ϕn.

φ4 φ

3

φ1

φ5

φ2

Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27th 2011 13 / 19

Page 14: Handling non-linear operations in the value analysis of Costacosta.fdi.ucm.es/papers/costa/AlonsoAG11-slides.pdf · int log2 ( int x)f int l = 0; int y = 1; while (x>y)f y = y * 2;

Using disjunctive information

(a) We could employ a value analysis over over a disjunctive domainbut using a disjunctive abstract domain doesn’t scale

(b) Instead, we encode those disjunctions into the abstract program anduse linear constraints in the value analysis

Example

When the value analysis reaches the operation z = x ∗ y and it knows thatx ≥ 1 and y ≥ 2, we want it to use only the satisfiable cases

ϕ3 ≡ {x = 1} {z = y}ϕ7 ≡ {x ≥ 2, y ≥ 2} {z ≥ 2x , z ≥ 2y}

and ignore the (unsatisfiable) rest for computing the postcondition{z = y} t {z ≥ 2x , z ≥ 2y} = {z ≥ 2x , z ≥ y}

Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27th 2011 14 / 19

Page 15: Handling non-linear operations in the value analysis of Costacosta.fdi.ucm.es/papers/costa/AlonsoAG11-slides.pdf · int log2 ( int x)f int l = 0; int y = 1; while (x>y)f y = y * 2;

Using disjunctive information

(a) We could employ a value analysis over over a disjunctive domainbut using a disjunctive abstract domain doesn’t scale

(b) Instead, we encode those disjunctions into the abstract program anduse linear constraints in the value analysis

Example

When the value analysis reaches the operation z = x ∗ y and it knows thatx ≥ 1 and y ≥ 2, we want it to use only the satisfiable cases

ϕ3 ≡ {x = 1} {z = y}ϕ7 ≡ {x ≥ 2, y ≥ 2} {z ≥ 2x , z ≥ 2y}

and ignore the (unsatisfiable) rest for computing the postcondition{z = y} t {z ≥ 2x , z ≥ 2y} = {z ≥ 2x , z ≥ y}

Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27th 2011 14 / 19

Page 16: Handling non-linear operations in the value analysis of Costacosta.fdi.ucm.es/papers/costa/AlonsoAG11-slides.pdf · int log2 ( int x)f int l = 0; int y = 1; while (x>y)f y = y * 2;

Using disjunctive information

Replace each code b ≡ z = xFy by a call to opFb(〈x , y〉, 〈z〉).

opFb(〈x , y〉, 〈z〉) is defined with one rule per case.

The value analysis computes the precondition pre(opbF) and the

postcondition post(opbF) as for any other predicate

Operationpre

φ1

φ3

φ2

post

Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27th 2011 15 / 19

Page 17: Handling non-linear operations in the value analysis of Costacosta.fdi.ucm.es/papers/costa/AlonsoAG11-slides.pdf · int log2 ( int x)f int l = 0; int y = 1; while (x>y)f y = y * 2;

Using disjunctive information

Replace each code b ≡ z = xFy by a call to opFb(〈x , y〉, 〈z〉).

opFb(〈x , y〉, 〈z〉) is defined with one rule per case.

The value analysis computes the precondition pre(opbF) and the

postcondition post(opbF) as for any other predicate

Operationpre

φ1

φ3

φ2

post

Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27th 2011 15 / 19

Page 18: Handling non-linear operations in the value analysis of Costacosta.fdi.ucm.es/papers/costa/AlonsoAG11-slides.pdf · int log2 ( int x)f int l = 0; int y = 1; while (x>y)f y = y * 2;

Analyzing logB by abstract program transformation

Example (Program transformation of logB )

// Pre : x>0,b>1i n t logB ( i n t b , i n t x ) {

i n t l = 0 ;i n t y = 1 ;whi le ( x>y ) {

y = y * b;

l = l + 1 ;}return l ;

}

logB(〈b, x〉, 〈l〉)←{l0 = 0} ,{y0 = 1} ,logBw (〈b, x , l0, y0〉, 〈l〉).

logBw (〈b, x , l1, y1〉, 〈l2〉)←{x > y1} ,op∗(〈y1,b〉, 〈y2〉),{l2 = l1 + 1} ,logBw (〈b, x , l2, y2〉, 〈l2〉).

logBw (〈b, x , l , y1〉, 〈l〉)←{x ≤ y1} .

Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27th 2011 16 / 19

Page 19: Handling non-linear operations in the value analysis of Costacosta.fdi.ucm.es/papers/costa/AlonsoAG11-slides.pdf · int log2 ( int x)f int l = 0; int y = 1; while (x>y)f y = y * 2;

The solution

Example (Value analysis of op∗ )

The precondition of op∗(〈y1, b〉) is op∗(〈y1, b〉) J {y1 ≥ 1,b ≥ 2}

op∗(〈y1, b〉, 〈y2〉) ← {y1 = 0} , . . .op∗(〈y1, b〉, 〈y2〉) ← {b = 0} , . . .op∗(〈y1, b〉, 〈y2〉) ← {b = 1} , . . .op∗(〈y1,b〉, 〈y2〉) ← {y1 = 1} , ← {y2 = b} .op∗(〈y1,b〉, 〈y2〉) ← {b ≥ 2, y1 ≥ 2} , ← {y2 ≥ 2y1, y2 ≥ 2b} .op∗(〈y1, b〉, 〈y2〉) ← {y1 ≥ 2, b ≤ −2} , . . .op∗(〈y1, b〉, 〈y2〉) ← {y1 ≤ −2, b ≥ 2} , . . .op∗(〈y1, b〉, 〈y2〉) ← {y1 ≤ −2, b ≤ −2} , . . .

The value analysis computes the postcondition

op∗(〈y1, b〉, 〈y2〉) J {y2 = b} t {y2 ≥ 2y1, y2 ≥ 2b} ={y2 ≥ 2y1, y2 ≥ b}

Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27th 2011 17 / 19

Page 20: Handling non-linear operations in the value analysis of Costacosta.fdi.ucm.es/papers/costa/AlonsoAG11-slides.pdf · int log2 ( int x)f int l = 0; int y = 1; while (x>y)f y = y * 2;

The solution

Example (Bounding the iterations of logB)

The precondition of op∗(〈y1, b〉) is op∗(〈y1, b〉) J {y1 ≥ 1,b ≥ 2}The postcondition is op∗(〈y1, b〉, 〈y2〉) J {y2 ≥ 2y1, y2 ≥ b}Using these, we can infer the transition

〈b, x , l1, y1〉 → 〈b, x , l2, y2〉 J {y1 ≥ 1,b ≥ 2}u{x > y1, l2 = l1 + 1}u{y2 ≥ 2y1, y2 ≥ b}

This transition can be proven to have O(log(x − y)) iterations

Costa can now infer that logB has a logarithmic cost

Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27th 2011 18 / 19

Page 21: Handling non-linear operations in the value analysis of Costacosta.fdi.ucm.es/papers/costa/AlonsoAG11-slides.pdf · int log2 ( int x)f int l = 0; int y = 1; while (x>y)f y = y * 2;

Conclusions

Nonlinear operations are difficult to analyze

We propose to use a program transformation for handling nonlinearoperations like z = x ∗ y in static analysis

This technique increases precision by producing more accurateabstract informationand it’s scalable because it still uses linear constraints

This solution is also applicable to other operations: integer quotient(/) and remainder (%), and bitwise operations (&, |, <<,>>,>>>)

Alonso,Arenas,Genaim (DSIC,UCM) Handling nonlinear operations in Costa March 27th 2011 19 / 19