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

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

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

  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)