読者です 読者をやめる 読者になる 読者になる

ネギ式

適当に生きるおっさんのブログ

最高の最適化とは何もしないことである。

コンパイラは賢い。

たとえば、10万回ループするのにどのくらい時間がかかるかと思って、C言語でforループを書いたとしよう。初心者が書くと、ループの本体がない空のループを書くが、最適化オプションを付けないでコンパイルするので、まあ、初心者が驚くくらいの短い時間で処理が終了する。

で、最適化オプションをつけると速くなるが、まだtimeコマンドとかで計測しているので、起動終了処理の時間を測っているようなものだろう。(いや、実際にやらずに書いているからどうだかわからんが)

その後、clock() とかを使って測ってみると、ゼロになってしまう。ここで散々悩み、ループ内で足し算をするとか、xorをするとかして、時間を測るのだが、それでもゼロ。そこで、ループ回数を100倍にしたりするけど、やはりゼロ。もしや、と思ってxorした結果をプリント出力するとようやく計測可能な時間が出る。

コンパイラは賢いのだ。ループ内が空なら、やらなくてもいいと判断してやらない。ループ内が空でなくても、そこで計算した結果をどこでも使わないなら、やはりやらないのである。最高の最適化とは何もしないことだと知っているのだ。

それに対して、人間はどうだろう。まったくもって、無駄な仕事をし過ぎではないだろうか。コンパイラを見習って仕事を最適化しよう。最高の最適化とは何もしないことである。