Code-Selektion mittels Dynamischer Programmierung

This commit is contained in:
Marco Ammon 2020-06-26 15:42:17 +02:00
parent f7c027804a
commit 87d6acd740
2 changed files with 15 additions and 2 deletions

Binary file not shown.

View File

@ -292,6 +292,21 @@
\item Auftrennung des Baumes, wenn Teilbäume mehr Register als verfügbar benötigen $\rightarrow$ Teilbaum vor Auswertung des übrigen Baums im Speicher auswerten
\end{enumerate}
\subsubsection{Dynamische Programmierung}
\begin{enumerate}
\item Rekursives Berechnen eines Kostenfelds $C[i]$ für jeden Knoten des Baums und $0 \leq i \leq \vert R\vert$ ($R$ Register der Zielarchitektur):\begin{itemize}
\item $C[i]$: Kosten der Auswertung des Teilbaums in ein Register, sofern $i$ Register zur Verfügung stehen:\begin{enumerate}
\item Für alle möglichen Maschinenbefehle $x$ alle möglichen Auswertungsreihenfolgen $y$ der Registeroperanden als $C[x, y, i]$ berechnen: erster Operand hat $i$ Register, zweiter $i-1$ Register, etc. zur Verfügung
\item $C[x, y, i] = $ Summe der Kindkosten bei Auswertungsreihenfolge $y$ $+$ Kosten des Befehls $x$
\item $C[i] = \min C[x, y, i]$, dann mit $x$ und $y$ des Minimums annotieren
\end{enumerate}
\item $C[0]$: Kosten der Auswertung des Teilbaums, wenn alle Register zur Verfügung stehen, aber Ergbenis am Ende in Speicher geschrieben wird (ergo $C[j] + 1 $)
\end{itemize}
\item Rekursives Auftrennen des Baums, wenn Ergebnis in Speicher abgelegt wird (aus annotiertem Befehl ersichtlich)
\item Ablegen der Teilbäume in Schlange (\enquote{untere Bäume zuerst})
\item Code-Generierung durch Abarbeitung der Schlange und Code-Generierung der jeweiligen Teilbäume
\end{enumerate}
\subsection{Ohne Registerzuteilung}
\subsubsection{Baumtransformationen}
@ -310,8 +325,6 @@
\item Parsen des Baumtexts mit Maschinengrammatik emittiert den Maschinencode (dabei Mehrdeutigkeit nach Heuristik auflösen)
\end{enumerate}
\subsubsection{Dynamische Programmierung}
\section{Registerzuteilung}
%\printbibliography
\end{document}