Show page source of インテル_コンパイラー_1000本ノックプロジェクト_p3 #49248

[[PageNavi(NavigationList)]]


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

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

{{{ html
<h6>表5 2009年9月28日時点でインテル コンパイラー 1000本ノックプロジェクトで公開しているソフトウェア</h6>
<table class="wikitable" border="1">

<tr><th>ソフトウェア名</th><th>説明</th><th>対応OS</th><th>解説</th></tr>
<tr><td>LAME</td><td>MP3エンコーダ</td><td>Windows、Linux</td><td>[#LAME コンパイル方法、パフォーマンス比較]</td></tr>
<tr><td>7-Zip</td><td>ファイル圧縮/展開ツール</td><td>Windows</td><td>[#7ZIP コンパイル方法、パフォーマンス比較]</td></tr>
<tr><td>Audacity</td><td>Windows</td><td>音声波形編集ソフト</td><td>[#AUDACITY コンパイル方法]</td></tr>
<tr><td>x264</td><td>H.264エンコーダ</td><td>Windows、Linux</td><td>[#X264 コンパイル方法、パフォーマンス比較]</td></tr>
<tr><td>FAAC</td><td>AACエンコーダ</td><td>Windows</td><td>[#FAAC コンパイル方法、パフォーマンス比較]</td></tr>
<tr><td>OpenSSH</td><td>SSHクライアント</td><td>Linux</td><td>[#OPENSSH コンパイル方法、パフォーマンス比較]</td></tr>
<tr><td>bzip2</td><td>ファイル圧縮/展開ツール</td><td>Linux</td><td>[http://sourceforge.jp/magazine/09/02/25/1244257/3 コンパイル方法、パフォーマンス比較]</td></tr>
<tr><td>ImageMagick</td><td>画像ファイル処理ツール</td><td>Windows</td><td>[http://sourceforge.jp/magazine/09/02/25/1244257/4 コンパイル方法、パフォーマンス比較]</td></tr>
<tr><td>Firefox</td><td>Webブラウザ</td><td>Windows</td><td>[http://sourceforge.jp/magazine/09/03/06/0822215 コンパイル方法、パフォーマンス比較]</td></tr>
<tr><td>MySQL</td><td>データベースシステム</td><td>Linux</td><td>[http://sourceforge.jp/magazine/09/02/18/1117225/4 コンパイル方法、パフォーマンス比較]</td></tr>

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

{{{ html
<h6>表6 パフォーマンス検証に使用した環境</h6>
<table class="wikitable" border="1">

<tr><th>スペック</th><th>Windowsでの検証環境</th><th>Linuxでの検証環境</th></tr>
<tr><td>OS</td><td>Windows Vista Business SP2</td><td>Debian GNU/Linux 5.0</td></tr>
<tr><td>CPU</td><td>Core 2 Duo E6550(2.33GHz)</td><td>Core i7 920(2.66GHz)</td></tr>
<tr><td>メモリ</td><td>2GB</td><td>3GB</td></tr>
<tr><td>コンパイラ</td><td>インテル コンパイラー 11.1、Visual Studio 2008</td><td>インテル コンパイラー 11.1、GCC 4.3.2</td></tr>

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

 LAMEのソースコードは[http://sourceforge.jp/projects/sfnet_lame/releases/ ダウンロードページ]から入手が可能だ。ここでは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割以上のパフォーマンス向上が見られている。

{{{ html
<h6>表7 Windows版LAMEのパフォーマンス比較</h6>
<table class="wikitable" border="1">

<tr><th>コンパイラ/コンパイルオプション</th><th>エンコード時間</th></tr>
<tr><td>Visual C++(/O2)</td><td>13.083秒</td></tr>
<tr><td>Visual C++(/O2)+アセンブラ</td><td>10.992秒</td></tr>
<tr><td>インテル コンパイラー(/Ox、/Qipo)</td><td>9.740秒</td></tr>
<tr><td>インテル コンパイラー(/Ox、/Qipo)+アセンブラ</td><td>8.692秒</td></tr>

</table>
}}}
{{{ html
<h6>表8 Linux版LAMEのパフォーマンス比較</h6>
<table class="wikitable" border="1">

<tr><th>コンパイラ/コンパイルオプション</th><th>エンコード時間</th></tr>
<tr><td>GCC(-O2)</td><td>8.610秒</td></tr>
<tr><td>GCC(-O2)+アセンブラ</td><td>7.216秒</td></tr>
<tr><td>インテル コンパイラー(-O3、-ipo)</td><td>7.348秒</td></tr>
<tr><td>インテル コンパイラー(-O3、-ipo)+アセンブラ</td><td>5.750秒</td></tr>

</table>
}}}


[[PageNavi(NavigationList)]]