diff --git a/verfahren.pdf b/verfahren.pdf index ae12280..ac4401f 100644 Binary files a/verfahren.pdf and b/verfahren.pdf differ diff --git a/verfahren.tex b/verfahren.tex index dea1b4c..a2bd5d0 100644 --- a/verfahren.tex +++ b/verfahren.tex @@ -724,12 +724,85 @@ \item kleinere Rümpfe passen besser in den Instruktionscache \item ggf. kann eine der Schleifen parallelisiert/vektorisiert werden \end{itemize} - \item Kachelschneiden + \item Kachelschneiden: \begin{itemize} + \item Aufteilen mehrerer geschachtelter Schleifen in Kacheln bestimmter Größe + \item Legalität: Wenn Schleifenvertauschungen legal sind + \item Verbesserung der Lokalität + \item Erlaubt Registerverwendung + \item Höherer Schleifenoverhead + \end{itemize} \end{itemize} + \paragraph{Lineare Schleifenrestrukturierungen} \begin{itemize} - \item Schleifenvertauschung - \item Richtungsumkehr - \item Schleifenneigen + \item Schleifenvertauschung:\begin{itemize} + \item Innere Schleife wird zur äußeren + \item Erhalt der schleifenunabhängigen Datenabhängigkeiten + \item Tausch der Einträge der entsprechenden Dimensionen in Richtungsvektoren und Abhängigkeitsdistanzen der schleifengetragenen Datenabhängigkeiten + \item Legalität: Alle Abhängigkeitsdistanzen (vorher per Definition lexikographisch positiv) müssen auch danach positiv sein + \item Nach außen Ziehen der abhängigkeitstragenden Schleifen ermöglicht ggf. im Inneren parallelisierbare Schleife mit großer Breite + \item ggf. Verbesserung der räumlichen oder zeitlichen Lokalität + \item Korrektur der Indexbereiche bei nicht-rechteckigen Iterationsräumen (ggf. durch Fourier-Motzkin-Elimination) + \end{itemize} + \item Richtungsumkehr:\begin{itemize} + \item Inkrement- in Dekrementschleife umwandeln (oder vice versa) + \item Voraussetzung: alle Abhängigkeiten müssen von umgebender Schleife getragen werden + \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}$ + \item $\exists\, U^{-1} \in \mathbb{Z}^{n\times n}:\, U U^{-1} = I$ + \item Hinreichende Bedingung: $\vert\mathrm{det}(U)\vert = 1$ + \end{itemize} + \item Legalität: Für alle Abhängigkeitsdistanzen $d$ muss gelten $0 \angle d U$ + \item Vertauschungsmatrix für Dimensionen 2 und 3: \begin{equation*} + U = \begin{psmallmatrix} + 1 & & & \\ + & 0 & 1 & \\ + & 1 & 0 & \\ + & & & 1 + \end{psmallmatrix} + \end{equation*} + \item Richtungsumkehrungsmatrix für Dimension 2: \begin{equation*} + U = \begin{psmallmatrix} + 1 & 0\\ + 0 & -1 + \end{psmallmatrix} + \end{equation*} + \item Neigungsmatrix für Faktor $f$ in Dimension 2:\begin{equation*} + U = \begin{psmallmatrix} + 1 & f\\ + 0 & 1 + \end{psmallmatrix} + \end{equation*} + \end{itemize} + \item Gezielte Konstruktion von Transformationsmatrix $U$ zur Ermöglichung bestimmter Optimierungen:\begin{itemize} + \item Matrix $D$ aus Abhängigkeitsdistanzvektoren + \item Gesucht: $U^{\mathrm{T}}$ mit $U^{\mathrm{T}} D^{\mathrm{T}} = D^{\mathrm{T}\prime}$, sodass $D^{\mathrm{T}\prime}$ Optimierungsanforderungen erfüllt + \end{itemize}\begin{enumerate} + \item Lineares Gleichungssystem $\left( I^{\mathrm{T}} \mid D^{\mathrm{T}} \right)$ zu $\left( U^{\mathrm{T}} \mid D^{\mathrm{T}\prime} \right)$ mit gewünschtem $D^{\mathrm{T}\prime}$ umformen + \item $U^{-1}$ aus $U$ bestimmen + \item Transformation der Verwendung der Iterationsvariablen $i, j, \textellipsis$ im Schleifenrumpf wie folgt: + \begin{equation*} + \begin{psmallmatrix} + i\\ + j\\ + \vdots + \end{psmallmatrix} = U^{-1} \begin{psmallmatrix} + i'\\ + j'\\ + \vdots + \end{psmallmatrix} + \end{equation*} + \item Anpassung der Schleifengrenzen für $i', j', \textellipsis$ mit Fourier-Motzkin, bei innerster Schleife beginnend + \end{enumerate} \end{itemize} \end{document}