インテル コンパイラーでオープンソースソフトウェアをコンパイルしよう
インテルの「インテル 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)。
用意されているドキュメントは数値演算系や画像処理系のソフトウェア/ライブラリが多いが、これらはインテル コンパイラーが得意とする領域であり、高速化が期待できる。もしこれらのソフトウェア/ライブラリを利用しているなら、インテル コンパイラーを試してみる価値があるだろう。
ソフトウェア | 説明 |
---|---|
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)。このようなバイナリは有志がコンパイルして配布していることが多く、公式版と比べてパフォーマンスが高いものが多いようだ。ただし、公開されているバージョンが古い場合もあるので注意してほしい。
ソフトウェア | 配布先/配布者 |
---|---|
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)。
バイナリ | レンダリング時間 |
---|---|
公式版(Visual C++ 2008 SP2) | 3:13:18 |
インテル コンパイラー版(SSE3対応) | 2:01:06 |
また、「インテル コンパイラーの実力を測る――インテル コンパイラー版MySQLは本当に速いのか?」記事では、インテル コンパイラーによるMySQLの高速化についても調査しているので、そちらも参照してほしい。