プログラミング言語における最適化について
(1)
- プログラミング言語(コンパイラ)で最適化というと、「静的単一代入(SSA)形式への変換」などの難しいイメージが先行して、もはや普通のプログラマは手出しせずにLLVMに任せてしまうのが普通になってしまった感じがします(私の思い込みかもしれませんが)。
- そのためにLLVMをバックエンドに選ぶ人もいるくらいです。
- しかしHLXで最適化についてあれこれと実験してみた経験から言うと、最適化処理はそれほど難しいものではありません。いや難しくしようと思えば難しくできそうですし、そうすればもっと高度な最適化ができそうですが、でもそこまではできなくても、たいていは十分に役立つのです。
- どうにかしてその「感じ」をうまく伝えたいです。
(2)
- 最適化はいろいろありますが、派手な効果が出るのは、以下の4つです。
- [1]コンパイル時に答えが確定しているものは、定数に置き換えてしまう。
- [2]結果が利用されない命令は消す。
- [3]決して通ることがない命令列は消す。
- [4]ループをアンロールする。
- これに加えて、最適化を楽しむために、「最適化を頑張らない、深入りしない」というのもあります。
- それぞれ説明します。
こめんと欄