Datenflussanalyse - Klassisch Seminar “Progammanalyse” (SS 2009) Referent: Lorenz Schauer...
-
Upload
mareke-brahms -
Category
Documents
-
view
213 -
download
0
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!