Folien VL-04 zusammengefasst
This commit is contained in:
parent
b280f71904
commit
5a67af60ec
BIN
verfahren.pdf
BIN
verfahren.pdf
Binary file not shown.
139
verfahren.tex
139
verfahren.tex
@ -135,11 +135,142 @@
|
|||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\section{Datenflussanalyse}
|
\section{Datenflussanalyse}
|
||||||
\subsection{Datenabhängigkeiten}
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Schreiben vor Lesen:
|
\item Datenabhängigkeiten: \begin{itemize}
|
||||||
\item Schreiben vor Schreiben: Ausgabeabhängigkeit
|
\item Schreiben vor Lesen:
|
||||||
\item Lesen vor Schreiben: Anti-Abhängigkeit
|
\item Schreiben vor Schreiben: Ausgabeabhängigkeit
|
||||||
|
\item Lesen vor Schreiben: Anti-Abhängigkeit
|
||||||
|
\end{itemize}
|
||||||
|
\item Starke Variablendefinition: sichere Zuweisung zu einer Variablen
|
||||||
|
\item Schwache Variablendefinition: mögliche Zuweisung zu einer Variablen (etwa über Zeiger oder Referenz, die möglicherweise auf Variable zeigen)
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\subsection{Berechnung von Datenflusswissen}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Funktion pro Grundblock: \begin{itemize}
|
||||||
|
\item Eingabe: bei Vorwärtsproblem (Rückwärtsproblem) Datenflusswissen der Vorgängerknoten (Nachfolgerknoten)
|
||||||
|
\item Vorverarbeitung: logische Operationen oder Mengenoperationen \begin{itemize}
|
||||||
|
\item sicher (must): Eigenschaft muss auf allen Eingangskanten erfüllt sein
|
||||||
|
\item möglich (may): Eigenschaft muss auf mindestens einer Eingangskante erfüllt sein
|
||||||
|
\end{itemize}
|
||||||
|
\item Ausgabe: auf Eingabe und in Grundblock enthaltenen Befehlen basierendes, aktualisiertes Datenflusswissen
|
||||||
|
\end{itemize}
|
||||||
|
\item Iterativer Fixpunkt-Algorithmus für Vorwärtsproblem: optimal Besuch in Reihenfolge des spannenden Tiefenbaums \begin{algorithmic}[]
|
||||||
|
\State $\mathrm{in}(\mathrm{Entry}) \gets \mathrm{Init}$
|
||||||
|
\ForAll{$n \in N \setminus \lbrace \mathrm{Entry}\rbrace$}
|
||||||
|
\State $\mathrm{in}(n) \gets \bot$
|
||||||
|
\EndFor
|
||||||
|
\State $\mathrm{WL} \gets N\setminus \lbrace \mathrm{Entry}\rbrace$
|
||||||
|
\While{$\mathrm{WL} \neq \emptyset$}
|
||||||
|
\State $B \gets \mathrm{pop}(\mathrm{WL})$
|
||||||
|
\State $\mathrm{out} \gets f_B(\mathrm{in}(B))$
|
||||||
|
\ForAll{$B' \in \mathrm{Succ}(B)$}
|
||||||
|
\State $\mathrm{in}(B') \gets \mathrm{in}(B') \sqcup \mathrm{out}$
|
||||||
|
\If{$\mathrm{out} \neq \mathrm{out}(B)$}
|
||||||
|
\State $\mathrm{WL} \gets \mathrm{WL} \cup \lbrace B'\rbrace$
|
||||||
|
\State $\mathrm{out}(B) \gets \mathrm{out}$
|
||||||
|
\EndIf
|
||||||
|
\EndFor
|
||||||
|
\EndWhile
|
||||||
|
\end{algorithmic}
|
||||||
|
\item Probleme bei Verwendung von Bitvektoren:\begin{itemize}
|
||||||
|
\item Transformation erfordert komplettes Neuberechnen
|
||||||
|
\item Bitvektoren oft zu groß für jeweilige Nutzungsstelle
|
||||||
|
\end{itemize}
|
||||||
|
\item Alternative Datenstrukturen: \begin{itemize}
|
||||||
|
\item Definitions-Nutzungs-Graph für erreichbare Nutzungen
|
||||||
|
\item Nutzungs-Definitions-Graph für erreichenden Definitionen
|
||||||
|
\item Variablen-Netz als Vereinigung aller sich schneidenden DU-Graphen
|
||||||
|
\item Single Static-Assignment (SSA)
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\subsection{Typische Datenflussprobleme}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Erreichende Definitionen: \begin{itemize}
|
||||||
|
\item mindestens ein Pfad, auf dem Variable nicht erneut schwach definiert wird
|
||||||
|
\item Optimierungen: \begin{itemize}
|
||||||
|
\item Keine erreichende Definition $\rightarrow$ Variable nicht initialisiert
|
||||||
|
\item Genau eine oder gleiche Definition $\rightarrow$ Konstantenweitergabe oder Kopienfortschreibung möglich
|
||||||
|
\item Alle Variablen nur außerhalb einer Schleife definiert $\rightarrow$ Ausdruck schleifeninvariant
|
||||||
|
\end{itemize}
|
||||||
|
\item Umsetzung: \begin{itemize}
|
||||||
|
\item Eine Bitposition pro Variablendefinition
|
||||||
|
\item Setzen bei Definition der Variable
|
||||||
|
\item Zurücksetzen bei mindestens schwacher Definition
|
||||||
|
\item Anfangsbelegung: false
|
||||||
|
\item Vorverarbeitung: oder
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
\item Konstantenweitergabe: \begin{itemize}
|
||||||
|
\item Eine Bitposition plus Wert pro Variable
|
||||||
|
\item Setzen von Bit und Wert bei konstanter Definition
|
||||||
|
\item Zurücksetzen von Bit bei mindestens schwacher oder nicht konstanter Definition
|
||||||
|
\item Anfangsbelegung: false, ?
|
||||||
|
\item Vorverarbeitung: und sowie Wertgleichheit
|
||||||
|
\end{itemize}
|
||||||
|
\item Kopienfortschreibung: \begin{itemize}
|
||||||
|
\item Eine Bitposition pro aus Kopieren entstandener Wergleichtheitsbeziehung
|
||||||
|
\item Setzen bei Kopieroperation
|
||||||
|
\item Zurücksetzen wenn Original oder Kopie mindestens schwach definiert wird
|
||||||
|
\item Anfangsbelegung: false
|
||||||
|
\item Vorverarbeitung: und
|
||||||
|
\end{itemize}
|
||||||
|
\item Verfügbare Ausdrücke: \begin{itemize}
|
||||||
|
\item auf allen Pfaden von Entry-Knoten aus wird Ausdruck bestimmt und verwendete Variablen anschließend nicht mehr schwach definiert
|
||||||
|
\item Optimierungen: \begin{itemize}
|
||||||
|
\item Elimination gleicher Teilausdrücke
|
||||||
|
\item Wiederverwendung statt Neuberechnung
|
||||||
|
\end{itemize}
|
||||||
|
\item Umsetzung: \begin{itemize}
|
||||||
|
\item Eine Bitposition pro wertnummeriertem (Teil-)Ausdruck
|
||||||
|
\item Setzen wenn Ausdruck ausgewertet wird
|
||||||
|
\item Zurücksetzen wenn vorkommende Variable mindestens schwach definiert wird
|
||||||
|
\item Anfangsbelegung: false
|
||||||
|
\item Vorverarbeitung: und sowie Ausdruck muss auf allen Pfaden verfügbar sein
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
\item Lebendige Variablen: \begin{itemize}
|
||||||
|
\item lebendig in Knoten $D$, wenn es einen Pfad von $D$ zum Exit-Knoten gibt, auf der die Variable ohne vorherige Redefinition schwach benutzt wird; sonst tot
|
||||||
|
\item Optimierungen: \begin{itemize}
|
||||||
|
\item Tote Variablen müssen nicht ausgerechnet werden
|
||||||
|
\item Weniger Registerdruck
|
||||||
|
\item Elimination redudanter Schleifenlaufvariablen nach der Schleife
|
||||||
|
\end{itemize}
|
||||||
|
\item Umsetzung: \begin{itemize}
|
||||||
|
\item Eine Bitposition pro Variable
|
||||||
|
\item Setzen bei Verwendung der Variable
|
||||||
|
\item Zurücksetzen bei starker Redefinition
|
||||||
|
\item Anfangsbelegung: false
|
||||||
|
\item Vorverarbeitung: oder
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
\item Erreichbare Nutzungen: \begin{itemize}
|
||||||
|
\item Alle Nutzungen einer Variable durch Bestimmen der Pfade, auf denen Variable ohne vorherige Redefinition verwendet wird
|
||||||
|
\item Zweck: Hilfreich für Lebendigkeitsspannen und Registerallokation
|
||||||
|
\end{itemize}
|
||||||
|
\item Vorhersehbare Ausdrücke: \begin{itemize}
|
||||||
|
\item auf allen Pfaden zum Exit-Knoten wird Ausdruck bestimmt und verwendete Variablen werden nicht vorher schwach redefiniert
|
||||||
|
\item Optimierungen: \begin{itemize}
|
||||||
|
\item Vorziehen der Ausdrucksberechnung zur Verkleinerung der Code-Größe
|
||||||
|
\item Geringerer Registerdruck in folgenden Zweigen
|
||||||
|
\end{itemize}
|
||||||
|
\item Umsetzung: \begin{itemize}
|
||||||
|
\item Eine Bitposition pro (Teil-)Ausdruck
|
||||||
|
\item Setzen bei Auswertung des Audrucks
|
||||||
|
\item Zurücksetzen bei mindestens schwacher Redefinition einer der verwendeten Variablen
|
||||||
|
\item Anfangsbelegung: false
|
||||||
|
\item Vorverarbeitung: und
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\section{Wertnummerierung in Grundblock}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Post-Order-Traversierung des Ausdrucksbaums
|
||||||
|
\item Jede referenzierte Variable bekommt eindeutige Id
|
||||||
|
\item Kombination aus Operator und beiden Argumenten bekommt entweder frische Id oder bei Duplikat (auch kommutativ) bereits verwendete
|
||||||
|
\item Gleiche Ids $\Leftrightarrow$ gleicher Ausdruck
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\section{Aliasanalyse}
|
\section{Aliasanalyse}
|
||||||
|
Loading…
Reference in New Issue
Block a user