Folien VL-10 zusammengefasst
This commit is contained in:
		
							
								
								
									
										
											BIN
										
									
								
								verfahren.pdf
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								verfahren.pdf
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -136,10 +136,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
\section{Datenflussanalyse}
 | 
					\section{Datenflussanalyse}
 | 
				
			||||||
\begin{itemize}
 | 
					\begin{itemize}
 | 
				
			||||||
	\item Datenabhängigkeiten: \begin{itemize}
 | 
						\item Datenabhängigkeiten verhindern Umordnen: \begin{itemize}
 | 
				
			||||||
		\item Schreiben vor Lesen:
 | 
							\item Schreiben vor Lesen: Flussabhängigkeit $\delta^\mathrm{f}$
 | 
				
			||||||
		\item Schreiben vor Schreiben: Ausgabeabhängigkeit
 | 
							\item Schreiben vor Schreiben: Ausgabeabhängigkeit $\delta^\mathrm{o}$
 | 
				
			||||||
		\item Lesen vor Schreiben: Anti-Abhängigkeit
 | 
							\item Lesen vor Schreiben: Antiabhängigkeit $\delta^\mathrm{a}$
 | 
				
			||||||
	\end{itemize}
 | 
						\end{itemize}
 | 
				
			||||||
	\item Starke Variablendefinition: sichere Zuweisung zu einer Variablen
 | 
						\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)
 | 
						\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
 | 
						\item Verringerung der Anzahl von Array-Bereichstests ggf. möglich
 | 
				
			||||||
\end{itemize}
 | 
					\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}
 | 
					\subsection{Schleifentransformationen}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user