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

新着トピックス

インテル コンパイラーと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-gccicc
AR使用するアーカイバi586-moblin-linux-arxiar
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 テストを実行した環境
構成要素スペック
CPUAtom 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秒
GCC339.414秒339.375秒339.954秒339.58秒
展開インテル コンパイラー43.727秒44.030秒43.662秒43.81秒
GCC44.256秒44.248秒44.539秒44.35秒

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

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