-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy paththesis.tex
69 lines (56 loc) · 2.32 KB
/
thesis.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
\documentclass[11pt,article,oldfontcommands]{cpp-thesis}
\setlength{\parskip}{\medskipamount}
\title{Global Value Numbering in Factor}
\author{Alex Vondrak}
\degree{Master of Science}
\field{Computer Science}
\chair{Dr. Craig Rich}{Computer Science}
\memberA{Dr. Daisy Sang}{Computer Science}
\memberB{Dr. Amar Raheja}{Computer Science}
\quarter{Summer 2011}
\input{preamble}
\input{gls/acronyms}
\begin{document}
\frontmatter
\begin{ack}
\null
% Bah; ack header effectively kills joke---I want a dedication, dammit
\begin{vplace}[0.1]
\begin{center}
\textit{\Large To Lindsay---he is my rock}
\end{center}
\end{vplace}
\end{ack}
\begin{abstract}
\normalsize
Compilers translate code in one programming language into semantically
equivalent code in another language---canonically from a high-level language
to low-level machine primitives. Generally, the further removed a
language's abstractions get from those of a computer, the harder it gets to
compile code into an efficient representation. What isn't redundant in the
source language may map to repetitive target instructions that waste time
recomputing results. To combat this, compilers try to optimize away
redundancies by looking for values that are provably equivalent when the
program is run.
This thesis explores the theory and implementation of a particularly
aggressive analysis called global value numbering in a particularly
high-level language called Factor. Factor is a stack-based,
dynamically-typed, object-oriented language born in late $2003$. A baby
among languages (now at version $0.94$), its compiler craves all the
optimizations it can get. By altering the existing local value numbering
pass, redundancies can be identified and eliminated across entire programs,
rather than isolated regions of code. This induces speedups as high as
$45\%$ across the majority of benchmarks. The results from these
comparatively simple changes hold much promise for future improvements in
making Factor programs more efficient.
\newpage
\end{abstract}
\tableofcontents*
\listoffigures
\mainmatter
\input{sec/intro}
\clearpage\newpage\input{sec/primer}
\clearpage\newpage\input{sec/compiler}
\clearpage\newpage\input{sec/vn}
\renewcommand{\bibname}{References}\clearpage\newpage\printbibliography
\end{document}