fedora 9 x86_64にCUDA2.1 Betaをインストールするまで

64bitのfedora 9マシンにCUDA2.1betaをインストールした。以下その記録
まずはfedora 9を理研ftpから持ってきてインストールする。

ネットワークをつなげる

インストールが終わったら、ここを参考にしてネットワークを管理するデーモンをどちらか片方きってネットワークをつなげる。

ネットワークがつながらないという孔明も驚愕のfedora 9の罠。原因がわからず、LANケーブルが壊れてないか確認して時間をつぶしてしまった。

日本語入力環境のインストール

# yum install scim anthy acim-anthy

で日本語入力環境をインストールする。そして一旦ログアウトして再度ログインする。右上のscimのアイコンを右クリックして「scimの設定」をクリック、フロントエンド→全体設定から開始、終了キーを設定する。キーコードを押して「追加」ボタンで登録して閉じる。「適用」ボタンを押すとscimを再起動するべき旨のメッセージが現れる。acimの再起動の仕方がわからないのでマシンを再起動した。

fedora7,8だとはじめから日本語入力できた気がするのは間違いだっけ?まさかこれもfedora 9の罠では・・

nvidiaのディスプレイドライバをインストール

次に、nvidiaが提供するドライバをインストールする。とりあえず、nvidiaのサイトから、以降で使う、ドライバとツールキットとSDKをダウンロードする。今回使ったバージョンは以下のとおり。

ドライバ: NVIDIA-Linux-x86_64-180.06-pkg2.run
ツールキット:cuda-linux64-rel-nightly-2.1.1635-3065709.run
SDK:cuda-sdk-linux-2.10.1126.1520-3141441.run

そしてドライバのインストール。まずその前の準備として、パッケージkernel-develをインストールする。

# yum install kernel-devel

また、Xが起動していない状態でドライバのインストールをしなければならないので、

# vim /etc/inittab

で、ランレベルを3に設定してリブートする。

# reboot

再起動したらログインし、rootでドライバのインストールを行う。

# sh ./NVIDIA-Linux-x86_64-180.06-pkg2.run

No -> ok -> "Building kernel module..." -> Yes -> Yes -> Ok
たしかこんな順番でインストール完了。inittabを編集してランレベルを5に戻して再起動する。

ツールキットのインストール

GUI環境に戻って、rootでツールキットをインストールする。

# sh ./cuda-linux64-rel-nightly-2.1.1635-3065709.run

SDKのインストール

SDKはルートでインストールする必要は無い。

$ sh ./cuda-sdk-linux-2.10.1126.1520-3141441.run

サンプルの実行

SDKをインストールしたディレクトリでmakeするだけ・・・のはずがうまくいかなかった。threadMigrationという名前のプロジェクトでコンパイルがとまってしまう。「gnu/stub-32.hが無い」らしい。まず、SDK全体ではなくプロジェクト単体ではビルドできるのかどうか確認してみた。oceanFFTというディレクトリ中で、makeしてみると

$ make
/usr/bin/ld: cannot find -lglut
collect2: ldはステータス1で終了しました

それっぽいパッケージのfreeglut-develをインストールして再度make

$ make
/usr/bin/ld: cannot find -lrendercheckgl
collect2: ldはステータス1で終了しました

(・3・)

それっぽいパッケージを探しても見つからず、最終的にthreadMigration以外だけでもコンパイルすることにした。まず、共有ライブラリを作る。SDKディレクトリのcommonディレクトリでmake、次にprojectディレクトリで

$ for d in `/bin/ls`; do (cd $d && make); done

でbinディレクトリに実行可能プログラムが作られる。おそるおそる実行してみると・・動いた!nbodyが動いた!

ところで、どうしてthreadMigrationはビルドできなかったのか?エラーメッセージによるとgnu/stub-32.hが無い、らしいので yum providesで調べた。32bit版のglibcに含まれるインクルードファイルらしい。64bit環境用のSDKになぜ32bit版glibcのコードが入っていたのだろう。わからない。