2012-04-02

Cコンパイラーの比較

Willus.com's 2011 Win32/64 C Compiler Benchmarks

これはすごい。Windows上で動くCコンパイラーを様々な面から比較している。ベンチマークに使ったソースコードは、すべて純粋なC言語である。アセンブリやインラインアセンブリは無効にしてある。これは純粋なCコンパイラーの性能を図るためだからだ。

まず、コンパイラー自体の問題がある。Intelのコンパイラーは、デブすぎるにもほどがある。Intelのパッケージだけで1.6GiBもあるのに、これにさらにVisual Studioを別途インストールしなければ使えない。さらに、Intelのインストーラーは40個以上もの別個のソフトウェアをインストールする。それぞれ、バッチスクリプト用にPATHを追加するので、PATH環境変数に何十個も追加されることになる。Windows 7では、インストール済みのソフトウェアのソートができるが、この時ほど便利だと思ったことはない。インストールすると10GiBぐらいのディスク容量を食う。ちなみに、Intelのコンパイラーをアンインストールするには、リアルで10分もかかった。これと対極にあるのはTCCだ。小さい!

次に、いくつかのコンパイラーは、巨大な静的配列のコンパイルに問題を抱えている。特に、Digital MarsやMSVCは1990年代に生きているらしく、64KiB以上の文字列リテラルが静的に初期化できない。Digital Marsは3MiB以上もの文字配列を使っているコードをコンパイルしようとするとメモリが不足する。コンパイラーは32bitコードだから、2GiBのメモリが使えるはずであるのにも関わらずだ。

今回試したコンパイラーでC99をサポートしているのは、gccとIntelだけなので、x264のテストはこのコンパイラーでしか行えない。

実行時のパフォーマンスが一番良かったのは、Intelのコンパイラーである。ただし、2002年と比べて、Intelの優位性は下がっている。自動的な並列化は、Intelの圧勝となっている。gccはこの点で大きく遅れている。gccの自動的な並列化は、並列化させるための意図的なコードを書いてようやく発現させられるレベルである。また、プロファイルによる最適化は、Intelでは明白なパフォーマンスの向上がある。gccでは、パフォーマンス向上はほとんどない。また、64bitコードへのコンパイルは、全体的にパフォーマンスを上げる。ただし、MSVCでは何故かパフォーマンスが下がる場合があるのだが。

No comments:

Post a Comment

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.