Moblinアプリケーションのクロスコンパイルとインテル コンパイラーによるパフォーマンス改善 5ページ

インテル コンパイラーとGCCとのパフォーマンス差は?

 さて、インテル Atom プロセッサー向け インテル アプリケーション・ソフトウェア開発ツール・スイートに含まれるインテル コンパイラーは「GCCよりも大幅に優れたパフォーマンスを提供します」とうたわれている。そこで、最後にGCCとインテル コンパイラーのパフォーマンス差について簡単ではあるがベンチマークを行った結果を紹介しよう。

 Linux環境ではさまざまなベンチマークツールがあるが、これらの多くはCPUの単純な演算性能やI/O性能、グラフィック性能を測るものであり、コンパイラの性能比較には利用しにくい。そこで、ここではファイル圧縮/展開ツールであるbzip2をGCCおよびインテル コンパイラーでコンパイルし、ファイルの圧縮/展開速度を比較した。使用したbzip2のバージョンは1.0.5だ。なお、bzip2のソースコードはbzip2のWebサイトからダウンロードできる。

bzip2のコンパイル

 bzip2のコンパイル設定はconfigureスクリプトではなく、付属のMakefileを直接編集して行う。まず、ダウンロードしたソースコードを適当なディレクトリに展開する。

$ tar xvzf bzip2-1.0.5.tar.gz

 Makefile冒頭でコンパイラや関連ツール、コンパイルオプションを設定するための変数が用意されているので、こちらを書き換える(リスト1)。

リスト1 Makefile中で編集を行う個所

# To assist in cross-compiling
CC=gcc
AR=ar
RANLIB=ranlib
LDFLAGS=

BIGFILES=-D_FILE_OFFSET_BITS=64
CFLAGS=-Wall -Winline -O2 -g $(BIGFILES)

# Where you want it installed when you do 'make install'
PREFIX=/usr/local

 設定する変数は、次の表6のとおりだ。

表6 bzip2のコンパイル設定
変数名 意味 GCCを利用する場合の設定 インテル コンパイラーを利用する場合の設定
CC 使用するコンパイラ i586-moblin-linux-gcc icc
AR 使用するアーカイバ i586-moblin-linux-ar xiar
RANLIB 使用するranlibツール i586-moblin-linux-ranlib
LDFLAGS リンカーに与えるオプション (なし) -L$(PKG_CONFIG_SYSROOT_DIR)/usr/lib -L$(PKG_CONFIG_SYSROOT_DIR)/lib
CFLAGS コンパイルオプション -Wall -Winline -O2 -g $(BIGFILES)(デフォルトのまま) -Wall -Winline -O2 -ipo -I$(PKG_CONFIG_SYSROOT_DIR)/usr/include -I$(PKG_CONFIG_SYSROOT_DIR)/include $(BIGFILES)
PREFIX 「make install」コマンドのインストール先 /tmp/bzip2_gcc /tmp/bzip2_icc

 Makefileの編集後「make」コマンドおよび「make install」コマンドを実行すると、PREFIX変数で指定したディレクトリ以下にバイナリが作成される。

$ make
$ make install

 次に、作成したバイナリ一式をMoblin環境にコピーする。本来はRPMパッケージを作成し、rpmコマンドでのインストールを行うのが推奨されているが、今回はテスト目的であるため、ファイル一式を直接Moblin環境の/usr/localディレクトリ以下にSCPでコピーしている。たとえばインテル コンパイラーで作成したバイナリの場合、次のように実行する。

$ cd /tmp/bzip2_icc
$ scp -r * root@<Moblin環境のIPアドレス>:/usr/local/

ベンチマークテストの実行環境と実行方法

 今回のテストでは、CPUとしてAtom N270(1.60GHz)を搭載するネットブック「EeePC 901」を使用した。スペックやそのほかの環境は次の表7のとおりだ。

表7 テストを実行した環境
構成要素 スペック
CPU Atom N270(1.60GHz)
メモリ 1GB
ストレージ ASUS-PHISON SSD TST2(8GB)
Linuxカーネルバージョン 2.6.31.6-17.1.moblin2-netbook

 ベンチマークではFirefox 3.6のソースアーカイブ(firefox-3.6.source.tar.bz2)を使用し、これを展開/圧縮するのにかかった時間をtimeコマンドで計測した。ストレージの読み書きによる影響を抑えるため、展開/圧縮した結果はディスクに書き出さないようにしている。

$ time bzip2 -d -c firefox-3.6.source.tar.bz2 > /dev/null (展開)
$ time bzip2 -z -c firefox-3.6.source.tar > /dev/null (圧縮)

 計測は合計4回行い、ディスクキャッシュの影響を抑えるため2回目〜4回目の値を有効な計測結果とした。得られた計測結果は次の表8、 図12のとおりだ。

表8 bzip2を使用したベンチマーク結果
操作 コンパイラー 1回目 2回目 3回目 平均
圧縮 インテル コンパイラー 284.311秒 283.442秒 284.739秒 284.16秒
GCC 339.414秒 339.375秒 339.954秒 339.58秒
展開 インテル コンパイラー 43.727秒 44.030秒 43.662秒 43.81秒
GCC 44.256秒 44.248秒 44.539秒 44.35秒
図12 bzip2によるベンチマーク結果
図12 bzip2によるベンチマーク結果

 圧縮については、インテル コンパイラーでコンパイルしたバイナリが、GCCでコンパイルしたものよりも2割近く高速という結果となった。また、展開処理については差は大きくないものの、こちらもインテル コンパイラーのほうが高速という結果が得られている。

 Moblinがターゲットとするネットブックやモバイルインターネット端末で採用されているAtom CPUは、一般的なPCで採用されているCore/Celeronシリーズと比べると処理性能が低いため、PC上ではあまり気にならなかった速度差も、Moblin上で実行すると大きく感じられる可能性がある。再コンパイルだけでパフォーマンスの向上を図れるインテル コンパイラーは、パフォーマンスが必要とされるアプリケーション開発において大きく役立つツールと言えるだろう。