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}
\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,12 +814,10 @@
\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}
\end{itemize}
\item Allgemeiner Fall:\begin{itemize}
\item Transformation der Indexvektoren mit Matrix $U$ mit Eigenschaften (unimodular):\begin{itemize}
\item $U \in \mathbb{Z}^{n\times n}$