#keywords(x86_64,Intel64,Intel Compiler,インストール)
* Intel64アーキテクチャでのインストール &Vine5; [#v47d7f80]
#anno1(2010-03-16 : by どぶお)
&color(red){''この記事はIntel64(x86_64)アーキテクチャ上でのIntel Compiler 32/64のインストール方法を解説したものです。''};
~
Intel CompilerをIntel64アーキテクチャ上のVineにインストールするには少々手間がかかります。引っかかる点は以下。
+ libstdc++.so.5の32bitライブラリが標準でビルドされていない
+ libgccおよびglibcの32bitライブラリのパッケージ名をインストーラが認識しない
インストーラを使わずに直接RPMでインストールすれば(2)の問題はスキップできますが、インストーラを使う場合(2)がなかなかやっかいでした。意外と苦労しましたが無事にインストーラでのインストールに成功しましたのでメモしておきます。~
:動作確認|
VirtualBox 3.0.12上に構築したx86_64環境下、Intel Compiler Ver.11.1.046で確認しました。~
CNS 1.21をOpenMPなしでビルドしてベンチマークの動作を確認しました。OpenMP版はVirtualBox上で試したところ、途中でセグメントエラーが出ましたが、実機では試していません。
** 準備 [#td425df0]
*** 必要なパッケージのインストール [#t79e6059]
まず、aptで必要なパッケージをインストールしておきます。
- lsb
- libstdc++3
- java-1.6.0-sun-devel (オプショナル) -- インストールしなくてもよい
- java-1.6.0-sun-devel -- インストールしなくてもよい
** 32bitライブラリの確認 [#l4a74460]
Intel Compilerは64bit版でもlibstdc++.so.6、libstdc++.so.5、libgcc、glibcの32bit版を要求しますが、Vine5ではそれらの検索がうまく行かずに「パッケージが見つからない」というエラーが出てしまい、そのままではインストールができません。やっかいなのはlibgccおよびglibcで、それらの問題は少しトリッキーな方法で解決します。
*** libstdc++.so.5 [#n1a8d327]
32bit版のlibstdc++.so.5はgcc-3.3.6パッケージに含まれているのですが、標準ではビルドされません。''%_with_compat32''をセットしてパッケージをリビルドして作成しました。なおlibstdc++.so.6の32bit版はlibstdc++34に含まれているようです。
- &ref(compat32-libstdc++3-3.3.6-3vl5.i386.rpm); -- ビルドしたもの
このパッケージをインストールすることで32bit版libstdc++.so.5が導入されます。
# rpm -ivh compat32-libstdc++3-3.3.6-3vl5.i386.rpm
- 参考:[[VineでTLS対応glibc>どぶお/Linuxで遊ぼう!/VineでTLS対応glibc#o128228a]] -- .rpmmacrosの設定について
*** libgcc [#h2e66a4f]
libgccは以下のスクリプトでチェックされるようです。
if ! echo $(file /lib/libgcc_s.*) | grep -i '32-bit' > /dev/null; then
echo -n
else
LIB_GCC_MISMATCH=0
fi
ここのスクリプトでは''/lib/libgcc_s.*''のファイルをチェックしていますが、Vine5では''libgcc_s-4.1.2-20080708.so.1''というファイル名になっているため、検索されません。libgcc_s.so.1というシンボリックリンクがありますが、シンボリックリンクでは''file''コマンドではリンクを追いかけないので(本来なら-Lオプションが必要)、内容を認識しません。この問題を解決するためには、ちょっと力業ですがlibgccを''ハード''リンクで処理します(コピーだと仮にlibgccファイルが更新されたとき内容が不一致になるので)。別にlibgcc_s.so.1をハードリンクにしてもいいとは思いますが、何となく。
# cd /lib
# ln libgcc_s-4.1.2-20080708.so.1 libgcc_s.so.1-4.1.2-20080708
*** glibc [#v303d20b]
glibcは以下のスクリプトでチェックされるようです。
if IA32_GLIBC=$(rpm -qa | grep -i 'glibc-32bit' 2> /dev/null ); then
LIB_GLIBC_MISMATCH=0
fi
そのため、''glibc-32bit''という名前のパッケージが必要なのですが、Vine5では''compat32-glibc''なので認識されません。従ってこの問題を解決するためにダミーパッケージであるglibc-32bitをインストールします。RPMデータベースにglibc-32bitというエントリを追加するだけの単純なパッケージです。依存関係としてcompat32-glibcパッケージを要求します(おそらく通常はすでにインストールされているはずです)。
- &ref(glibc-32bit-2.8-0vl5.noarch.rpm);
- &ref(glibc-32bit-2.8-0vl5.src.rpm); -- ソースパッケージ
# rpm -ivh glibc-32bit-2.8-0vl5.noarch.rpm
** インストール [#jb326894]
以上の対策を行えばインストール可能です。実際のインストール手順は以下の通りです。
# cd l_cproc_p_11.1.XXX
# ./install.sh
インストーラ起動後は32bit版と同様の手順でインストール可能です。途中(ステップ4)で、以下のようなメッセージが出ますがスキップしても問題ありません。
オプションの必要条件の不足
-- No compatible Java* Runtime Environment (JRE) found <-- JDK/JREをインストールしていないとき
-- オペレーティング・システムの種類を認識できません
-- システムの glibc/カーネルのバージョンがサポートされていないか、検出できません
以上でインストールが完了します。
** ユーザーごとの設定ファイル [#v8b5b9f4]
使用時の設定はintel64オプションで読み込みます。
:.bashrc|
# for Intel Compiler
source /opt/intel/Compiler/11.1/046/bin/iccvars.sh intel64 <-- C++の設定
source /opt/intel/Compiler/11.1/046/bin/ifortvars.sh intel64 <-- Fortranの設定
:.csrhc|
# for Intel Compiler
source /opt/intel/Compiler/11.1/046/bin/iccvars.csh intel64 <-- C++の設定
source /opt/intel/Compiler/11.1/046/bin/ifortvars.csh intel64 <-- Fortranの設定