UE2-Verfahren/verfahren.tex

155 lines
6.9 KiB
TeX

% !TeX spellcheck = de_DE
\documentclass[11pt,a4paper,toc]{scrartcl}
\usepackage[a4paper,left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm]{geometry}
\usepackage[ngerman]{babel}
\usepackage{amssymb}
\usepackage{scrextend}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{enumitem}
\usepackage{mathtools}
\usepackage[load=named]{siunitx}
\usepackage{csquotes}
\usepackage[hidelinks]{hyperref}
%\usepackage{listings}
\usepackage{algorithmicx}
\usepackage{algpseudocode}
%\usepackage{pgfplots}
\usepackage{tikz}
%\usetikzlibrary{positioning}
%\usetikzlibrary{arrows.meta}
%\usetikzlibrary{quotes}
%\usetikzlibrary{angles}
%\usetikzlibrary{babel}
%\usetikzlibrary{fit}
%\usepackage{datetime}
%\usepackage{xcolor}
%\pdfminorversion=7 % Import-Unterstützung für PDFs bis Version 1.7
%\pgfplotsset{compat=1.16} % verhindern, dass pgfplots im Rückwärtskompatibilitätsmodus arbeitet
\setlist[enumerate,1]{label={\arabic*.}}
\setlist[enumerate,2]{label={\alph*)}}
\title{Optimierungen in Übersetzern: Verfahren}
\author{Marco Ammon (my04mivo)}
\date{\today}
\makeatletter
\g@addto@macro\bfseries{\boldmath}
\makeatother
\begin{document}
\maketitle
\tableofcontents
\clearpage
\section{Kontrollflussanalyse}
\subsection{Kontrollflussgraph}
\begin{itemize}
\item Gerichteter Graph
\item Knoten: Grundblöcke (meist maximal)
\item Kante zwischen zwei Blöcken $A$ und $B$ wenn $B$ direkt nach $A$ ausgeführt werden kann (etwa [un-]bedingter Sprung oder Fallthrough)
\item Synthetische Ergänzung um Entry- und Exit-Knoten, die mit Kante verbunden sind
\item Kontrollflussabhängigkeit: Bei Verzweigungsknoten $v$ mit direkten Nachfolgern $a$ und $b$: $y$ kontrollflussabhängig von $v$ $\Leftrightarrow$ mindestens ein Pad von $a$ zum Exit-Knoten ohne $y$ und jeder Pfad von $b$ zum Exit-Knoten über $y$
\end{itemize}
\subsection{Dominanz}
\begin{itemize}
\item Knoten $x$ dominiert $y$ ($x \geq \geq y$), wenn jeder Pfad von Wurzel zu $y$ durch $x$ laufen muss
\item Strikte Dominanz $x >> y$, falls zusätzlich $x \neq y$ gilt
\item $\mathrm{ImmDom[}y\mathrm{]}$ ist strikter Dominator von $y$, der $y$ am Nächsten ist
\item Dominatorbaum enthält jeden Knoten als Kind seines ImmDomms $\rightarrow$ Pfad zwischen $x$ und $z$ in Dominatorbaum $\Leftrightarrow$ $x >> z$
\end{itemize}
\subsubsection{Berechnung der Dominatoren $D(n)$ eines Knoten $n$}
\paragraph{Iterativer Fixpunkt-Algorithmus (Lengauer)}
\begin{itemize}
\item mit $\mathcal{O}(\vert E\vert \vert N\vert ^2)$
\item Zunächst Überapproximation der Dominatorenmenge
\item Initialisierung aller $D(n) \in N$ mit $N$ außer Startknoten $S$ mit $D(S) = S$
\item Bis Fixpunkt erreicht ist: alle $D(n)$ zu $D'(n) = \lbrace n\rbrace \cup \bigcap_{(p, n) \in E} D(p)$
\item $n$ am besten in Tiefensuchereihenfolge durchlaufen
\end{itemize}
\paragraph{Verfahren mit Spannendem Tiefenbaum $T$}
\begin{itemize}
\item Besuch des KFG in Tiefensuchereihenfolge mit zugehöriger Nummerierung: \begin{itemize}
\item \enquote{Spannende} Kanten gehen zu frisch nummerierten Knoten
\item Rückschreitende Kanten gehen zu Vorgänger (kleinere DFS-Nummer) in $T$
\item Fortschreitende Kanten gehen zu Nachfolger (größere DFS-Nummer) in $T$
\item Kreuzkanten führen in früher besuchten Ast in $T$
\end{itemize}
\item Dominatoren $D(n)$ liegen auf jeden Fall \enquote{über} $n$ in $T$
\item Berechnung der Semidominatoren $\mathrm{SemDom}\lbrack w\rbrack$ in Reihenfolge fallender DFS-Nummern: \begin{itemize}
\item Direkte Vorgänger auf $T$ sind Kandidaten
\item $\min_{u\in \mathrm{Pred}(w)} \mathrm{SemDom}\lbrack u\rbrack$ ist Kandidat
\item Minimum der Kandidaten ist $\mathrm{SemDom}\lbrack w\rbrack$
\end{itemize}
\item Berechnung von $\mathrm{ImmDom}\lbrack w\rbrack$ durch Durchlaufen in Tiefenordnung von $\mathrm{SemDom}\lbrack w\rbrack$ nach $w$:\begin{itemize}
\item Jeweils alle Vorgänger $u$ untersuchen und $u$ mit kleinstem $\mathrm{SemDom}\lbrack u\rbrack$ finden
\item \begin{equation*}
\mathrm{ImmDom}\lbrack w\rbrack = \begin{cases}
\mathrm{SemDom}\lbrack u\rbrack & \mathrm{falls}\, \mathrm{SemDom}\lbrack w\rbrack = \mathrm{SemDom}\lbrack u \rbrack\\
\mathrm{ImmDom}\lbrack u\rbrack & \mathrm{sonst}
\end{cases}
\end{equation*}
\end{itemize}
\end{itemize}
\subsubsection{Dominanzgrenze}
\begin{itemize}
\item Dominanzgrenze $DG[x]$ enthält Knoten $y$, die einen von $x$ dominierten Vorgänger besitzen, aber nicht von $x$ streng dominiert werden
\item Berechnung der $DG[x]$: \begin{align*}
DG[x] &= DG_\text{local}[x] \cup \bigcup_{z \in N, \mathrm{ImmDom}[z] = x} DG_\text{up}[x, z] \\
DG_\text{local}[x] &= \lbrace y \in \mathrm{Succ}(x) \mid \mathrm{ImmDom}[y] \neq x\rbrace\\
DG_\text{up}[x, z] &= \lbrace y \in DG[z] \mid \mathrm{ImmDom}[y] \neq x\rbrace
\end{align*}
\item Invertierung der Dominanzgrenzen liefert Kontrollflussabhängigkeiten
\end{itemize}
\subsection{Schleifenerkennung}
\begin{itemize}
\item Region: \begin{itemize}
\item Untergraph mit einem \enquote{Header} $d$, der (potentiell mehrere) Eingangskante von außerhalb besitzt
\item Wichtige Region: maximale Region mit $d$ dominiert alle Knoten der Region
\item Hierarchischer Flussbaum: Baum der Regionen
\end{itemize}
\item Rückwärtskante: Kante $(n,d)$ mit $d \geq \geq n$
\item Natürliche Schleife: \begin{itemize}
\item Rückwärtskante $(n, d)$ sowie alle Knoten $k$ mit $d \ge \ge k$ und es gibt einen Pfad von $k$ nach $n$ ohne $d$
\item Bestimmung mit Worklist-Algorithmus, der bei $n$ beginnt und rekursiv die Vorgänger bis $d$ durchläuft und in Menge aufnimmt
\end{itemize}
\item Suche nach Rückwärtskanten und natürlichen Schleifen in wichtigen Regionen ausreichend
\item \enquote{Unsaubere} Regionen: \begin{itemize}
\item ein Knoten dominiert nachgeordneten Zyklus
\item Erkennung durch Prüfung der Reduzierbarkeit des Graphs: \begin{itemize}
\item Entfernung der Rückwärtskanten aus KFG $\rightarrow$ azyklischer Graph, in dem jeder Knoten von der Wurzel erreicht werden kann $\Leftrightarrow$ KFG frei von unnatürlichen Schleifen
\item Alternative mit Transformationen: Am Ende Graph aus einem einzigen Knoten $\Leftrightarrow$ KFG reduzierbar (ohne Zyklen) \begin{description}
\item[T1-Transformation] Selbstschleifen aus Graph löschen
\item[T2-Transformation] Knoten mit eindeutigem Vorgänger mit diesem zusammenfassen
\end{description}
\end{itemize}
\end{itemize}
\end{itemize}
\section{Datenflussanalyse}
\subsection{Datenabhängigkeiten}
\begin{itemize}
\item Schreiben vor Lesen:
\item Schreiben vor Schreiben: Ausgabeabhängigkeit
\item Lesen vor Schreiben: Anti-Abhängigkeit
\end{itemize}
\section{Aliasanalyse}
\section{Induktionsvarianten und schleifeninvarianter Code}
\section{Schleifen und Arrays}
\section{Schleifentransformationen}
\section{Schleifenrestrukturierungen}
\end{document}