Folien VL-10 zusammengefasst
This commit is contained in:
parent
927a0edfa1
commit
e605f24f47
BIN
verfahren.pdf
BIN
verfahren.pdf
Binary file not shown.
@ -136,10 +136,10 @@
|
||||
|
||||
\section{Datenflussanalyse}
|
||||
\begin{itemize}
|
||||
\item Datenabhängigkeiten: \begin{itemize}
|
||||
\item Schreiben vor Lesen:
|
||||
\item Schreiben vor Schreiben: Ausgabeabhängigkeit
|
||||
\item Lesen vor Schreiben: Anti-Abhängigkeit
|
||||
\item Datenabhängigkeiten verhindern Umordnen: \begin{itemize}
|
||||
\item Schreiben vor Lesen: Flussabhängigkeit $\delta^\mathrm{f}$
|
||||
\item Schreiben vor Schreiben: Ausgabeabhängigkeit $\delta^\mathrm{o}$
|
||||
\item Lesen vor Schreiben: Antiabhängigkeit $\delta^\mathrm{a}$
|
||||
\end{itemize}
|
||||
\item Starke Variablendefinition: sichere Zuweisung zu einer Variablen
|
||||
\item Schwache Variablendefinition: mögliche Zuweisung zu einer Variablen (etwa über Zeiger oder Referenz, die möglicherweise auf Variable zeigen)
|
||||
@ -569,7 +569,54 @@
|
||||
\item Verringerung der Anzahl von Array-Bereichstests ggf. möglich
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Schleifen und Arrays}
|
||||
\subsection{Datenabhängigkeiten in Schleifen und Arrays}
|
||||
\begin{itemize}
|
||||
\item Schleifenunabhängige Datenabhängigkeiten: existieren auch ohne Schleife (etwa wenn im Rumpf)
|
||||
\item Schleifengetragene Datenabhängigkeiten: resultieren ausschließlich aus Schleife (etwa zwischen verschiedenen Iterationen)
|
||||
\item Iterationsvektor $i = (i_1, i_2, \textellipsis, i_d)$ für $d$ geschachtelte Schleifen\begin{itemize}
|
||||
\item eindeutig für jede Iteration
|
||||
\item lexikographische Ordnung auf Iterationsvektoren
|
||||
\item $i \angle j$ $\Leftrightarrow$ Iteration $i$ zur Laufzeit vor Iteration $j$
|
||||
\end{itemize}
|
||||
\item Iterationsraum: Menge aller möglichen Iterationsvektoren
|
||||
\item Abhängigkeitsdistanz (bei geschachtelten Schleifen Vektor) $d$: Bei Datenabhängigkeit zwischen Iteration $i_\mathrm{source}$ und $j_\mathrm{target}$ und $i_\mathrm{source} \angle j_\mathrm{target}$, dann $i_\mathrm{source} + d = j_\mathrm{target}$
|
||||
\item Abhängigkeitsrichtung: Vergröberung der Abhängigkeitsdistanz mit folgenden Ersetzungen an jeder Position des Vektors: \begin{equation*}
|
||||
r_i = \begin{cases*}
|
||||
= & falls $0 = d_i$\\
|
||||
< & falls $0 < d_i$\\
|
||||
> & falls $0 > d_i$
|
||||
\end{cases*}
|
||||
\end{equation*}
|
||||
\item Richtungsvektor: Zusammenfassung aller Abhängigkeitsrichtungen einer Schleife:\begin{itemize}
|
||||
\item \enquote{übliche} Zusammenfassungen (z.B. $=$ und $<$ zu $\leq$)
|
||||
\item keine Aussage $*$ bei $<$ und $>$
|
||||
\end{itemize}
|
||||
\item Die Abhängigkeit tragende Schleife $p$ folgt aus der Struktur der Abhängigkeitsdistanzen bei Inkrementschleifen:
|
||||
\begin{equation*}
|
||||
(\underbrace{d_1, d_2, \textellipsis}_{0}, \underbrace{d_p}_{>0}, \underbrace{\textellipsis, d_n}_{\mathrm{beliebig}})
|
||||
\end{equation*}
|
||||
\item Parallele Ausführbarkeit aller Iterationen einer Schleife $p$ gegeben, wenn \begin{itemize}
|
||||
\item diese keine Abhängigkeit trägt (alle Abhängigkeitsdistanzen haben $d_p = 0$) oder
|
||||
\item jede schleifengetragene Abhängigkeit von einer $p$ umgebenden Schleife getragen wird (für jede Abhängigkeitsdistanz $\exists q < p: d_q > 0$)
|
||||
\end{itemize}
|
||||
\item Parallele Ausführung nicht immer gewinnbringend, da auf Cache-Ebene Abhängigkeiten auftreten können (\enquote{False Sharing})
|
||||
\item Optimierungsmöglichkeiten:\begin{itemize}
|
||||
\item Skalare Ersetzung von Array-Ausdrücken (\enquote{register pipelining}), wenn: \begin{itemize}
|
||||
\item Abhängigkeit wird von innerster Schleife getragen
|
||||
\item Konstante Abhängigkeitsdistanz $d$
|
||||
\item $d+1$ freie Register
|
||||
\end{itemize}\begin{enumerate}
|
||||
\item Vor Schleife Initialisierung der Register und \enquote{Abschälen} der ersten $d$ Iterationen
|
||||
\item In Schleife Benutzung der Register bei Lesezugriff und Speicherung der Registerinhalte bei Speicherzugriff, sowie am Anfang des Rumpfs \enquote{Aufrücken} der Register
|
||||
\end{enumerate}
|
||||
\item Skalar-Vervielfachung: Einführung eines Arrays zur Elimination von unnötigen Abhängigkeiten einer Temporärvariable
|
||||
\item Verbesserung der zeitlichen Lokalität durch optimierte Registerverwendung
|
||||
\item Verbesserung der räumlichen Lokalität durch optimierte Cache-Verwendung
|
||||
\item Parallelisierung/Vektorisierung von Schleifen
|
||||
\item Daten-/Prozessplatzierung zur Kommunikationsoptimierung
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
|
||||
|
||||
\subsection{Schleifentransformationen}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user