言語理論とコンパイラ

第十四回: 最適化

2015 年 7 月 10日

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

Martin J. Dürst

AGU

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

目次

 

これからの予定

 

How to View Example Solutions

 

前回のまとめ

 

 

関数呼び出しのコード生成

関数呼び出しスタックの内容 (関数フレーム):

 

最適化の目的

 

最適化の手法

 

最適化の手段 (1)

複数の手法を繰り返し組み合わせて少しづつ最適化

 

最適化の手段 (2)

コードの量が増加しても、実行を加速

 

最適化の手段 (3)

機械に強く依存

 

命令の順番の変更の応用例

式: 5 * a

最適化前:

        CONST   R1, 5
LOAD R2, a ; LOAD は時間がかかる
MUL R3, R1, R2

最適化後:

        LOAD    R2, a
CONST R1, 5 ; LOAD の間、CONST も実行可能
MUL R3, R1, R2

 

最適化の実例

ソース

最適化なし (gcc -O0 -S code.c)

最適化済み (gcc -O1 -S code.c)

もっと最適化済み (gcc -O3 -S code.c)

(アセンブリ言語は Intel PC 用 (CISC))

gcc の最適化に関する設定項目: 英語日本語

 

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

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

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