インテル製コンパイラを使ってみよう (1)

技術系 blog (?) らしく, 今日から 「インテルコンパイラを使ってみよう」 と題して, Linux 上でインテルコンパイラを用いて手元の HPC アプリケーション ・ プログラムの高速化にチャレンジしていこうと思います. Supcom 自身は実をいうと理論系に近い研究をしていますので, Xeon 搭載 PC クラスターを使用していながら 「コンパイルするだけで 30 % 高速化」 されると言われているインテルC/C++ コンパイラの使用をさぼってきました. Blog のネタとして非常によいと思われますので, これを期にインテルコンパイラの使用環境を整えようと思います.

で,僕の環境ですが, このブログを書いている Note PC の VMware 上に Linux (debian) を入れて使っています. 仕事場でメインで使っている環境も似たようなもので, LinuxVMware 上で動かしています. この連載 (?) では, そのマシンに非商用版のインテルコンパイラをインストールしてみます.

ライセンスの取得

まずは非商用版のライセンスを取得します.http://www.intel.com/software/products/geo/jpn/compilers/clin/noncom.htm からライセンスの申請ができます. 質問に答えてメールアドレスを入力するとライセンスファイルがメールに添付されて送られてきます.

お試し実行程度や高速化の評価程度でしたら非商用ライセンスでよいようですが, 研究に使ったりするのはアウトのようです. その場合はアカデミックライセンスを購入しましょう. 非商用ライセンスに関しては http://www.intel.com/cd/software/products/asmo-na/eng/219692.htm に FAQ があります.

ダウンロード

送られてくるメールにはダウンロード先の URL も載っているので, そこから tar.gz 形式のバイナリをダウンロードします. リンク先では「インテルコンパイラ 8.1」 となってますが, 最新版の 9.0 をダウンロードすることができます. ファイルは結構でかくて 201,217,259 byte もありますので, 注意してください.

インストール

tar.gz ファイルを展開すると INSTALL.txt というファイルができるので, 基本的にそこに書いてあるとおりに行えばオッケーです. バージョンによって違うかもしれませんが, 基本的に install.sh を実行すればよいようです. ルートになってから

 # ./install.sh

で,インストールスクリプトを実行します. あとは画面の指示に従うだけです. 途中シリアル番号かライセンスファイルの場所を聞いてくるのでライセンスファイルを選んでから,メールで来たファイルを適当な場所に保存して, そのファイル名を指定します. インストール中 Supcom は Eclipseプラグインのインストールでインストールスクリプトが止まってしまいました. とりあえず Eclipseプラグインは必要ないので, 一端 Ctrl-C で停止して, 再度インストール. フルインストールではなく, カスタムインストールでインストールを終えました.

/opt/intel/cc/9.0/bin 以下に環境変数設定用のスクリプト iccvars.sh が用意されていますので, .bashrc などから実行するようにします. Bash の設定用のファイルである .bashrc

source /opt/intel/cc/9.0/bin/iccvars.sh

と追加しとけばよいでしょう. ただし, これだとマニュアルページがどうのうというエラーが出ますので (スクリプトが変なようです.環境依存かも), Supcom はスクリプトをいじって, エラーをでないようにしました (スクリプトの内部を見ると man -w を実行しているのですが, RedhatDebian で挙動に違いがあるのかも).

サンプルプログラムをコンパイル

ちゃんとコンパイラが動くかどうか, 簡単なプログラムをコンパイルさせてみます.

 /* hello.c */
 #include 
 
 int main(int argc, char * argv[]){
   printf("Hello world!\n");
   exit(0);
 }

毎度おなじみの Hello World プログラムです. で,こいつを hello.c というファイル名で保存し, コンパイルしてみます. コンパイラを実行するコマンドは icc です.

 $ icc -o hello hello.c

問題がなければ hello という実行バイナリができているはずです. では実行してみましょう.

 $ ./hello
 Hello world!
 $

と出れば成功です.

というわけで,無事動きました. 今日はここまで.


環境変数の設定方法に間違いがありましたので訂正しました.