Ubuntu 12.04にCUDA 4.2をインストールした時のメモ
いつの間にか Ubuntuを12.04 と CUDA 4.2 が正式リリースされていたので、インストールしました。
インストールは以下の順序で行います。
- Ubuntu 12.04
- NVIDIA製ディスプレイドライバ
- CUDA Toolkit 4.2
- GPU Computing SDK 4.2
- サンプルプログラムのコンパイルに必要なライブラリ等
GPU Computing SDK はインストール後に修正する必要があります。CUDA Toolkit も 4.1 では修正が必要でした(Ubuntu 12.04にCUDA 4.1をインストールした時のメモ - irieめも)が、4.2 ではそのままでOKです。
Ubuntu 12.04
インストール方法はいろいろなところに書かれているので、ここでは省略します。使用するPCが Core i7 CPU + メインメモリー 16GiB ということで、64bit版を入れました。以下の記述は 64bit 環境を想定しているので、32bit 環境にインストールする場合はファイル名などを適宜読み替える必要があります。
NVIDIA製ディスプレイドライバ
Ubuntu 12.04 の場合、Ubuntu 公式の nvidia-current パッケージが入っていれば大丈夫です。もしまだ入っていなければ、「システム設定>追加のドライバー」から「NVIDIAの高性能グラフィックスドライバー(バージョン current)」を選択するか、
sudo apt-get install nvidia-current
を実行します。または、nvidia-current-updates パッケージ(GUIによる設定では「バージョン current-updates」)の方が、より新しいバージョンなのでいいかもしれません。
sudo apt-get install nvidia-current-updates
インストールが終わったら、再起動します。
ビデオカードが新しすぎて公式のパッケージのドライバが対応していない場合、Ubuntu-X team の X Updates PPA にある nvidia-current パッケージがほぼ最新のドライバを提供しているので、そちらを試してみるといいと思います
sudo add-apt-repository ppa:ubuntu-x-swat/x-updates sudo apt-get update sudo apt-get dist-upgrade sudo apt-get install nvidia-current
CUDA Toolkit
CUDAのダウンロードのページ ([developer.nvidia.com/cuda-downloads]) から、以下のように Ubuntu 11.04 用の CUDA Toolkit のファイル (cudatoolkit_4.2.9_linux_64_ubuntu11.04.run) をダウンロードしてインストールします。
wget http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/cudatoolkit_4.2.9_linux_64_ubuntu11.04.run
chmod a+x cudatoolkit_4.2.9_linux_64_ubuntu11.04.run
sudo ./cudatoolkit_4.2.9_linux_64_ubuntu11.04.run
途中でインストール先を聞かれますが、デフォルトの /usr/local/cuda に入れます。
ライブラリ及び実行ファイルの検索パスの設定
以下の内容の /etc/ld.so.conf.d/cuda.conf というファイルを作成します。32bit 環境では1行目は要らないでしょう。
/usr/local/cuda/lib64 /usr/local/cuda/lib
この設定を有効にするために、以下のコマンドを実行します。
sudo ldconfig
以下の内容の /etc/profile.d/cuda.sh というファイルを作成します。
export PATH="/usr/local/cuda/bin:$PATH" export LIBRARY_PATH="/usr/lib/nvidia-current:$LIBRARY_PATH"
ここで、この設定を有効にするために再ログインします。
GPU Computing SDK
GPU Computing SDK は、追加のライブラリやサンプルプログラム、ドキュメント類のセットです。これをインストールしなくてもCUDAのプログラムは作成できますが、参考になるので入れておく方がいいでしょう。
CUDA Toolkitと同じ場所から をダウンロードし、インストールします。
wget http://developer.download.nvidia.com/compute/cuda/4_2/rel/sdk/gpucomputingsdk_4.2.9_linux.run
chmod a+x gpucomputingsdk_4.2.9_linux.run
./gpucomputingsdk_4.2.9_linux.run
途中でインストール先を聞かれますが、デフォルトの $HOME/NVIDIA_GPU_Computing_SDK に入れます。
GPU Computing SDK の修正
そのままだと、サンプルプログラムのビルド時に次のようなエラーが出てしまいます。
../../lib/librendercheckgl_x86_64.a(rendercheck_gl.cpp.o): In function `CheckBackBuffer::checkStatus(char const*, int, bool)': rendercheck_gl.cpp:(.text+0xfbb): undefined reference to `gluErrorString' collect2: ld はステータス 1 で終了しました make[1]: *** [../../bin/linux/release/recursiveGaussian] エラー 1 make[1]: ディレクトリ `/home/irie/NVIDIA_GPU_Computing_SDK/C/src/recursiveGaussian' から出ます make: *** [src/recursiveGaussian/Makefile.ph_build] エラー 2
これは ~/NVIDIA_GPU_Computing_SDK/C/common/common.mk というファイルの中でライブラリをリンクする順序が間違っているためです。
そこで、このファイルの 271, 275, 282 行目の $(RENDERCHECKGLLIB) をそれぞれ先頭の方に移動するように修正します。以下のパッチを参考にして下さい。
--- common.orig.mk 2012-06-20 23:00:44.769068969 +0900 +++ common.mk 2012-06-20 23:02:43.273068673 +0900 @@ -268,18 +268,18 @@ # If dynamically linking to CUDA and CUDART, we exclude the libraries from the LIB ifeq ($(USECUDADYNLIB),1) - LIB += ${OPENGLLIB} $(PARAMGLLIB) $(RENDERCHECKGLLIB) ${LIB} -ldl -rdynamic + LIB += $(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB) ${LIB} -ldl -rdynamic else # static linking, we will statically link against CUDA and CUDART ifeq ($(USEDRVAPI),1) - LIB += -lcuda ${OPENGLLIB} $(PARAMGLLIB) $(RENDERCHECKGLLIB) ${LIB} + LIB += -lcuda $(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB) ${LIB} else ifeq ($(emu),1) LIB += -lcudartemu else LIB += -lcudart endif - LIB += ${OPENGLLIB} $(PARAMGLLIB) $(RENDERCHECKGLLIB) ${LIB} + LIB += $(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB) ${LIB} endif endif
サンプルプログラムのコンパイルに必要なライブラリ等
Ubuntuの公式のパッケージを利用します。
sudo apt-get install g++ freeglut3-dev libxi-dev libxmu-dev
ただしこれだけでは、MPIを利用するサンプル (simpleMPI) がビルドできません。simpleMPIもビルドしたい場合は Open MPI 関連のパッケージもインストールします。
sudo apt-get install openmpi-bin openmpi-dev
サンプルプログラムのビルド
cd ~/NVIDIA_GPU_Computing_SDK/C
make
ビルドが終わると、$HOME/NVIDIA_GPU_Computing_SDK/C/bin/linux/release にいろいろなバイナリが生成されているので、動かしてみます。例えばnbodyというのは、N体問題を解くプログラムです。
cd ~/NVIDIA_GPU_Computing_SDK/C/bin/linux/release
./nbody
たぶん64bit環境固有の問題
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 *_x86_64.a; do ln -sv $i ${i%_x86_64.a}.a; done
はじめてのCUDAプログラミング―驚異の開発環境[GPU+CUDA]を使いこなす! (I・O BOOKS)
- 作者: 青木尊之,額田彰,第二I O編集部
- 出版社/メーカー: 工学社
- 発売日: 2009/11
- メディア: 単行本
- 購入: 11人 クリック: 310回
- この商品を含むブログ (29件) を見る