Folien VL-11 zusammengefasst
This commit is contained in:
parent
e605f24f47
commit
0bc34fb409
BIN
verfahren.pdf
BIN
verfahren.pdf
Binary file not shown.
119
verfahren.tex
119
verfahren.tex
@ -410,8 +410,9 @@
|
|||||||
\end{itemize}
|
\end{itemize}
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\subsection{Standard-Verfahren zur interprozeduralen, fluss-insensitiven may-Analyse mit $\mathcal{O}(n^2 + n \cdot e)$}
|
\subsection{Standard-Verfahren zur interprozeduralen, fluss-insensitiven may-Analyse}
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
|
\item Laufzeit: $\mathcal{O}(n^2 + n \cdot e)$
|
||||||
\item Alias-Quellen in Sprachen ohne \&-Operator: \begin{itemize}
|
\item Alias-Quellen in Sprachen ohne \&-Operator: \begin{itemize}
|
||||||
\item Übergabe globaler Variable an Funktion
|
\item Übergabe globaler Variable an Funktion
|
||||||
\item Übergabe der gleichen Variable an mehrere formale Parameter einer Funktion
|
\item Übergabe der gleichen Variable an mehrere formale Parameter einer Funktion
|
||||||
@ -450,7 +451,7 @@
|
|||||||
\end{enumerate}
|
\end{enumerate}
|
||||||
\end{enumerate}
|
\end{enumerate}
|
||||||
|
|
||||||
\subsection{Steensgards Algorithmus für interprozedurale, fluss-insensitive may-Analyse}
|
\subsection{Steensgards Algorithmus zur interprozeduralen, fluss-insensitiven may-Analyse}
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Speichergraph: \begin{itemize}
|
\item Speichergraph: \begin{itemize}
|
||||||
\item Knoten: eine oder mehrere Speicherstellen
|
\item Knoten: eine oder mehrere Speicherstellen
|
||||||
@ -617,8 +618,118 @@
|
|||||||
\end{itemize}
|
\end{itemize}
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
|
\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 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)
|
||||||
|
\end{itemize}
|
||||||
|
\item Aus Laufzeitgründen lediglich Tests, sonst pessimistische Grundannahme: \begin{itemize}
|
||||||
|
\item GGT-Test:\begin{enumerate}
|
||||||
|
\item Gleichsetzen der beiden Array-Ausdrücke
|
||||||
|
\item Konstante auf eine Seite umformen
|
||||||
|
\item Abhängigkeit nur dann möglich, wenn der größte gemeinsame Teiler der Koeffizienten die Konstante teilt
|
||||||
|
\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 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 $\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}
|
||||||
|
\item Mit Fourier-Motzkin-Elimination Variable $z$ eliminieren:
|
||||||
|
\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 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
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
\subsection{Schleifentransformationen}
|
|
||||||
|
|
||||||
\subsection{Schleifenrestrukturierungen}
|
\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
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\subsubsection{Schleifentransformationen}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Erhalten Durchlaufreihenfolge
|
||||||
|
\item Neuausrichtung:\begin{itemize}
|
||||||
|
\item Verschiebung der Ausführung einer Anweisung um $d$ Iterationen (wobei $d$ konstante Abhängigkeitsdistanz ist)
|
||||||
|
\item Bedingte Anweisungen für die ersten und letzten $d$ Anweisungen zur Erhaltung der Semantik
|
||||||
|
\end{itemize}
|
||||||
|
\item Ausrollen um Faktor $f$: \begin{itemize}
|
||||||
|
\item Pro Iteration der neuen Schleife gleich $f$ Iterationen der alten Schleife ausführen
|
||||||
|
\item Reduktion des Schleifenoverheads
|
||||||
|
\item Vergrößerung des Codes
|
||||||
|
\end{itemize}
|
||||||
|
\item Bereichtsteilen: \begin{itemize}
|
||||||
|
\item Iterationsbereich wird auf zwei Schleifen mit jeweils gleichem Rumpf aufgeteilt
|
||||||
|
\item ermöglicht weitere Optimierungen (etwa mit DFA oder Vektorisierung)
|
||||||
|
\item Vergrößerung des Codes
|
||||||
|
\end{itemize}
|
||||||
|
\item Schälen (Spezialfall des Bereichsteilens):\begin{itemize}
|
||||||
|
\item erste (oder letzte) Iteration der Schleife werden herausgezogen um spezielle Datenabhängigkeiten zu eliminieren
|
||||||
|
\item ermöglicht oft Parallelisierung der Restschleife
|
||||||
|
\item ergänzt Neuausrichtung
|
||||||
|
\end{itemize}
|
||||||
|
\item Produktschleifenbildung:\begin{itemize}
|
||||||
|
\item Kombination geschachtelter Schleifen zu einer Schleife durch Multiplikation der Bereiche
|
||||||
|
\item Produktgröße oft besser geeignet für Parallelisierung/Vektorisierung
|
||||||
|
\item fügt ggf. abhängige Induktionsvariablen ein
|
||||||
|
\item verhindert möglicherweise andere Optimierungen
|
||||||
|
\end{itemize}
|
||||||
|
\item Streifenschneiden:\begin{itemize}
|
||||||
|
\item Aufteilen des Schleifenbereichs in mehrere Bereiche (Blöcke, Streifen) bestimmter Größe
|
||||||
|
\item verbessert Parallelisierung/Vektorisierung der Schleife
|
||||||
|
\item oft nach Produktschleifenbildung
|
||||||
|
\item erhöht Schleifenoverhead durch zusätzliche Abhängigkeitsdimension
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\subsubsection{Schleifenrestrukturierungen}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Ändern Durchlaufreihenfolge
|
||||||
|
\item Verschmelzung:\begin{itemize}
|
||||||
|
\item Zusammenfassen der Rümpfe mehrerer Schleifen
|
||||||
|
\item Voraussetzungen:\begin{itemize}
|
||||||
|
\item beide Schleifen haben gleichen Indexbereich
|
||||||
|
\item Namensgleichheit beider Laufvariablen kann durch Umbenennung erreicht werden
|
||||||
|
\item Bei keiner Skalarnutzung in zweiter Schleife darf es erreichende Definition aus anderer Schleife geben
|
||||||
|
\end{itemize}
|
||||||
|
\item Legalität: Es darf keine Abhängigkeit zwischen einer Instruktion aus der zweiten Schleife mit einer aus der ersten in einer späteren Iteration entstehen
|
||||||
|
\item Reduktion des Schleifenoverheads
|
||||||
|
\item größere Grundblöcke erlauben effizientere lokale Optimierungen
|
||||||
|
\item ggf. verbesserte zeitliche Lokalität
|
||||||
|
\end{itemize}
|
||||||
|
\item Rumpfteilen:\begin{itemize}
|
||||||
|
\item Aufteilen des Rumpfs einer Schleife auf mehrere Schleifen
|
||||||
|
\item Gegenteil der Verschmelzung
|
||||||
|
\item Legalität: \begin{itemize}
|
||||||
|
\item Anweisungen, die in starken Zusammenhangskomponenten des Abhängigkeitsgraphs der zu teilenden Schleife liegen, dürfen nicht auf verschiedene Schleifen verteilt werden
|
||||||
|
\item Reihenfolge der Schleifen muss Abhängigkeiten vor dem Teilen widerspiegeln
|
||||||
|
\end{itemize}
|
||||||
|
\item kleinere Grundblöcke verringern ggf. Registerdruck
|
||||||
|
\item kleinere Rümpfe passen besser in den Instruktionscache
|
||||||
|
\item ggf. kann eine der Schleifen parallelisiert/vektorisiert werden
|
||||||
|
\end{itemize}
|
||||||
|
\item Kachelschneiden
|
||||||
|
\end{itemize}
|
||||||
|
\paragraph{Lineare Schleifenrestrukturierungen}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Schleifenvertauschung
|
||||||
|
\item Richtungsumkehr
|
||||||
|
\item Schleifenneigen
|
||||||
|
\end{itemize}
|
||||||
\end{document}
|
\end{document}
|
||||||
|
Loading…
Reference in New Issue
Block a user