GPUを利用した演算処理に興味を持ったので、NVIDIAのCUDAを勉強してみた。
CUDAとは要するに、CPUではなく、NVIDIA製のグラフィックボード(のほとんど)に搭載されているGPUチップとメモリ空間を利用して計算させるプログラムを開発・動作できる環境のことです。例えば行列計算を処理させる場合、CPUだとチクチク計算させて処理していたのを、GPUならば行列をまとめてドカッと剛腕で処理できる、そんなイメージ。(でいいのか?)
*あくまで計算処理の種類によって処理速度が速くなるだけであって、CPUとGPUの計算速度自体を比べてGPUが圧倒という意味ではありませんので。
ひとまず、手元の環境でCUDAを使うために必要な作業メモを記録。今回の目標は「CUDA環境と必要なソフトウェアのインストール」と「SDKに含まれるサンプルをビルド&動作させる」の二点。 動作環境としてはMac Mini(2009年春モデル)と、それに内蔵されているNVIDIA GeForce 9400Mです。
【準備】
NVIDIAのサイトから必要な、ドライバ、ツールキット、SDKを入手する。
http://www.nvidia.co.jp/object/cuda_get_jp.html
(MacOSXの欄にある以下を取得。)
- Developer Drivers for MacOS
- CUDA Toolkit
- GPU Computing SDK code samples(SDK)
【インストール】
*必ずToolkit、Driver、SDKの順にインストールすること!(なぜか?)
最初、適当にDriverからインストールしていたのだけど、どうやら先に進むにつれておかしい。色々調べた挙句、以下の方のエントリーを参考にインストールしたところ、ひとまずOKの結果に。
参考サイト:Mac mini OSX 10.6 snow leopard に CUDA を入れようとして make で サンプル生成するのに苦労した
http://d.hatena.ne.jp/masibonge/20091016/1255625869
【メモ】
・ターミナル起動時に設定してくれるよう、〜/.bash_profile に以下を記述
#CUDA
export PATH=/usr/local/cuda/bin:$PATH
export DYLD_LIBRARY_PATH=/usr/local/cuda/lib
export LD_LIBRARY_PATH=/usr/local/cuda/lib:$LD_LIBRARY_PATH
export CPLUS_INCLUDE_PATH=”/Developer/GPU Computing/C/common/inc”:$CPLUS_INCLUDE_PATH
export C_INCLUDE_PATH=”/Developer/GPU Computing/C/common/inc”:$C_INCLUDE_PATH
export LIBRARY_PATH=”/Developer/GPU Computing/C/common/lib”:”/Developer/GPU Computing/C/lib”:/usr/local/cuda/lib:$LIBRARY_PATH
*上記のサイト(http://d.hatena.ne.jp/masibonge/20091016/1255625869)で紹介されているスクリプトだと、自分の環境ではビルド時にエラーが止まらず、修正
・最初の動作チェック。nvccを起動してバージョンを確認。
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2010 NVIDIA Corporation
Built on Thu_Jun_17_16:11:55_PDT_2010
Cuda compilation tools, release 3.1, V0.2.1221
macminibressonlan:~ yanoshin$
・サンプルソースをビルドする
$ cd /Developer/GPU\ Computing/C
$ make
*libファイル(*.a)が問題でビルドが止まる問題が発生。ranlibを実行して、makeを再実行すると問題解消した。
$ ranlib ./lib/*.a
$ ranlib ../shared/lib/*.a
(ただし、particlesやsmokeParticlesはビルドエラーが発生してしまうため、C/error_srcフォルダを作成して移動した状態で、上記makeを実施)
・サンプルソースを実行してみる。
oceanFFTを試しに実行してみた。
$ cd /Developer/GPU Computing/C/bin/darwin/release
$ ./oceanFFT