Folien VL-09 zusammengefasst
This commit is contained in:
parent
66b3b16f04
commit
927a0edfa1
BIN
verfahren.pdf
BIN
verfahren.pdf
Binary file not shown.
@ -488,12 +488,90 @@
|
|||||||
\end{itemize}
|
\end{itemize}
|
||||||
\end{enumerate}
|
\end{enumerate}
|
||||||
|
|
||||||
|
\section{Schleifen}
|
||||||
|
\subsection{Schleifeninvariante Anweisungen}
|
||||||
|
\begin{itemize}
|
||||||
|
\item schleifeninvariante Instruktion: alle Operanden $v$ sind \begin{itemize}
|
||||||
|
\item konstant oder
|
||||||
|
\item nur außerhalb der Schleife berechnet oder
|
||||||
|
\item innerhalb der Schleife in \emph{einer} schleifeninvarianten Instruktion berechnet
|
||||||
|
\end{itemize}
|
||||||
|
\item Auffinden schleifeninvarianter Instruktionen: \begin{enumerate}
|
||||||
|
\item Identifikation natürlicher Schleifen
|
||||||
|
\item Berechnung der erreichenden Definitionen
|
||||||
|
\item Konstantenfaltung
|
||||||
|
\item Markierung aller konstanten Ausdrücke und Variablen, sowie alle Markierung, deren erreichende Definitionen außerhalb der Schleife liegen, als schleifeninvariant
|
||||||
|
\item Solange neue Markierungen auftreten: alle Instruktionen/Variablen als schleifeninvariant markieren, wenn \begin{itemize}
|
||||||
|
\item sie konstant sind oder
|
||||||
|
\item wenn alle erreichenden Definitionen außerhalb der Schleife liegen oder
|
||||||
|
\item wenn genau eine erreichende Definition existiert und diese als schleifeninvariant markiert ist
|
||||||
|
\end{itemize}
|
||||||
|
\end{enumerate}
|
||||||
|
\item Herausziehen von schleifeninvarianten (Teil-)Ausdrücken vor den Schleifenkopf unter Beachtung von Seiteneffekten/Fehlern immer möglich
|
||||||
|
\item Auswahl von herausziehbaren Zuweisungen: \begin{enumerate}
|
||||||
|
\item Berechnung der Dominanz, erreichenden Definitionen und Anwendung von Konstantenfaltung
|
||||||
|
\item Berechnung der invarianten Instruktionen
|
||||||
|
\item Bestimmung der Schleifenausgänge, also Knoten, die KFG-Nachfolger außerhalb der natürlichen Schleife besitzen
|
||||||
|
\item Alle Anforderungen an Zuweisungen müssen für Herausziehbarkeit gelten:\begin{itemize}
|
||||||
|
\item schleifeninvariant
|
||||||
|
\item in Grundblock, der alle Schleifenausgänge dominiert und alle die Variable nutzenden Blöcke strikt dominiert
|
||||||
|
\item einzige Zuweisung zu Variable in der ganzen Schleife
|
||||||
|
\end{itemize}
|
||||||
|
\item Herausziehen vor den Schleifenkopf in Breitensuchreihenfolge zur Bewahrung der Datenabhängigkeiten zwischen herausgezogenen Zuweisungen
|
||||||
|
\end{enumerate}
|
||||||
|
\item Sonderfall while-Schleife: Schleifenausgang wird von keinem anderen Grundblock in der Schleife dominiert, also keine herausziehbaren Zuweisungen in der Schleife $\rightarrow$ erst Umbau zu do-while-Schleife
|
||||||
|
\item Optimierung bei invariantem Test: Generierung einer eigenen Schleife für jeden Fall
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
\section{Induktionsvarianten und schleifeninvarianter Code}
|
\subsection{Induktionsvariablen}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Induktionsvariable: Variable, die bei jeder Schleifeniteration um konstanten Wert inkrementiert oder dekrementiert wird
|
||||||
|
\item Einfache Induktionsvariable: Variable $x$, die nur durch $x = x \pm c$ mit schleifeninvariantem $c$ verändert wird
|
||||||
|
\item Abhängige Induktionsvariable: Variable $y$, die in der Schleife durch $y = a \cdot x \pm b$ mit schleifeninvarianten $a$ und $b$ als lineare Funktion aus Induktionsvariable $x$ berechnet wird
|
||||||
|
\item Berechnung der Familie einer einfachen Induktionsvariable $x$: Menge der Induktionsvariablen $y$, die mit linearer Funktion $y = c_1 \cdot x \pm c_2$ von $x$ mit schleifeninvarianten $c_1$ und $c_2$ abhängen: \begin{itemize}
|
||||||
|
\item Zuweisung der Form $y = c_1 \cdot x \pm c_2$
|
||||||
|
\item Zuweisung der Form $y = c_1 \cdot z \pm c_2$, wobei $z \in \mathrm{Familie}(x)$ und \begin{itemize}
|
||||||
|
\item keine Veränderung von $x$ zwischen Zuweisung zu $z$ und Zuweisung zu $y$
|
||||||
|
\item keine von außerhalb der Schleife erreichende Definition von $z$ erreicht Zuweisung zu $y$
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
\item Berechnungen der Tripel $(x, c_1, c_2)$ für alle Induktionsvariablen $y$ einer Schleife:\begin{enumerate}
|
||||||
|
\item Berechnung von Schleifeninvarianz und erreichenden Definitionen
|
||||||
|
\item Bestimmung aller einfachen Induktionsvariablen durch Code-Inspektion (\enquote{Pattern Matching})
|
||||||
|
\item Bestimmung aller Variablen $y$ mit einziger (oder identischen) Zuweisung der Form $y = x \pm c$ oder $y = c \cdot x$ mit $x$ Induktionsvariable und $c$ schleifeninvariant:\begin{itemize}
|
||||||
|
\item $x$ ist einfache Induktionsvariable:
|
||||||
|
\begin{equation*}
|
||||||
|
\mathrm{Tripel}(y) = \begin{cases*}
|
||||||
|
(x, 1, c) & falls $y = x + c$ oder $y = c + x$\\
|
||||||
|
(x, 1, -c)& falls $y = x - c$\\
|
||||||
|
(x, c, 0)& sonst ($y = x \cdot c$ oder $y = c \cdot x$)
|
||||||
|
\end{cases*}
|
||||||
|
\end{equation*}
|
||||||
|
\item $x$ ist abhängige Induktionsvariable mit Tupel $(u, d_1, d_2)$:
|
||||||
|
\begin{equation*}
|
||||||
|
\mathrm{Tripel}(y) = \begin{cases*}
|
||||||
|
(u, d_1, d_2 + c) & falls $y = x + c$ oder $y = c + x$\\
|
||||||
|
(u, d_1, d_2 - c) & falls $y = x - c$\\
|
||||||
|
(u, d_1 \cdot c, d_2 \cdot c_2) & sonst ($y = c \cdot x$ oder $y = x \cdot c$)
|
||||||
|
\end{cases*}
|
||||||
|
\end{equation*}
|
||||||
|
\end{itemize}
|
||||||
|
\end{enumerate}
|
||||||
|
\item Vereinfachung der Berechnungsvorschrift von Schleifenlaufvariablen pro Iteration (Reduktion der Ausdrucksstärke, \enquote{Strength Reduction}) für jede einfache Induktionsvariable $x$: \begin{enumerate}
|
||||||
|
\item Für jede von $x$ abhängige Induktionsvariable $y$ mit Tripel $(x, a, b)$:\begin{enumerate}
|
||||||
|
\item Einführung neuer Variable $y'$
|
||||||
|
\item Ersetzung der Zuweisung zu $y$ durch $y = y'$
|
||||||
|
\item Einfügen der Zuweisung $y' = y' \pm (a \cdot c)$ nach jeder Zuweisung $x = x \pm c$
|
||||||
|
\item Einfügen der Zuweisung $y' = x\cdot a + b$ vor dem Schleifenkopf
|
||||||
|
\end{enumerate}
|
||||||
|
\end{enumerate}
|
||||||
|
\item Modifikation von bedingten Sprüngen ggf. möglich
|
||||||
|
\item Verringerung der Anzahl von Array-Bereichstests ggf. möglich
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
\section{Schleifen und Arrays}
|
\subsection{Schleifen und Arrays}
|
||||||
|
|
||||||
\section{Schleifentransformationen}
|
\subsection{Schleifentransformationen}
|
||||||
|
|
||||||
\section{Schleifenrestrukturierungen}
|
\subsection{Schleifenrestrukturierungen}
|
||||||
\end{document}
|
\end{document}
|
||||||
|
Loading…
Reference in New Issue
Block a user