This commit is contained in:
Marco Ammon 2020-08-14 18:12:23 +02:00
parent 94ef4dd194
commit 09ecc56528
2 changed files with 27 additions and 9 deletions

Binary file not shown.

View File

@ -665,7 +665,8 @@
\subsection{Indexanalyse} \subsection{Indexanalyse}
\begin{itemize} \begin{itemize}
\item Bestimmung, ob 2 Array-Zugriffe selbe bzw. unterschiedliche Elemente ansprechen: Grundannahme pessimistisch (gleiches Element) \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 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 $\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) \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 \item Für verschiedene Arten der Abhängigkeit in obige Kriterien einsetzen
\end{enumerate} \end{enumerate}
\item Ungleichungstest:\begin{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 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 In Gleichung jeweils untere und obere Grenzwerte einsetzen und damit ein Intervall bestimmen
\item Sofern Intervall nicht 0 enthält, keine Abhängigkeit \item Sofern Intervall nicht 0 enthält, keine Abhängigkeit
\end{enumerate} \end{enumerate}
\item Fourier-Motzkin-Test: \begin{itemize} \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 $\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$ \item $a \cdot z < \alpha$ obere Schranke für $z$ mit $\alpha > 0$
\end{itemize} \end{itemize}
@ -692,6 +696,22 @@
\begin{equation*} \begin{equation*}
a\cdot \beta \leq a \cdot z \cdot b \leq b\cdot \alpha \rightarrow a\cdot \beta \leq b\cdot \alpha a\cdot \beta \leq a \cdot z \cdot b \leq b\cdot \alpha \rightarrow a\cdot \beta \leq b\cdot \alpha
\end{equation*} \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 Kleineres Problem $a\cdot \beta \leq b\cdot \alpha$ rekursiv lösen:\begin{itemize}
\item keine Lösung $\rightarrow$ unabhängig \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 \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} \subsection{Entfernung von schleifengetragenen Datenabhängigkeiten}
\begin{itemize} \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} \end{itemize}
\subsubsection{Schleifentransformationen} \subsubsection{Schleifentransformationen}
@ -794,11 +814,9 @@
\item ggf. Ermöglichung weiterer Optimierungen wie Verschmelzung \item ggf. Ermöglichung weiterer Optimierungen wie Verschmelzung
\end{itemize} \end{itemize}
\item Neigen:\begin{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 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 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
\item Abhängigkeit $(d_1, d_2)$ wird zu $(d_1, d_2 + f \cdot d_1)$ $\rightarrow$ Ermöglichung weiterer Restrukturierungen
\end{itemize}
\end{itemize} \end{itemize}
\item Allgemeiner Fall:\begin{itemize} \item Allgemeiner Fall:\begin{itemize}
\item Transformation der Indexvektoren mit Matrix $U$ mit Eigenschaften (unimodular):\begin{itemize} \item Transformation der Indexvektoren mit Matrix $U$ mit Eigenschaften (unimodular):\begin{itemize}