• ベストアンサー

コンパイラ:「CPUに最適化された実行コード」の意味とは

Visual Studioやgccなどの汎用コンパイラに比べて、インテル等のCPUメーカが出しているコンパイラの方が、そのCPUを使ったマシンでは格段に実行速度が速くなると言われます。そのことは概念的にはわかっているつもりなのですが、具体的に、CPUのどのような部分に、どのように適した実行コードが作られて早くなるのかがわかりません。なので理解していないのだと思います。 なにか参考になるページでも構いませんので、情報がありましたら教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

参考になりそうなのはこれかな。 http://homepage1.nifty.com/bee/bkey/optimize.html 最適化/値が変化しない参照の除外 辺りからそんな話が出てくるよ コンパイラによって吐くコードが若干違うけれど、より速くなったりする形で出してくれるって話だよね

aneja
質問者

お礼

お礼が遅くなって、どうもすみません。 早速のご回答、どうもありがとうございました。 教えていただいたページ、まさにこういう事を知りたかったので、大変参考になりました。

その他の回答 (2)

  • Gizensha
  • ベストアンサー率34% (207/608)
回答No.3

古い(さらに細かい)話ですと、より実効コストの低いコードをはき出すという手段がありました。 例:変数(CPUのAXレジスタ)を0にする場合  MOV AX,0 # 普通の考え方  XOR AX, AX # ちょっとひねった考え方 上の二つのコードはどちらもAXを0にしますが、CPUによって動作完了までのクロック数が違ったりします。 最近のCPUでは予測分岐やパイプラインといった、より複雑な機能で速度差が生じますので上の例ほど簡単ではありません。 後はマルチメディア系によく使われる浮動小数点演算などの専用拡張命令をどう使うかなども含まれるかもしれません。

参考URL:
http://ja.wikipedia.org/wiki/MMX
aneja
質問者

お礼

お礼が遅くなって、どうもすみません。 早速のご回答、どうもありがとうございました。 動作の結果が同じでも内部動作の効率が違うことがあるのですね。参考になりました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

今どきだと, 最適化レベルを間違えなければ gcc でも icc でもそんなに速度は違わない気がする. gcc では O0, icc では O2 がデフォルトの最適化レベルなので, このことを無視して「icc でコンパイルしたコードは gcc でコンパイルしたコードより速い」ということはできるけど, 実際には gcc でも O2 でコンパイルすると icc とほとんど変わらなかったりします. 確かにちょっとだけ icc の方が速かったけど, 非常に細かいアーキテクチャの違いまで組み込める分 icc の方が有利かなぁ, くらいの差だったような気がする. まあ, icc だと「ループが消える」とか「関数がごっそり消滅する」とかいう, 恐ろしい「最適化」がかかることもあるらしい.

aneja
質問者

お礼

お礼が遅くなって、どうもすみません。 早速のご回答、どうもありがとうございました。 ループや関数が消えたりするというのは、どっちも展開してしまっているんでしょうかね。gccは汎用だけど、linuxに限ればCPUで圧倒的なシェアを持っているインテルCPUに照準を合わせているところがあっても不思議ではない気がしてきました。

関連するQ&A

専門家に質問してみよう