無料で30%のパフォーマンスUP!! - intel compiler

最近、雑誌の記事でよく見かけるようになった、Intel Compiler 通称 icc ですが、Linux系にプリインストールされる gcc と比較して re-compile するだけで概ね 30 % 程度の高速化が図れるようです。
 
試しに、当サイトで配布している「高速半角全角ライブラリ」で検証してみました。

gcc - compile版
 [h2z]Drk::Encode[1000000]LOOP TIME=13
 [z2h]Drk::Encode[1000000]LOOP TIME=13
icc - compile版
 [h2z]Drk::Encode[1000000]LOOP TIME=10
 [z2h]Drk::Encode[1000000]LOOP TIME=10
とウワサ通りの高速化が実現できてしまいました。実は version 6 の頃に試用したことがあったのですが、 gcc との互換性が低くて使い物になりませんでした。現在は version 8.1 ですが、かなりのレベルで gcc と互換性があると思いました。コンパイル時に warning がたくさんでますが、実行にはそれほど差し支えないものと思われます。
 
当サイトでサービス提供している Amazon Search はコアが C++ で記述されているので、早速 re-compile してみました。warning が大量に出ましたが、正常に動作しました。benchmark は撮ってませんが、体感速度も向上しました。
 
Intel Compiler を利用する利点をまとめますと、
  • CPU 毎に最適化。かつ gcc を超える高度な最適化。(CPU と Compiler の製造が同じ会社ならではなせる技!)
  • gcc との互換性は、ほぼ問題なし
  • Linux での個人利用(非営利目的)の場合は無料(非サポートとなります)
- スポンサーリンク -


Intel Compiler のインストール方法は次の通りです。

  • Intel® C++ Compiler for Linux をダウンロードします(メールアドレス登録必要)。
  • メールで送られてくるライセンスファイルとダウンロードしたファイルを /usr/local/src あたりに保存。
  • tar xvfz l_cc_pu_8.1.024.tar.gz
    cd l_cc_pu_8.1.024
    source ./install.sh
    ※途中でライセンスファイルの場所を聞いてくるので、/usr/local/src とか入力。
  • 僕の環境だけかもしれないが、icc / icpc / iccvars.sh が旨くインストールできていなかったので、手動で設定反映。
    mv icc icc.bk
    cp icc.abs icc
    chmod 755 icc
    mv icpc icpc.bk
    cp icpc.abs icpc
    chmod 755 icpc
    mv iccvars.sh iccvars.sh.bk
    cp iccvars.sh.abs iccvars.sh
    chmod 755 iccvars.sh
    echo '
    source /opt/intel_cc_80/bin/iccvars.sh
    export GXX_ROOT=/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/
    export GXX_INCLUDE=/usr/include/c++/3.2.3/
    '>> /etc/bashrc
    source /etc/bashrc
で完了です。今後は ./configure を行う際に、「CC=icc ./configure」のようにすれば icc を使ってコンパイルができるようになります。いちいち icc を指定するのも面倒な人は乱暴ですが、
  • cp /usr/bin/gcc /usr/bin/gcc.3.2.3
    mv /usr/bin/gcc /usr/bin/gcc.bk
    ln -s /opt/intel_cc_80/bin/icc /usr/bin/gcc
としても良いかもしれません。
コンパイルオプションですが、マニュアルを熟読しないととても使いこなせそうにありませんが、取りあえず
  • CFLAGS="-O3 -tpp7 -xWNB -axWNB -ip" ./configure
で十分なパフォーマンスが得られると思います。
- スポンサーリンク -