2010-03-22

http://anond.hatelabo.jp/20100322042642

ほんと、そのへんが、プログラマの領域だと思う。

俺はそうは思わない

コンパイラの賢さを考えると、人間が注力すべきは、プログラム全体のアルゴリズムであって、姑息最適化じゃない

コンパイラが出力するコードは、人間が書くコードよりも、圧倒的に賢い

 

まず、基本ブロックの入れ替えが起るような、大域的な最適化は、手じゃ絶対に無理

例えば Lazy Code Motion (PLDI '92) を手でできる人はいないだろうし

partial redundancy elimination が扱っている冗長性を理解している人すら、あまりいないだろう

 

それに、局所的な最適化でもコンパイラ(を書いた人)のほうが賢い(ハードウェアに詳しい)

ターゲットマシンx86 で、レジスタを0で初期化するときに、gcc最適化オプション付けると

xorl %eax, %eax

ってなるけど

subl %eax, %eax

でも

movl $0, %eax

でも無く、xor が一番速い理由を知ってるやつとか、なかなかいないだろう

しかし、gccx86machine description を書いた人間は知っている

記事への反応 -
  • 「変なコードを書いてマシンを壊したりしてしまわないだろうか」という危惧ではない。 学べば学ぶほど現代のマシンのアーキテクチャの複雑さや最適なコードを組む難しさを思い知ら...

    • それが面白いところだと思うんだけどなぁ。 8ビットの演算を高速化するためにMMX使っていたり 同じコードがMMXない石(ARMとかな)用に32Bitレジスタを使って8Bit演算を2つ同時に行う(16...

      • ほんと、そのへんが、プログラマの領域だと思う。 俺はそうは思わない コンパイラの賢さを考えると、人間が注力すべきは、プログラム全体のアルゴリズムであって、姑息な最適化じ...

    • 遅くていいと思うけど。 早いコードが必要なのは全体のうちの10%以下だと思う。

      • 速い必要はないが、遅いのは論外だし、速くできない構造の設計は論外。 アホみたいにスパゲティになってたり、バグを防ぐために変な位置で多重にロックしてたりとか、どうにもなら...

    • Premature optimizationでググれ。話はそれからだ。 いや、何のプログラム書いてるの? そんなにスピードが必要って、かなり特別なことしてるんじゃないかと思うんだけど。

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん