109 lines
4.1 KiB
TeX
109 lines
4.1 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
|
|
\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 Bestimmung des ImmDomms: TODO
|
|
\item Dominatorbaum enthält jeden Knoten als Kind seines ImmDomms $\rightarrow$ Pfad zwischen $x$ und $z$ in Dominatorbaum $\Leftrightarrow$ $x >> z$
|
|
\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}
|
|
\subsection{Kontrollflussabhängigkeit}
|
|
|
|
\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}
|