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} | ||||
| 
 | ||||
| \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} | ||||
| 	\item Laufzeit: $\mathcal{O}(n^2 + n \cdot e)$ | ||||
| 	\item Alias-Quellen in Sprachen ohne \&-Operator: \begin{itemize} | ||||
| 		\item Übergabe globaler Variable an Funktion | ||||
| 		\item Übergabe der gleichen Variable an mehrere formale Parameter einer Funktion | ||||
| @ -450,7 +451,7 @@ | ||||
| 	\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} | ||||
| 	\item Speichergraph: \begin{itemize} | ||||
| 		\item Knoten: eine oder mehrere Speicherstellen | ||||
| @ -617,8 +618,118 @@ | ||||
| 	\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} | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Marco Ammon
						Marco Ammon