インテル コンパイラー 1000本ノックプロジェクト 3ページ

インテル コンパイラーでコンパイル1000本ノック

 以上ではインテル コンパイラーを使用する際の基本的なポイントを紹介したが、もちろんソフトウェアによってはコンパイルのために上記以外の修正が必要な場合がある。そこで例として、「インテル コンパイラー 1000本ノックプロジェクト」で取り上げているオープンソースソフトウェアのいくつかについて、具体的なコンパイル例を紹介しておこう。

 2009年9月末時点で公開しているソフトウェアは、次の表5のとおりだ。また、このうちのいくつかについてはコンパイル方法やパフォーマンス比較も行っている。ここではLAMEや7-Zip、Audacity、x264といったソフトウェアについて触れているが、ここで挙げたソフトウェア以外についても随時追加・更新を行っているので、プロジェクトページの情報もチェックしていただきたい。

表5 2009年9月28日時点でインテル コンパイラー 1000本ノックプロジェクトで公開しているソフトウェア
ソフトウェア名 説明 対応OS 解説
LAME MP3エンコーダ Windows、Linux コンパイル方法、パフォーマンス比較
7-Zip ファイル圧縮/展開ツール Windows コンパイル方法、パフォーマンス比較
Audacity Windows 音声波形編集ソフト コンパイル方法
x264 H.264エンコーダ Windows、Linux コンパイル方法、パフォーマンス比較
FAAC AACエンコーダ Windows コンパイル方法、パフォーマンス比較
OpenSSH SSHクライアント Linux コンパイル方法、パフォーマンス比較
bzip2 ファイル圧縮/展開ツール Linux コンパイル方法、パフォーマンス比較
ImageMagick 画像ファイル処理ツール Windows コンパイル方法、パフォーマンス比較
Firefox Webブラウザ Windows コンパイル方法、パフォーマンス比較
MySQL データベースシステム Linux コンパイル方法、パフォーマンス比較

 なお、特に言及がない場合、本記事内でのパフォーマンス検証には次の表6の環境を用いている。

表6 パフォーマンス検証に使用した環境
スペック Windowsでの検証環境 Linuxでの検証環境
OS Windows Vista Business SP2 Debian GNU/Linux 5.0
CPU Core 2 Duo E6550(2.33GHz) Core i7 920(2.66GHz)
メモリ 2GB 3GB
コンパイラ インテル コンパイラー 11.1、Visual Studio 2008 インテル コンパイラー 11.1、GCC 4.3.2

MP3エンコーダ「LAME」

 「LAME」は、オープンソースのMP3エンコーダだ。GPL/LGPLで提供されており、高品質なエンコードが行えると言われている。LAMEは元々MP3のエンコードを行うライブラリ+コマンドラインフロントエンド、という構成だったが、現在ではさまざまなエンコードツールなどでMP3エンコーダとして採用されている。

 LAMEのソースコードはダウンロードページから入手が可能だ。ここでは2008年9月23日公開のlame 3.98.2を使用した。lame 3.98.2の配布アーカイブ(lame-398-2.tar.gz)にはUNIX/Linux環境でコンパイルを行うためのconfigureスクリプトのほか、Visual Studio向けのプロジェクトファイルや、Mac OS Xの開発環境であるXcode向けのプロジェクトファイルなども含まれている。

 Windows環境でインテル コンパイラーを用いてLAMEをコンパイルするには、このプロジェクトファイルを利用するのが簡単だ。まず、使用しているVisual Studioのバージョンに対応するVisual Studioのプロジェクトファイルを開く(たとえばVisual Studio 2005/2008の場合は「lame_vc8.sln」)。続いてソリューション エクスプローラで「ソリューション ‘lame_vc8’」を選択し、ツールバーもしくはショートカットメニューの「インテル(R)C++を使用」をクリックする。あとはプロジェクトのプロパティでコンパイルオプション等を設定し、「ソリューションのリビルド」を実行するだけだ。

 またLinux環境では、次のようにコンパイラやリンカー、ライブラリ/アーカイブ管理ツールを指定してconfigureスクリプトを実行した後、makeコマンドおよびmake installコマンドを実行すれば良い。なお、コンパイルオプションは「CFLAGS」で指定できる。

$ ./configure CC=icc CFLAGS="-O3 -ipo" LD=xild AR=xiar
$ make
$ sudo make install

パフォーマンス検証

 パフォーマンスの検証には、先述のLAMEのコマンドラインフロントエンド(lameコマンド)を使用した。約3分30秒のWAVE形式ファイルをデフォルト設定でMP3にエンコードし、かかった時間を測定・比較した。

 なお、LAMEのソースコードにはアセンブラで記述されたコードも含まれており、コンパイル時の設定でアセンブラ版のコードを使用するかどうかを選択できる。そのため、ここではアセンブラを利用する場合と利用しない場合についてもそれぞれ性能比較を行っている。

 さて、実行結果であるが、表7、8のとおりとなった。Windows版、Linux/Mac版ともにインテル コンパイラーを使用することで1割以上のパフォーマンス向上が見られている。

表7 Windows版LAMEのパフォーマンス比較
コンパイラ/コンパイルオプション エンコード時間
Visual C++(/O2) 13.083秒
Visual C++(/O2)+アセンブラ 10.992秒
インテル コンパイラー(/Ox、/Qipo) 9.740秒
インテル コンパイラー(/Ox、/Qipo)+アセンブラ 8.692秒
表8 Linux版LAMEのパフォーマンス比較
コンパイラ/コンパイルオプション エンコード時間
GCC(-O2) 8.610秒
GCC(-O2)+アセンブラ 7.216秒
インテル コンパイラー(-O3、-ipo) 7.348秒
インテル コンパイラー(-O3、-ipo)+アセンブラ 5.750秒