Compare commits
5 Commits
a0347487b1
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
189efa44a0 | ||
|
|
90c056842b | ||
|
|
32597233c6 | ||
|
|
09ecc56528 | ||
|
|
94ef4dd194 |
BIN
verfahren.pdf
BIN
verfahren.pdf
Binary file not shown.
@@ -212,7 +212,7 @@
|
||||
\item Vorverarbeitung: und sowie Wertgleichheit
|
||||
\end{itemize}
|
||||
\item Kopienfortschreibung: \begin{itemize}
|
||||
\item Eine Bitposition pro aus Kopieren entstandener Wergleichtheitsbeziehung
|
||||
\item Eine Bitposition pro aus Kopieren entstandener Wertgleichtheitsbeziehung
|
||||
\item Setzen bei Kopieroperation
|
||||
\item Zurücksetzen wenn Original oder Kopie mindestens schwach definiert wird
|
||||
\item Anfangsbelegung: false
|
||||
@@ -316,6 +316,51 @@
|
||||
\item Falls $t$ in unbesuchten Blöcken nicht geändert wurde, $\mathrm{wn}_Z(t) = \phi'(\mathrm{wn}_X(t),\mathrm{wn}_Y(t))$ löschen und alle Verwendungen von $\mathrm{wn}_Z(t)$ durch $\mathrm{wn}_X(t)$ ersetzen
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\newpage
|
||||
\subsubsection{Wertnummerierungsverfahren nach Click/Braun (aus Übung)}
|
||||
\begin{algorithmic}
|
||||
\Function{Visit}{Basisblock $b$}
|
||||
\State Wertnummerierung mit ReadVar/WriteVar durchführen
|
||||
\ForAll{KFG-Nachfolger $s$ von $b$}
|
||||
\If{$b$ ist letzter Vorgänger (höchste Tiefensuchnummer) von $s$}
|
||||
\State \Call{Seal}{$s$}
|
||||
\EndIf
|
||||
\If{$s$ noch nicht besucht}
|
||||
\State \Call{Visit}{$s$}
|
||||
\EndIf
|
||||
\EndFor
|
||||
\EndFunction
|
||||
\Statex
|
||||
\Function{Seal}{Basisblock $b$}
|
||||
\ForAll{vorläufige $\phi$-Funktion für Variable $v$ in $b$}
|
||||
\ForAll{KFG-Vorgänger $p$ von $b$}
|
||||
\State \Call{ReadVar}{$v$, $p$} als Operand zu $\phi$-Funktion hinzufügen
|
||||
\EndFor
|
||||
\EndFor
|
||||
\EndFunction
|
||||
\Statex
|
||||
\Function{WriteVar}{Variable $v$, Basisblock $b$}
|
||||
\State \Return nächste frische Wertnummer für $v$
|
||||
\EndFunction
|
||||
\Statex
|
||||
\Function{ReadVar}{Variable $v$, Basisblock $b$}
|
||||
\If{$b$ enthält bereits Wertnummer für $v$}
|
||||
\State \Return Wertnummer für $v$ in $b$
|
||||
\EndIf
|
||||
\If{$b$ ist noch nicht versiegelt}
|
||||
\State vorläufige $\phi$-Funktion mit nächster Wertnummer für $v$ in $b$ einfügen
|
||||
\State \Return Wertnummer der $\phi$-Funktion
|
||||
\ElsIf{$b$ hat nur einen Vorgänger $p$}
|
||||
\State \Return \Call{ReadVar}{$v$, $p$}
|
||||
\Else
|
||||
\State $phi$-Funktion mit nächster Wertnummer für $v$ in $b$ in einfügen
|
||||
\ForAll{KFG-Vorgänger $p$ von $b$}
|
||||
\State \Call{ReadVar}{$v$, $p$} als Operand zu $\phi$-Funktion hinzufügen
|
||||
\EndFor
|
||||
\State \Return Wertnummer der $\phi$-Funktion
|
||||
\EndIf
|
||||
\EndFunction
|
||||
\end{algorithmic}
|
||||
|
||||
\subsection{Optimierungen auf SSA-Form}
|
||||
\begin{itemize}
|
||||
@@ -449,6 +494,7 @@
|
||||
\mathit{Ptr}(P',x) & sonst
|
||||
\end{cases*}
|
||||
\end{equation*}
|
||||
\item Bei Flussfunktion $\mathit{ptr}_P(*c)$ für alle $k \in \mathit{Ptr}(P, c)$ Wissen $\mathit{Ptr}(P, k)$ berechnen
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
|
||||
@@ -559,7 +605,7 @@
|
||||
\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 in Grundblock, der alle Schleifenausgänge, nach denen die Variable lebendig ist, dominiert und alle die Variable nutzenden Blöcke strikt dominiert (oder in definierendem Block nach Definition auftritt)
|
||||
\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
|
||||
@@ -665,7 +711,8 @@
|
||||
\subsection{Indexanalyse}
|
||||
\begin{itemize}
|
||||
\item Bestimmung, ob 2 Array-Zugriffe selbe bzw. unterschiedliche Elemente ansprechen: Grundannahme pessimistisch (gleiches Element)
|
||||
\item Für 2 Array-Zugriffe $S1: A[f_1(i_1, \textellipsis, i_d), \textellipsis, f_m(i_1, \textellipsis, i_d)]$ und $S2: A[f_1(i_1, \textellipsis, i_d), \textellipsis, f_m(i_1, \textellipsis, i_d)]$ gilt $S1 \delta S2$ $\Leftrightarrow$:\begin{itemize}
|
||||
\item Für 2 Array-Zugriffe $S1$ $A[f_1(i_1, \textellipsis, i_d), \textellipsis, f_m(i_1, \textellipsis, i_d)]$ und\\
|
||||
$S2$ $A[g_1(i_1, \textellipsis, i_d), \textellipsis, g_m(i_1, \textellipsis, i_d)]$ gilt $S1 \delta S2$ $\Leftrightarrow$:\begin{itemize}
|
||||
\item mindestens ein Schreibzugriff
|
||||
\item $\exists I, J: I=(i_1, \textellipsis, i_d) \angle J =(j_1, \textellipsis, j_d)$ mit $I, J$ innerhalb der Schleifengrenzen (Ungleichunssystem mit Nebenbedingungen)
|
||||
\item $\forall p: f_p(I) = g_p(J)$ (Gleichungssystem mit Schleifenlaufvariablen als Variablen und Konstanten aus linearem Index-Ausdruck als Koeffizienten)
|
||||
@@ -678,13 +725,16 @@
|
||||
\item Für verschiedene Arten der Abhängigkeit in obige Kriterien einsetzen
|
||||
\end{enumerate}
|
||||
\item Ungleichungstest:\begin{enumerate}
|
||||
\item Ungleichungen für verwendete Variablen aufstellen
|
||||
\item Ungleichungen für im Code verwendete Variablen $i$ mit $i_\mathrm{w}$, $i_\mathrm{r}$ für Schreib- und Lesezugriff aufstellen:\begin{enumerate}
|
||||
\item Ungleichungen für Schleifengrenzen
|
||||
\item Ungleichungen für relative Beziehung von $i_\mathrm{w}$ und $i_\mathrm{r}$
|
||||
\end{enumerate}
|
||||
\item Gleichung für Zugriff aufstellen und so umstellen, dass 0 auf einer Seite steht
|
||||
\item In Gleichung jeweils untere und obere Grenzwerte einsetzen und damit ein Intervall bestimmen
|
||||
\item Sofern Intervall nicht 0 enthält, keine Abhängigkeit
|
||||
\end{enumerate}
|
||||
\item Fourier-Motzkin-Test: \begin{itemize}
|
||||
\item Ungleichungssystem in kanonische Form überführen: \begin{itemize}
|
||||
\item Ungleichungssystem in kanonische Form ($\le c$, $c$ Konstante) überführen \begin{itemize}
|
||||
\item $\beta < b \cdot z$ untere Schranke für $z$ mit $\beta > 0$
|
||||
\item $a \cdot z < \alpha$ obere Schranke für $z$ mit $\alpha > 0$
|
||||
\end{itemize}
|
||||
@@ -692,6 +742,22 @@
|
||||
\begin{equation*}
|
||||
a\cdot \beta \leq a \cdot z \cdot b \leq b\cdot \alpha \rightarrow a\cdot \beta \leq b\cdot \alpha
|
||||
\end{equation*}
|
||||
\item Algorithmus aus Übung: \begin{algorithmic}
|
||||
\Repeat
|
||||
\State Unbekannte $x_j$ auswählen
|
||||
\State $L \gets \lbrace i \mid a_{ij} < 0 \rbrace$
|
||||
\State $U \gets \lbrace i \mid a_{ij} > 0 \rbrace$
|
||||
\ForAll{$i \in L \cup U$}
|
||||
\State Reihe $i$ mit $\vert a_{ij}\vert$ normalisieren
|
||||
\EndFor
|
||||
\ForAll{$i \in L$}
|
||||
\ForAll{$k \in U$}
|
||||
\State Füge Ungleichung $A_{[i]} + A {[k]} \leq b_i + b_k$ hinzu
|
||||
\EndFor
|
||||
\EndFor
|
||||
\State Ignoriere/Lösche alle Reihen aus $L \cup U$
|
||||
\Until{System aus trivialen Ungleichungen}
|
||||
\end{algorithmic}
|
||||
\item Kleineres Problem $a\cdot \beta \leq b\cdot \alpha$ rekursiv lösen:\begin{itemize}
|
||||
\item keine Lösung $\rightarrow$ unabhängig
|
||||
\item Lösung existiert $\rightarrow$ Prüfung, ob auch ganzzahlige Lösung für $a\cdot z\cdot b$ existiert
|
||||
@@ -703,7 +769,7 @@
|
||||
|
||||
\subsection{Entfernung von schleifengetragenen Datenabhängigkeiten}
|
||||
\begin{itemize}
|
||||
\item Legalität: Für jede Datenabhängigkeit muss die relative Reihenfolge auch nach Anwendung der Transformation bzw. Restrukturierung erhalten bleiben, die entstehenden Abhängigkeitsdistanzvektoren nicht lexikographisch sein
|
||||
\item Legalität: Für jede Datenabhängigkeit muss die relative Reihenfolge auch nach Anwendung der Transformation bzw. Restrukturierung erhalten bleiben, d.h. die entstehenden Abhängigkeits\-distanz\-vektoren dürfen nicht lexikographisch negativ sein und müssen ihre Datenabhängigkeitsart behalten
|
||||
\end{itemize}
|
||||
|
||||
\subsubsection{Schleifentransformationen}
|
||||
@@ -794,11 +860,9 @@
|
||||
\item ggf. Ermöglichung weiterer Optimierungen wie Verschmelzung
|
||||
\end{itemize}
|
||||
\item Neigen:\begin{itemize}
|
||||
\item Schleifenneigen:\begin{itemize}
|
||||
\item Verschiebung des Array-Indexbereichs der inneren Schleife um $f \cdot i$ mit $f$ Neigungsfaktor und $i$ Iterationsvariable der äußeren Schleife
|
||||
\item Abzug von $f \cdot i$ bei Verwendungen der inneren Iterationsvariable
|
||||
\item Abhängigkeit $(d_1, d_2)$ wird zu $(d_1, d_2 + f \cdot d_1)$ $\rightarrow$ Ermöglichung weiterer Restrukturierungen
|
||||
\end{itemize}
|
||||
\item Verschiebung des Array-Indexbereichs der inneren Schleife um $f \cdot i$ mit $f$ Neigungsfaktor und $i$ Iterationsvariable der äußeren Schleife
|
||||
\item Abzug von $f \cdot i$ bei Verwendungen der inneren Iterationsvariable
|
||||
\item Abhängigkeit $(d_1, d_2)$ wird zu $(d_1, d_2 + f \cdot d_1)$ $\rightarrow$ Ermöglichung weiterer Restrukturierungen
|
||||
\end{itemize}
|
||||
\item Allgemeiner Fall:\begin{itemize}
|
||||
\item Transformation der Indexvektoren mit Matrix $U$ mit Eigenschaften (unimodular):\begin{itemize}
|
||||
|
||||
Reference in New Issue
Block a user