2013年4月29日月曜日

Ubuntu12.04&ROS FuerteにてGPUを使うために.(NVIDIA_OPTIMUS,G-TUNE)



ubuntu12.04/Fuerteにてnvidiaを使用できるようにする&CUDA4.2のインストール手順

<nvidia関連インストール&設定>
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-updates

sudo add-apt-repository ppa:bumblebee/stable
sudo apt-get update
sudo apt-get install bumblebee bumblebee-nvidia linux-headers-generic

sudo stop bumblebeed

sudo vim /etc/bumblebee/bumblebee.conf 
で編集.以下変更点.
[bumblebee] section
Driver=nvidia
[driver-nvidia] section 
KernelDriver=nvidia-current-updates
LibraryPath と XorgModulePath の nvidia-current を nvidia-current-updates に変更.

sudo vim /etc/bumblebee/xorg.conf.nvidia 
で編集.
option "ConnectedMonitor" "DFP" を
option "ConnectedMonitor" "CRT" に変更

sudo start bumblebeed

optirun glxsheres を実行.
(エラーが出る場合は再起動)

ちなみに,bumblebeeはoptimusをハックするものなので,optimusじゃないPCはCUDAから.

<CUDAダウンロード>     新型iMacの場合はここから.

CUDAtoolkit&GPU computing SDK をダウンロード
↓ダウンロードサイト↓

cd ~/download
権限変更
chmod +x *.run
インストール
sudo ./cudatoolkit_4.2.9_linux_32_ubuntu11.04.run
途中でインストール先を聞かれるがデフォルトのまま/usr/local/cudaにインストール(Enter押すだけ)

<ライブラリ及び実行ファイルの検索パスの設定>
sudo vim /etc/ld.so.conf.d/cuda.conf
を作成.中身は以下のように.

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

この設定を有効にするために以下のコマンドを実行.
sudo ldconfig

sudo vim /etc/profile.d/cuda.sh
を作成.中身は以下のように.

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

この設定を有効にするために再ログイン.

<GPU Computing SDKのインストール>
sudo ./gpucomputingsdk_4.2.9_linux.run
途中でインストール先を聞かれるがデフォルトのまま~/NVIDIA_GPU_Computing_SDKにインストール(Enter押すだけ)

makeのエラー回避
sudo vim ~/NVIDIA_GPU_Computing_SDK/C/common/common.mk
271,275,282行目を修正.修正は以下のように.

ロックかかってたら…
sudo chown -R amsl NVIDIA_GPU_Computing_SDK/

(271行目)
LIB += ${OPENGLLIB} $(PARAMGLLIB) $(RENDERCHECKGLLIB) ${LIB} -ldl -rdynamic
LIB += $(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB) ${LIB} -ldl -rdynamic

(275行目)
LIB += -lcuda   ${OPENGLLIB} $(PARAMGLLIB) $(RENDERCHECKGLLIB) ${LIB}
LIB += -lcuda   $(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB) ${LIB}

(282行目)
LIB += ${OPENGLLIB} $(PARAMGLLIB) $(RENDERCHECKGLLIB) ${LIB}
LIB += $(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB) ${LIB}

<サンプルプログラムのビルド>
cd ~/NVIDIA_GPU_Computing_SDK/C
make

<サンプルプログラムの実行>
cd ~/NVIDIA_GPU_Computing_SDK/C/bin/linux/release
optirun ./smokeParticles




<OpenCVでGPUを使おう>

最新のOpenCVをダウンロード.rosと一緒に入るのはGPUが使えない.
とりあえず,ホームフォルダに解凍.

cd opencv_VERSION 
mkdir release

sudo apt-get install cmake-curses-gui

ccmake ..             ←cmakeの設定ができる.

cでコンパイルみたいなやつ.
tでアドバンスモード.
Enterで挿入モード

CUDA_CUDA_LIBRARYのとこを設定
not foundにってるから↓に書き換える(全部)
/usr/lib/nvidia-current-updates/libnvcuvid.so

cでコンパイルみたいなやつ
gで終了

cmake .
make 
もっかいmake(make漏れがあるかも)

/opt/ros/fuerte/lib
の中に/libの中身をぶち込む.
所有権がない場合はchownで.

<実行方法>
適当なsampleを取ってくる(opencvのsampleのGPUから)
optirun rosrun pkg名 実行名 読み込む画像
ex)     optirun rosrun image_sample hog road.png
ex)     optirun rosrun image_sample --left tsucuba_left.png --right tsucuba_right.ping

optirunはGPUをハックして使うおまじない.


追記)2014/04/04
cudaのバージョンが新しいものならもっと簡単に出来ます.
bumblebeeは同様で,cuda toolkitの部分は↓で出来ます.
cuda 5.5 32bit版をダウンロードしますが,この時は.debのものをダウンロード.
次のコマンドでリポジトリ追加.
sudo dpkg cuda-repo-ubuntu1204_5.5-0_i386.deb
アップデートして... sudo apt-get update
cudaをインストール! sudo apt-get install cuda

That's all!!