diff --git a/verfahren.pdf b/verfahren.pdf index 1499c71..149fd98 100644 Binary files a/verfahren.pdf and b/verfahren.pdf differ diff --git a/verfahren.tex b/verfahren.tex index c350f82..4beaa96 100644 --- a/verfahren.tex +++ b/verfahren.tex @@ -665,7 +665,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 +679,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 +696,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 +723,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, die entstehenden Abhängigkeits\-distanz\-vektoren nicht lexikographisch sein \end{itemize} \subsubsection{Schleifentransformationen} @@ -794,11 +814,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}