FedoraにインテルC++コンパイラ(Ver.11)をインストールする
デュアルコアマシンで自作プログラム(もちろん並列処理は一切考えない)を動かしても1つのコアでしか処理しないので場合によってはシングルコアマシンよりも不利になる。
私の数値計算プログラムも、自分のマシン(ThinkPad R61 Core2Duo 1.8GHz)上でG++でコンパイルして動かすときは片コアのみが100%になっているが、もう片コアは遊んでいる。
普段研究室にいるときは割り当てられた研究室のマシン(Pen4 3.4GHz)で動かせばいいが、常に研究室のマシンとつながっているわけにはいかないのでR61のCPUをフルに使って自作プログラムを動かすことを考えた。
しかし、OpenMPやスレッドなどは手軽にできそうにない。そこでインテルコンパイラの自動並列化機能を使うことにした。これならコンパイル時に「-parallel」オプションを与えるだけで済む。(現時点ではコード内で効率的な並列化を指示できないと思った)
というわけで、まずはインテルC++コンパイラをインストールする。
Link:インテル ® C++ コンパイラ Linux* 版のダウンロード
ここからインテルコンパイラの最新版(11.0)をダウンロードしてくる。(今回はFedora 8 32bit版なのでIA-32版をダウンロードした。64bit版ならintel(R) 64版だろう。IA-64は80x86ベースじゃないし。)
インストールはダウンロードしてきたアーカイブを解凍し、生成されたディレクトリ内に移動して
# ./install
とすればインストーラーが起動するので、インストーラーの指示に従ってインストールする。(事前にcompat-libstdc++関連をインストールしておく)
また、インストール中にサポートしてないバージョンと警告されても無視してインストール。(バージョン11.0はFedoraの場合は9をサポートしてる)
インストールが完了してもiccコマンドなどを使えるようにするには環境変数の設定やインストール先にPATHを通さなくてはならないが、これらをやってくれるスクリプトが付属している。だけど、このスクリプトはコンパイルの度に実行しなくてはならないようなので、自動で読み込まれるようにする。
# cd /etc/profile.d/
# ln -s /opt/intel/Compiler/11.0/074/bin/ia32/iccvars_ia32.* ./
次にインテルコンパイラのライブラリを共通ライブラリに登録しておく。
# echo "/opt/intel/Compiler/11.0/074/lib/ia32/lib" > /etc/ld.so.conf.d/icclib.conf
# ldconfig
これでiccコマンドでコンパイルできるようになる。試しに
$ icc -O2 -march=core2 -parallel myProgram.cpp
こんな感じでコンパイルして実行してみたら、両コアを使って処理をするようになり、速度があがった。
ただし、計算方法によって並列化の度合いは変わるので注意。例えば連立方程式の反復解法の場合、Gauss-Seidel法はあまり並列化の恩恵を受けないが(GSのアルゴリズムを見ればわかる)、共役勾配法は並列化によってかなり速くなる。
| 固定リンク
| コメント (0)
| トラックバック (0)
最近のコメント