Code Optimization

(最適化)

14th lecture, July 7, 2017

Language Theory and Compilers

http://www.sw.it.aoyama.ac.jp/2017/Compiler/lecture14.html

Martin J. Dürst

AGU

© 2005-15 Martin J. Dürst 青山学院大学

Today's Schedule

 

Remaining Schedule

 

Summary of Previous Lecture

 

Homework 1: Code Generation for Logical And

 

Homework 1: Example Solution

 

Homework 2: Code Generation for for Statement

 

Homework 2: Example Solution

 

Leftovers From Last Lecture

 

Goals of Optimization

Compilers provide options to choose different levels of optimization

 

Optimization Methods

 

Optimization Techniques: Faster and Smaller

Repeatedly try to use different techniques to continuously optimize the code further
(good example for Ruby implementation (video))

 

Optimization Techniques: Faster but Larger

Make execution faster even if the amout of code may increase

 

Optimization Techniques: Machine Dependent

Highly dependent on machine type

 

Example of Instruction Reordering

Expression: 5 * a

Before optimization:

        CONST   R1, 5
LOAD R2, a ; invisible waiting time
MUL R3, R1, R2

After optimization:

        LOAD    R2, a
CONST R1, 5 ; executed while LOAD still in progress
MUL R3, R1, R2

 

Dynamic Compilation

 

Examples of Actual Optimization

source

without optimization (gcc -O0 -S code.c)

with optimization (gcc -O1 -S code.c)

much more optimized (gcc -O3 -S code.c, with parallel processing instructions)

(assembly language for Intel PCs (CISC))

Optimization options for gcc: English, Japanese

 

授業改善のための学生アンケート

WEB アンケート

お願い: 自由記述に必ず良かった点、問題点を具体的に書きましょう

(悪い例: 発音が分かりにくい; 良い例: さ行が濁っているかどうか分かりにくい)

 

Glossary

peephole optimization
ピープホール最適化
control flow analysis
制御フロー解析
basic block
基本ブロック
data flow analysis
データフロー解析
constant folding
静式評価、定数たたみこみ
constant propagation
定数伝播
dead code elimination
無用命令の削除
function inlining
関数呼び出しの展開
loop unrolling
繰り返しの展開
dynamic compilation
動的コンパイル