Advanced Compilers CMPSCI 710 Spring 2003 Lecture 1 Emery Berger University of Massachusetts, Amherst
Administrivia Class format: Course website: Grades: Materials: I present material & work examples You take notes, read book & papers Course website: www.cs.umass.edu/~emery/cmpsci710/ Grades: 40% - 4 homework assignments (due dates to be announced) 60% - project Materials: Required text: Muchnick, Advanced Compiler Design Implementation (ACDI) Supplementary material: selected papers
Project Stuff 1 to 2 person teams Implement optimization/analysis in: Jikes RVM (IBM’s research Java compiler) Broadway (UTexas “metacompiler”) other (subject to approval) Due dates: 02/11/03: One-page project description. 02/25/03: 2-4 page project design. 03/25/03: Project implementation review. 04/29/03: Implementation due. 05/06-13/03: In-class presentations. 05/13/03: Project report.
Why Compilers Matter
What are Compilers, Anyway? Compiler: translates program in one language to executable program in other language Typically lowers abstraction level E.g., Java/C++ to assembler Optimizing compiler: Misnomer! Optimal compilation intractable Improves program performance
Performance Anxiety But does performance really matter? Computers are really fast Moore’s law (roughly): hardware performance doubles every 18 months Real bottlenecks lie elsewhere: Disk Network Human! (think interactive apps) At most 120 cps typing Waste time “thinking”
Compilers Don’t Help Much Do compilers improve performance anyway? Proebsting’s law (Todd Proebsting, Microsoft Research): Difference between optimizing and non-optimizing compiler ~ 4x Assume compiler technology represents 36 years of progress (actually more) Compilers double program performance every 18 years! Not quite Moore’s Law…
Argumentum Ad Absurdum Compilers don’t help much (Proebsting’s Law) Don’t use optimizer Computers are getting faster (Moore’s Law) Buy a new one – helps the economy too! Or: wait until one’s fast enough, then run program Hmmm…
A Big BUT Why use high-level languages anyway? Easier to write & maintain Safer (think Java) More convenient (think libraries, GC…) But: people will not accept massive performance hit for these gains Compile with optimization! Still use C and C++!! Hand-optimize their code!!! Even write assembler code (gasp)!!!! Apparently performance does matter…
Why Compilers Matter Key part of compiler’s job: make the costs of abstraction reasonable Remove performance penalty for: Using objects Safety checks (e.g., array-bounds) Writing clean code (e.g., recursion) Use program analysis to transform code: primary topic of this course
Analysis & The Holy Grail Other great uses for program analysis: Static error-checking Detect information leaks Avoid security holes Informing runtime system (e.g., GC) Even better optimizations! E.g., locality-improving transformations (“memory wall”) Holy Grail for compiler research: Programmer: writes simple but O(2^n) algorithm Compiler: changes it to O(n log n) (or O(1)!)
Levels of Analysis (in order of increasing detail & complexity) Local (single-block) [1960’s] Straight-line code Simple to analyze; limited impact Intraprocedural [1970’s – today] Whole procedure Dataflow & dependence analysis Interprocedural [late 1970’s – today] Whole-program analysis Tricky: Very time and space intensive Hard for some PL’s (e.g., Java)
Optimization = Analysis + Transformation Key analyses: Control-flow if-statements, branches, loops, procedure calls Data-flow definitions and uses of variables Representations: Control-flow graph Control-dependence graph Def/use, use/def chains SSA (Static Single Assignment)
Next Time Read ACDI Chapters 1, 2, 7 Next meeting might be in CS building