HPC/並列プログラミングポータルでは、HPC(High Performance Computing)プログラミングや並列プログラミングに関する情報を集積・発信しています。

新着トピックス

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

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

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

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

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

表6 パフォーマンス検証に使用した環境
スペックWindowsでの検証環境Linuxでの検証環境
OSWindows Vista Business SP2Debian GNU/Linux 5.0
CPUCore 2 Duo E6550(2.33GHz)Core i7 920(2.66GHz)
メモリ2GB3GB
コンパイラインテル コンパイラー 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秒