インテル コンパイラーでオープンソースソフトウェアをコンパイルしよう

 インテルの「インテル C++ コンパイラー」は高速なバイナリを生成するということで知られている。いっぽうWindowsの世界ではマイクロソフトのVisual C++が、LinuxではオープンソースのGCCが事実上標準のコンパイラになっており、多くのオープンソースソフトウェアはこれらのコンパイラでコンパイルされている。そのため、利用したいソフトウェアがインテル コンパイラーでコンパイルできるのか興味のある人も多いだろう。また、Visual C++やGCCでコンパイルされたものと比べ、どのくらいパフォーマンスが違うのかも気になるところだ。

 インテル C++ コンパイラーはVisual C++やGCCとの互換性を備えているものの、完全に同一というわけではない。そこで、有名なオープンソースソフトウェアについてインテル C++ コンパイラーでのコンパイルを行い、どの程度の修正でコンパイルが可能なのか、またそのパフォーマンスはどうなのか、調査してみよう。

 なお、今回の記事ではインテル C++コンパイラー 11.0の無償体験版を使用している。この体験版はインテル コンパイラーの国内代理店であるエクセルソフトのWebサイトからダウンロード可能だ。ぜひ読者の皆さんも手元でインテル コンパイラーを試してほしい。

オープンソースソフトウェアでも実績が多いインテル コンパイラー

 実際の作業を説明する前に、まずはインテル コンパイラーでのコンパイルを利用するにあたって役に立つであろう資料を紹介しておこう。

 まず、インテル コンパイラーのもっとも貴重な情報源となるのが、開発元であるインテルのWebサイトである。インテルのWebサイトでは、LinuxカーネルやSTLport、POV-rayなどのソフトウェアについて、インテル コンパイラーでのコンパイル方法を解説したドキュメントが公開されている(表1)。

 用意されているドキュメントは数値演算系や画像処理系のソフトウェア/ライブラリが多いが、これらはインテル コンパイラーが得意とする領域であり、高速化が期待できる。もしこれらのソフトウェア/ライブラリを利用しているなら、インテル コンパイラーを試してみる価値があるだろう。

表1 インテルのWebサイトで公開されているオープンソースソフトウェアのコンパイル解説ドキュメント
ソフトウェア 説明
Linuxカーネル OS
PGPLOT プロット画像作成ライブラリ
NCAR ドロー画像ライブラリ
WRF 気象モデリングシステム
HDF5 クラスタライブラリ
UPC 並列言語処理系
FFTW 高速フーリエ変換ライブラリ
stlport C++標準ライブラリ
POV-Ray 3D画像レンダラー
NetCDF 科学用データフォーマットライブラリ
Open MPI 並列化ライブラリ
HPCC bnechmark ベンチマークツール
ACE+TAO 分散コンポーネント
Xerces XML処理ライブラリ
Quantlib 金融/財務処理ライブラリ

 また、ソフトウェアによってはVisual C++やGCCでコンパイルしたバイナリだけでなく、インテル コンパイラーでコンパイルしたバイナリも配布されている場合がある(表2)。このようなバイナリは有志がコンパイルして配布していることが多く、公式版と比べてパフォーマンスが高いものが多いようだ。ただし、公開されているバージョンが古い場合もあるので注意してほしい。

表2 インテル コンパイラーでコンパイルされたバイナリが配布されているソフトウェア例
ソフトウェア 配布先/配布者
MySQL 公式ダウンロードページ
Blender WoogieWorks Animation Studio
FFTW Franz Franchetti
x264 seraphyのプログラム公開所(「x264 詰め合わせ」の「おまけ」以下)
lame RAREWARES

 例えば、上記で配布されているBlenderのインテル コンパイラー版バイナリを使い、Core 2 Duo E6550(2.33GHz)を搭載したマシンでBlender Render Benchmarkで配布されているテストファイルをレンダリングしたところ、公式版よりも1.5倍程度高速であった(表3)。

表3 Blenderでテストファイル(test.blend)のレンダリングにかかった時間(3回の平均)
バイナリ レンダリング時間
公式版(Visual C++ 2008 SP2) 3:13:18
インテル コンパイラー版(SSE3対応) 2:01:06

 また、「インテル コンパイラーの実力を測る――インテル コンパイラー版MySQLは本当に速いのか?」記事では、インテル コンパイラーによるMySQLの高速化についても調査しているので、そちらも参照してほしい。