Datenflussanalyse - Klassisch Seminar “Progammanalyse” (SS 2009) Referent: Lorenz Schauer...

Post on 06-Apr-2016

213 views 0 download

Tags:

Transcript of Datenflussanalyse - Klassisch Seminar “Progammanalyse” (SS 2009) Referent: Lorenz Schauer...

Datenflussanalyse - KlassischSeminar “Progammanalyse” (SS 2009)

Referent: Lorenz SchauerVortrag: 24.06.2009

Folie 2

Agenda

Agenda

- Einleitung

- Einführung in die Sprache WHILE

- Die Intraprozedurale Analyse- Available Expressions Analysis- Reaching Definitions Analysis- Very Busy Expressions Analysis- Live Variables Analysis

- Live Variables Analysis - Richtigkeit

Folie 3

Einleitung

Was bedeutet “Datenflussanalyse”?

Ermittlung der Zusammenhänge zwischen einzelnen Stellen im Programm und den darin berechneten Werten.

Typische Fragen sind:o Was genau wird in dem Programmabschnitt berechnet?o Wie und wo wird eine bestimmte Variable berechnet?o Welche Werte kann sie annehmen?o Welche Befehle beinflussen welche Variable zu welchem Zeitpunkt?

Folie 4

Einleitung

Datenflussanalyse – wie und wozu?

Wozu?- Primär zur Codeoptimierung - Gegebenenfalls zur Lösung von entstandenen Problemen

Wie? - Programmcode analysieren und verstehen (Hilfsmittel: Flussgraph) - Datenflussprobleme erkennen und Gleichung aufstellen - Code optimieren bzw. Probleme lösen

Folie 5

Einführung in WHILE

Die Sprache: WHILE

- Imperative Sprache

- Programmcode glieder sich in Blöcke - Jeder Block besitzt ein eindeutiges Etikett (Label)

- Bezeichnen Zuweisungen und boolsche Bedingungen- Haben intern keinen Datenfluss

Folgende Elemente werden definiert:

o Zuweisung [x := a] o Skip [skip]o Bedingung if [b] then S1 else S2 o Sequenz S1 ; S2

o While-Schleife while [b] do S

l

l

l

l

Folie 6

Intraprozedurale Analyse

Intraprozedurale Analyse

- Beschäftigt sich mit Elementaraussagen- Gliedert sich in mehrere Datenflussanalysen (spätere Folien)

- Unterscheidet Vorwärts- und Rückwärtsanalysen

Flussfunktionen (Um Flussgraph aufzustellen)

Fluss-Funktion: flow: Stmt P(Lab x Lab)Rückflussfunktion: flow : Stmt P(Lab x Lab)

Beschreiben den Fluss zwischen den Lables der Aussagen

R

Folie 7

Intraprozedurale Analyse - Flussfunktion

Wie sieht der Flussgraph von folgendem Code aus ?

Die Flussfunktion liefert folgende Menge an Werten:

{(1,2),(2,3),(3,4),(4,2)}

Damit können wir den nachfolgenden Graphen zeichnen…

)]1:[;]*:([]0[;]1:[ 4321 xxyzzdoxwhilez

Folie 8

Intraprozedurale Analyse - Flussgraph

[z:=1]

[x>0]

[z:=z*y]

[x:=x-1]

no

yes

)]1:[;]*:([]0[;]1:[ 4321 xxyzzdoxwhilez

Folie 9

Available Expressions Analysis

Available Expressions Analysis

o Analyse Algorithmus (Vorwärtsanalyse)

o Beschreibt die Verfügbarkeit einzelner Ausdrücke an bestimmten Programmstellen

o Frage: Welche Ausdrücke / Werte sind an einer bestimmten

Programmstelle gültig?

o Ziel: Codeoptimierung

o Beispiel: )]:[;]1:([][;]*:[;]:[ 54321 baxaadobaywhilebaybax

Folie 10

Available Expressions Analysis

Definition von kill- und gen-Funktionen

Kill-Funktion: Ausdruck ist killed, wenn eine der Variablen verändert wird (Innerhalb des Blocks).

killAE : Blocks P(AExp)

Gen-Funktion: Ausdruck wird im Programmbereich generiert und

keine Variable davon innerhalb des Blocks verändert.

genAE : Blocks P(AExp)

Folie 11

Available Expressions Analysis

kill- und gen-Funktionen bei AEA

)}'(|'{)]:([ * aFVxAExpaaxkill lAE

{})]([ lAE skipkill

{})]([ lAE bkill

)()]([

{})]([

)}'(|)('{)]:([

bAExpbgen

skipgen

aFVxaAExpaaxgen

lAE

lAE

lAE

Folie 12

Available Expressions Analysis

Entry- & Exit-Funktionen

Durch diese beiden Funktionen wird die Analyse bestimmt:

)(:, ** AExpPLabAEAE exitentry

)}(),'(|)'({)(

{})(

*SflowlllAElAE

lAE

exitentry

entry

)( *Sinitl Falls:

)(

)())(\)(()(

*SblocksB

BgenBkilllAElAEl

lAE

lAEentryexit

Folie 13

Available Expressions Analysis – Beispiel1

Beispiel 1:

o Nur Block 1 generiert den Ausdruck: {x+y}o Andere generieren / killen keine Ausdrücke

o Der Flussgraph sieht wie folgt aus:

''' ][][;]:[ lll skipdotruewhileyxz

[…]

[…]

[…]

l

'l

''l

no

yes

Folie 14

Available Expressions Analysis – Beispiel1

Gesucht wird: größte Lösung der Gleichung für AEentry

Bestimmen der AE-Gleichungen:

)''()''(

)'()'(

}{)()(

)'()''(

)''()()'(

{})(

lAElAE

lAElAE

yxlAElAE

lAElAE

lAlAElAE

lAE

entryexit

entryexit

entryexit

exitentry

exitexitentry

entry

''' ][][;]:[ lll skipdotruewhileyxz

Folie 15

Available Expressions Analysis – Beispiel1

Wir erhalten:

Deutung:

o Es gibt 2 Lösungen für die Gleichung:- {x+y}- die leere Menge

o Informativ aber nur {x+y}

o {x+y} stellt die größte Lösung der Gleichung dar.

=> Der Ausdruck {x+y} ist jedesmal verfügbar, wenn

l’ betreten wird (hier: Schleifeneintritt)

)'(}{)'( lAEyxlAE entryentry

Folie 16

Available Expressions Analysis – Beispiel2

Beispiel 2:

Aufstellen der kill & gen Funktionen:

----------------------------------------------------

)]:[;]1:([][;]*:[;]:[ 54321 baxaadobaywhilebaybax

54321l

{}}1,*,{

{}{}{}

)(

ababa

lkillAE

}{{}

}{}*{}{

)(

ba

bababalgenAE

Folie 17

Available Expressions Analysis – Beispiel2

Aufstellen der AE-Funktionen:

)4()5(

)3()4(

)5()2()3(

)1()2(

{})1(

exitentry

exitentry

exitexitentry

exitentry

entry

AEAE

AEAE

AEAEAE

AEAE

AE

}{)5()5(

}1,*,{\)4()4(

}{)3()3(

}*{)2()2(

}{)1()1(

baAEAE

ababaAEAE

baAEAE

baAEAE

baAEAE

entryexit

entryexit

entryexit

entryexit

entryexit

)]:[;]1:([][;]*:[;]:[ 54321 baxaadobaywhilebaybax

Folie 18

Available Expressions Analysis – Beispiel2

Als Ergebnis erhält man folgende Tabelle:

----------------------------------------------

54321l

{}}{}{}{

{}

)(

bababa

lAEentry

}{{}

}{}*,{

}{)(

ba

bababa

balAEexit

)]:[;]1:([][;]*:[;]:[ 54321 baxaadobaywhilebaybax

[x:=a+b]

[y:=a*b]

[y>a+b]

[a:=a+1]

[x:=a+b]

Folie 19

Available Expressions Analysis – Beispiel2

Deutung:

o Der Ausdruck a wird innerhalb der Schleife neu definiert

o Der Ausdruck {a+b} ist immer am Schleifeneingang verfügbar

o {a*b} nur beim ersten Schleifeneingang verfügbar wird vor dem nächsten Durchlauf gekilled

Folie 20

Reaching Definition Analysis

Reaching Definition Analysis

o sehr ähnlich zur AE-Analyse (Vorwärtsanalyse)

o Frage: Welche Definition/Zuweisung ist bei einer bestimmten Stelle im Programm gültig?

o Ziele: Kenntnis über die jeweilige Gültigkeit einer Zuweisung

o Beispiel:

Nach Label 2: (x,1),(y,2)Nach Label 3: (x,1),(y,2),(a,4),(x,5)

)]:[;]1:([][;]*:[;]:[ 54321 baxaadobaywhilebaybax

Folie 21

Reaching Definition Analysis - Vorgehensweise

Vorgehensweise

o Definieren der killRD, genRD, RDentry und RDexit funktionen:

{})]([

{})]([

)},{()]:([

{})]([

{})]([

)}(__|)',{(?)},{()]:([ *'

lRD

lRD

lRD

lRD

lRD

llRD

bgen

skipgen

lxaxgen

bkill

skipkill

SxtoasgmBlxxaxkill

Folie 22

Reaching Definition Analysis - Vorgehensweise

)(

)())(\)(()(

)}(),'(|)'({

)()}(|?),{()(

*

*

**

SblocksBwo

BgenBkilllRDlRD

SflowlllRD

SinitlifSFVxxlRD

l

lRD

lRDentryexit

entry

entry

Folie 23

Reaching Definition Analysis - Beispiel

o Funktionen am Programmteil anwenden:

Beispiel:

Es entsteht folgende Tabelle der kill & gen Funktionen:

-------------------------------------------------------------------------12345

)]1:[;]*:([]1[;]1:[;]5:[ 54321 xxyxydoxwhileyx

)}5,(),1,(?),,{()}4,(),2,(?),,{(

{})}4,(),2,(?),,{(

)}5,(),1,(?),,{()(

xxxyyy

yyyxxx

lkillRD

)}5,{()}4,{(

{})}2,{()}1,{(

)(

xy

yx

lgenRD

Folie 24

Reaching Definition Analysis - Beispiel

Damit ergibt sich für die RD Funktionen (1):

_______________________________________________________12345 )4(

)3()5()2(

)1(?)},(?),,{(

)(

exit

exit

exitexit

exit

entry

RDRD

RDRDRD

yx

lRD

)}5,{()})5,(),1,(?),,{(\)5((

)}4,{()})4,(),2,(?),,{(\)4((

)3(

)}2,{()})4,(),2,(?),,{(\)2((

)}1,{()})5,(),1,(?),,{(\)1(()(

xxxxRD

yyyyRD

RD

yyyyRD

xxxxRDlRD

entry

entry

entry

entry

entry

exit

)]1:[;]*:([]1[;]1:[;]5:[ 54321 xxyxydoxwhileyx

Folie 25

Reaching Definition Analysis - Beispiel

Damit ergibt sich für die RD Funktionen (2):

_______________________________________________________123

45 )}4,{()})4,(),2,(?),,{(\)4((

)3(

)}5,{()})5,(),1,(?),,{(\)5((

)}2,{()})4,(),2,(?),,{(\)2((

)}1,{()})5,(),1,(?),,{(\)1((?)},(?),,{(

)(

yyyyRD

RD

xxxxRD

yyyyRD

xxxxRDyx

lRD

entry

entry

entry

entry

entry

entry

)}5,{()})5,(),1,(?),,{(\)4(()}4,{()})4,(),2,(?),,{(\)3((

)5()2()}2,{()})4,(),2,(?),,{(\)1((

)}1,{()})5,(),1,(?),,{(\?)},(?),,({()(

xxxxRDyyyyRD

RDRDyyyyRDxxxxyx

lRD

exit

exit

exitexit

exit

exit

)]1:[;]*:([]1[;]1:[;]5:[ 54321 xxyxydoxwhileyx

Folie 26

Reaching Definition Analysis - Beispiel

Damit ergibt sich für die RD Funktionen (3):

_______________________________________________________123

4

5 )}4,{()})4,(),2,(?),,{(\)3((

)3()}5,{()}4,{(

)})4,(),2,(?),,(),5,(),1,(?),,{(\)4(()}2,{()})4,(),2,(?),,{(\)}1,(?),,({(

)}1,{()})5,(),1,(?),,{(\?)},(?),,({(?)},(?),,{(

)(

yyyyRD

RDxy

yyyxxxRDyyyyxyxxxxyx

yx

lRD

entry

entry

entry

entry

)}5,{()})5,(),1,(?),,{(\)4(()}4,{(

)})4,(),2,(?),,{(\)5()}2,(),1,({(

)5()}2,(),1,{()}2,{()})4,(),2,(?),,{(\)}1,(?),,({(

)}1,(?),,{()(

xxxxRDy

yyyRDyx

RDyxyyyyxy

xylRD

exit

exit

exit

exit

)]1:[;]*:([]1[;]1:[;]5:[ 54321 xxyxydoxwhileyx

Folie 27

Reaching Definition Analysis - Beispiel

Damit ergibt sich für die RD Funktionen (4):

_______________________________________________________12345 )}4,{()})4,(),2,(?),,{(\)3((

)}5,(),4,(),2,(),1,{()}5,(),4,(),2,(),1,{(

)}1,(?),,{(?)},(?),,{(

)(

yyyyRDxyyxxyyx

xyyx

lRD

entry

entry

)}5,{()})5,(),1,(?),,{(\)4(()}5,(),4,(),1,{(

)5()}2,(),1,{()}2,(),1,{()}1,(?),,{(

)(

xxxxRDxyxRDyx

yxxylRD

exit

exit

exit

)]1:[;]*:([]1[;]1:[;]5:[ 54321 xxyxydoxwhileyx

Folie 28

Reaching Definition Analysis - Beispiel

Damit ergibt sich für die RD Funktionen (5):

_______________________________________________________12345

Somit sind alle RD-Funktionen aufgelöst.

Deutung: Man erkennt nun, welche Zuweisung an welcher Stelle existiert!

)}5,(),4,(),1,{()}5,(),4,(),2,(),1,{()}5,(),4,(),2,(),1,{(

)}1,(?),,{(?)},(?),,{(

)(

xyxxyyxxyyx

xyyx

lRDentry

)}5,(),4,{()}5,(),4,(),1,{(

)}5,(),4,(),2,(),1,{()}2,(),1,{()}1,(?),,{(

)(

xyxyx

xyyxyxxylRDexit

)]1:[;]*:([]1[;]1:[;]5:[ 54321 xxyxydoxwhileyx

Folie 29

Very Busy Expressions Analysis

Very Busy Expressions Analysis

o Ein Ausdruck wird als „very busy“ bezeichnet, wenn:- am Ende eines Labels sichergestellt ist, dass er im

weiteren Verlauf auf jeden Fall gebraucht wird.

=> Wichtig: Der Ausdruck muss verwendet bzw. betrachtet werden

bevor einer seiner Werte verändert wird!

o Es handelt sich um eine Rückwärtsanalyse

o Ziel: Codeoptimierung

Folie 30

Very Busy Expressions Analysis

Veranschaulichung und Analyse am Beispiel:

o Die Ausrücke {a-b} und {b-a} sind „very busy“ zum Zeitpunkt 1

o Um das Programm zu analysieren müssen wieder alle Funktionen aufgestellt werden!

)]:[;]:([)]:[;]:([][ 54321 baxabyelsebayabxthenbaif

Folie 31

Very Busy Expressions Analysis

o Hier gleich angewendet (allgemeine Formeln nachlesen!)

o kill & gen Funktionen:

o VB Funktionen:

}{{}5}{{}4}{{}3}{{}2

{}{}1)()(

baabbaab

lgenlkilll VBVB

{}}{5)5(}{)4(4

{}}{3)3(}{)2(2

)4()2()1(1)()(

baVBabVB

baVBabVB

VBVBVBlVBlVBl

entryexit

entryexit

entryentryexit

exitentry

Folie 32

Very Busy Expressions Analysis

Nach Vereinfachung erhält man:

o Deutung: Aus dieser Tabelle lässt sich nun jeder Ausdruck, der zu einem bestimmten Zeitpunkt „very busy“ ist, ablesen.

{}}{5}{},{4

{}}{3}{},{2

},{},{1)()(

babaabba

babaabbaabbaabbalVBlVBl exitentry

Folie 33

Live Variables Analysis

Live Variables Analysis

o Eine Variable wird als „live“ bezeichnet, wenn:- sie am Ende eines Labels einen Wert enthält, der

später benötigt werden könnte.

o Rückwärtsanalyse

o Verwendung: - Dead code elimination

(Variable nicht live – Zuweisungsblock löschen) - Registerzuweisung

Folie 34

Live Variables Analysis

Beispiel:

Frage: Welche variablen sind zu welchem Zeitpunkt „live“?

Antwort: x nach Label 1 ist nicht livex nach Label 3 livey nach Label 2 live

=> Erste Zuweisung ist Redundant, kann also gelöscht werden.

7654321 ]:[);]*:[]:[][(;]1:[;]4:[;]2:[ zxyyzelseyzthenxyifxyx

Folie 35

Live Variables Analysis

Definitionen der kill, gen und LV Funktionen:

)()())(\)(()(

)}(),'(|)'({)({}

)(

)()]([

{})]([

)()]:([

{})]([

{})]([

}{)]:([

*

*

*

SblocksBwoBgenBkilllLVlLV

SflowlllLVSfinallfalls

lLV

aFVbgen

skipgen

aFVaxgen

bkill

skipkill

xaxkill

llLV

lLVexitentry

Rentry

exit

lLV

lLV

lLV

lLV

lLV

lLV

Folie 36

Live Variables Analysis

Analyse nach Aufstellen der gen, kill und LV Funktionen ergibt folgendes:

}{}{7}{}{6}{}{5},{4

}{3}{2}{1

)()(

zxyzyzyx

xyx

lgenlkilll LVLV

}{7)7(}{}){\)6((6)7(}{}){\)5((5

)6()5(},{)4(4)4(}{\)3(3)3(}{\)2(2)2(}{\)1(1)()(

zLVyzLVLVyzLV

LVLVyxLVLVxLVLVyLVLVxLV

lLVlLVl

entryexit

entryexit

entryentryexit

entryexit

entryexit

entryexit

exitentry

Folie 37

Live Variables Analysis

Durch einsetzten und vereinfachen erhält man wieder die Ergebnistabelle:

Deutung: - Alle „live“-Variablen bzgl ihrem Programmpunkt ablesbar - Am Programmende sind alle Variablen tot – nicht „live“

{}}{7}{}{6}{}{5}{},{4},{}{3

}{{}2{}{}1

)()(

zzyzyyyxyxyy

lLVlLVl exitentry

Folie 38

Live Variables Analysis - Richtigkeit

Die Richtigkeit der Live Variables Analysis

o Um Richtigkeit zu zeigen, benutzen wir folgendes Theorem:

1.

2.'2))((

'1

'22

'2

2))((1'11

'2))((

'1

'2

'2

'2

2))((1'1

'1

~,:

~,

~,,:

~,,

'

SinitX

SinitN

SinitN

SinitN

undS

dannundSfalls

undundSS

dannundSSfalls

Folie 39

Live Variables Analysis - Richtigkeit

Veranschaulichung am Beispiel:

, V1 = {y,z} und V2 = {x}

o

o

o

o Nach Theorem und folgt, dass wenn V2 nach dem Block live ist, muss V1 davor live sein.

1,]:[ lzyx

)()()()(~ 2121211 zzyyV

)()(~ 21221 xxV

'22

'11 ,]:[,]:[ ll zyxzyx

'22

'1211 ~~ VV

Folie 40

Servus

Vielen Dank für die Aufmerksamkeit!