Sift on GPU

SiftGPUを動かしてみたのでメモ

環境:CentOS6.0(64bit), GeForce9600GT

CUDAインストール

ここから、nvidiaドライバとCUDAのツールキットをダウンロードする。
http://developer.nvidia.com/cuda-toolkit-41

NVIDIA-Linux-x86_64-285.05.33.run
cudatoolkit_4.1.28_linux_64_rhel5.x.run
gpucomputingsdk_4.1.28_linux.run

まずドライバを入れる。このままインストールすると、Nouveau kernel driverが邪魔と怒られるのでdisableする必要がある。
/boot/grub/grub.confの、起動するOSのkernelの行の末尾にrdblacklist=nouveauと追記すれば良い。
こんな感じ。

kernel /vmlinuz-2.6.32-71.29.1.el6.x86_64 ro root=/dev/mapper/vg_quad00-lv_root rd_LVM_LV=vg_quad00/lv_root rd_LVM_LV=vg_quad/lv_swap rd_LVM_LV=vg_quad00/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=ja_JP.UTF-8 KEYBOARDTYPE=pc KEYTABLE=jp106 crashkernel=128M rhgb quiet rdblacklist=nouveau

再起動して、GUIをおとす。

$ init 3

NVIDIAのドライバをインストール。

$ bash NVIDIA-Linux-x86_64-285.05.33.run 
$ init 5

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

$ bash cudatoolkit_4.1.28_linux_64_rhel5.x.run
$ bash gpucomputingsdk_4.1.28_linux.run

LD_LIBRARY_PATHは通しておいた方がよい。

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64

Sift GPU

ここのコードをありがたく使わせていただきます。
http://cs.unc.edu/~ccwu/siftgpu/

展開して普通にmakeすれば基本的に大丈夫だが、いろいろライブラリがいるので必要に応じてインストール。
自分の環境だと、devil、glewをソースからコンパイルして入れた。OpenGLあたりも入ってなければ多分必要。
http://openil.sourceforge.net/
http://glew.sourceforge.net/

無事コンパイルできたらサンプルを動かしてみる。

$ cd SiftGPU/bin
$ ./SimpleSIFT
[GPU VENDOR]:	NVIDIA Corporation 474MB
TEXTURE:	8192

[SiftGPU Language]:	GLSL
Image size :	800x600
Image loaded :	../data/800-1.jpg
#Features:	3359
#Features MO:	3927
[RUN SIFT]:	0.575

Image size :	640x480
Image loaded :	../data/640-1.jpg
#Features:	2377
#Features MO:	2784
[RUN SIFT]:	0.125

[SiftMatchGPU]: GLSL

2276 sift matches were found;

速い!そのうちCPUと速度比較とかしてみたいと思います。