Ubuntu 10.04にCUDAをインストールした時のメモ

CUDAの使えるGPU (GeForce GTX 470) を搭載したPCを購入して、Ubuntu 10.04環境にインストールしてみたので、手順をまとめてみました。
下の動画は、CUDAをテストするために作った数値計算のプログラムの結果から gnuplotImageMagick を利用して作成したものです。

インストールは以下の順序で行います。

  1. Ubuntu 10.04
  2. NVIDIA製ディスプレイドライバ
  3. CUDAプログラムのコンパイルに必要なライブラリ等
  4. CUDA Toolkit 3.1
  5. GPU Computing SDK 3.1

Ubuntu 10.04

インストール方法はいろいろなところに書かれているので、ここでは省略します。今回使用したPCは Core i7 CPU + メインメモリー 4GiB ということで、64bit版を入れました。

余談ですが、メモリーはその後12GiBに増設しました。上の動画を作成しようとしたら、4GiBでは足りなくなってしまったためです。動画への変換のためにImageMgickのconvertを起動すると、1プロセスで約8GiB消費しました。32bit OSで頑張るのもそろそろ限界ですね。ちなみに、ソースコードhttps://code.launchpad.net/~irie/+junk/cuKdVsolvに晒してあるので、ご自由にどうぞ。

NVIDIA製ビデオドライバ

「システム > システム管理 > ハードウェア・ドライバ」からインストールできますが、バージョンが古いので、Ubuntu-X team の X Updates PPA を利用して新しいバージョンを入れます。

sudo add-apt-repository ppa:ubuntu-x-swat/x-updates
sudo apt-get update
sudo apt-get install nvidia-current nvidia-current-modaliases nvidia-settings

インストールが終わったら、「システム > システム管理 > ハードウェア・ドライバ」でNVIDIAのドライバが有効になっていることを確認し、再起動します。

CUDAプログラムのコンパイルに必要なライブラリ等

Ubuntuの公式のパッケージを利用します。

sudo apt-get install g++ freeglut3-dev libxi-dev libxmu-dev

CUDA Toolkit

CUDAのダウンロードのページ (http://developer.nvidia.com/object/cuda_3_1_downloads.html#Linux) から、Ubuntu 9.10 用の CUDA Toolkit のファイル (cudatoolkit_3.1_linux_64_ubuntu9.10.run) をダウンロードして、以下のようにインストールします。

chmod a+x cudatoolkit_3.1_linux_64_ubuntu9.10.run
sudo ./cudatoolkit_3.1_linux_64_ubuntu9.10.run

途中でインストール先を聞かれますが、デフォルトの /usr/local/cuda に入れます。
インストールが終わったら、各種のファイル検索パスを設定します。
以下の内容の /etc/ld.so.conf.d/cuda.conf というファイルを作成します。

/usr/local/cuda/lib64
/usr/local/cuda/lib

この設定を有効にするために、以下のコマンドを実行します。(11/5 追記)

sudo ldconfig

以下の内容の /etc/profile.d/cuda.sh というファイルを作成します。

export PATH="/usr/local/cuda/bin:$PATH"
export LIBRARY_PATH="/usr/lib/nvidia-current"

ここで、この設定を有効にするために再ログインします。

GPU Computing SDK

GPU Computing SDK は、追加のライブラリやサンプルプログラム、ドキュメント類のセットです。これをインストールしなくてもCUDAのプログラムは作成できますが、参考になるので入れておく方がいいでしょう。
CUDA Toolkitと同じ場所から gpucomputingsdk_3.1_linux.run をダウンロードし、インストールします。

chmod a+x gpucomputingsdk_3.1_linux.run
./gpucomputingsdk_3.1_linux.run

途中でインストール先を聞かれますが、デフォルトの $HOME/NVIDIA_GPU_Computing_SDK に入れます。

次にサンプルプログラムをビルドします。

cd ~/NVIDIA_GPU_Computing_SDK/C
make

ビルドが終わると、$HOME/NVIDIA_GPU_Computing_SDK/C/bin/linux/release にいろいろなバイナリが生成されているので、動かしてみます。例えばnbodyというのは、N体問題を解くプログラムです。下のスクリーンショットのように、たくさんの光の点が飛び回ります。

単精度ですが、450GFLOPS出ています (倍精度だと90GFLOPSぐらい)。

たぶん64bit環境固有の問題

以上の設定を済ませた後、書籍「はじめてのCUDAプログラミング」のサンプルプログラム (http://www.kohgakusha.co.jp/support/cuda/index.html) をビルドしようしたら、「/usr/bin/ld: cannot find -lcutil」というエラーが出て止まってしまいました。どうやら $HOME/NVIDIA_GPU_Computing_SDK/C/lib 内のファイル名に問題があるようだったので、以下のようにしてシンボリックリンクを作成すると、ビルドが通り正常に実行することが出来ました。

cd ~/NVIDIA_GPU_Computing_SDK/C/lib
for i in `ls *_x86_64.a`; do ln -sv $i ${i%_x86_64.a}.a; done

はじめてのCUDAプログラミング―驚異の開発環境[GPU+CUDA]を使いこなす! (I・O BOOKS)

はじめてのCUDAプログラミング―驚異の開発環境[GPU+CUDA]を使いこなす! (I・O BOOKS)