![]() |
HPC/並列プログラミングポータルでは、HPC(High Performance Computing)プログラミングや並列プログラミングに関する情報を集積・発信しています。 |
[記事一覧を見る]
以上ではインテル コンパイラーを使用する際の基本的なポイントを紹介したが、もちろんソフトウェアによってはコンパイルのために上記以外の修正が必要な場合がある。そこで例として、「インテル コンパイラー 1000本ノックプロジェクト」で取り上げているオープンソースソフトウェアのいくつかについて、具体的なコンパイル例を紹介しておこう。
2009年9月末時点で公開しているソフトウェアは、次の表5のとおりだ。また、このうちのいくつかについてはコンパイル方法やパフォーマンス比較も行っている。ここではLAMEや7-Zip、Audacity、x264といったソフトウェアについて触れているが、ここで挙げたソフトウェア以外についても随時追加・更新を行っているので、プロジェクトページの情報もチェックしていただきたい。
ソフトウェア名 | 説明 | 対応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の環境を用いている。
スペック | 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 |
「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割以上のパフォーマンス向上が見られている。
コンパイラ/コンパイルオプション | エンコード時間 |
---|---|
Visual C++(/O2) | 13.083秒 |
Visual C++(/O2)+アセンブラ | 10.992秒 |
インテル コンパイラー(/Ox、/Qipo) | 9.740秒 |
インテル コンパイラー(/Ox、/Qipo)+アセンブラ | 8.692秒 |
コンパイラ/コンパイルオプション | エンコード時間 |
---|---|
GCC(-O2) | 8.610秒 |
GCC(-O2)+アセンブラ | 7.216秒 |
インテル コンパイラー(-O3、-ipo) | 7.348秒 |
インテル コンパイラー(-O3、-ipo)+アセンブラ | 5.750秒 |
[ページ情報]
更新日時: 2009-11-18 20:48:40, 更新者: hiromichi-m
[権限]
表示:無制限, 編集:ログインユーザ, 削除/設定:メンバー