2010年7月11日日曜日

SmallLuxGPUを使ってみた。

現在使用しているPCにOpenCL対応のビデオカードを追加してSmallLuxGPUが
利用できる環境を構築してみました

手元のPCはこんな感じ。グラフィックはチップセット内蔵GPUを利用していましたが、
内蔵GPUのHD4200はOpenCLに非対応。これにビデオカードを追加してOpenCLを
利用できる環境にしようという試みです。

インストールや設定が難しいんじゃないかと思っていましたが、やってみると特に複雑な
手順もなくあっさり動き、パフォーマンスもよさげとある意味うれしい予想外れな結果に。


というわけで今回の手順のまとめはこんな感じ。


1. OpenCL対応のビデオカードを選ぶ。

公式フォーラムなどの動作例を見てみると何となくAMDが多いような感じ。
HD4000以降ならひとまず問題なさそうです。ただ、HD5000系でOpenCLを含む
GPGPU用途での性能が向上している様子。発熱や消費電力と性能のバランス等を
考慮しいろいろ迷った末にHD5750搭載のこのカードを購入。
約一万円というお手頃価格が決め手だったのは内緒w

nvidiaはリネームもあり世代がよく分からないのですがGTX280、8800GT、GT240など
8000系?以降のものであれば良さそうです。


2. ビデオカードの取り付けと設定

Ubuntu10.04ではドライバの更新や設定ファイルの書き換えなどは必要ありませんでした。
カードを取り付けて起動後、デスクトップが表示されたらATI Catalyst Control Centerで
正しくカードが認識されているか確認しておくと良いでしょう。


3. ATI Stream SDKのインストールと設定

ハードウェアの準備が終わったら、次はソフトウェアです。
OpenCLを利用するには標準のドライバ以外に追加で実行環境を整える必要があります。

というわけでここからATI Stream SDKをもらってきます。Linuxに関しては32、64bitともにopenSUSE11.2、Ubuntu9.10、RedHat Enterprise 5.4がサポート対象に記載されています。
Ubuntu10.04は載ってなかったので少し心配でしたが、今のところ問題なく動いているので
たぶん大丈夫かと。

インストールの詳細はATI Stream SDK Installation Notesに説明されているので、以降は
自分がやったことだけ書いてきます。

もらってきた書庫ファイルを適当な都合のいい場所に展開
$ tar -xvzf ati-stream-sdk-v2.1-lnx64.tgz.

環境変数ATISTREAMSDKROOTを設定
$ export ATISTREAMSDKROOT=展開したフォルダのパス
(例えば/home/taro/bin/ati-stream-sdk-v2.1-lnx64)

環境変数LD_LIBRARY_PATHにSDKの中のライブラリのあるフォルダを追加
$ export LD_LIBRARY_PATH=$ATISTREAMSDKROOT/lib/x86_64:$LD_LIBRARY_PATH

ここまででSDKはとりあえず一段落。
最後にOpenCLの実行にはOpenCL ICD registration configuration filesというものが必要らしいので
おなじく上記のリンクからもらってくる

とりあえず適当な場所に展開
$ tar -xvzf icd-registration.tgz

でOpenCLというフォルダが出てくるはずなのでそれを/etc/に移動する。
$ sudo mv ./OpenCL /etc/

環境変数の設定は~/.bashrcにも追記しておく。


4. SmallLuxGPUを実行してみる

環境変数の設定を反映させるため新規の端末エミュレータを開きます。
SmallLuxGPUを保存してあるディレクトリで
$ slg
で起動します。こんな感じのウインドウが開けばOK。



hキーで画面のヘルプが消えます。マウスドラッグでカメラのズームと移動ができます。
動かすとこんな感じ。リアルタイムに画面が更新されレンダが進んでいきます。




blender.jpで紹介されているデモ動画を見てSmallLuxGPUを試したくなったわけですが
心配だったのはデモ環境がi7 860にHD5870&HD5850と、かなりハイエンドだったところ。

それにくらべて手元の環境はだいぶ劣ります。
ビデオカード一枚追加したくらいじゃSmallLuxGPUは実用的な速度にならないかも、
とか、OpenCL対応の環境がとりあえず整えばいいかな?とあまり期待していない部分も
ありましたが、結果は上の動画のようになかなかの性能でした。


一応簡単にベンチマークをとってみるとこんな感じ。

1. 従来の内蔵GPUだけの環境
a) CPUのみ  計測不能(※1)
b) CPUとGPU 170K samples/sec、1400K rays/sec(※2)
※1 Segmentation faultで落ちる
※2 内蔵GPUはOpenCL非対応。実質CPUのみ

2. 今回ビデオカードを追加した環境
a) CPUのみ 177K samples/sec、1440K rays/sec
b) CPUとCPU 447K samples/sec、3500K rays/sec

2-aとbの比較からGPUによる性能向上はsample/secで約2.5倍、rays/secで約2.4倍という結果に。

また1-bは内蔵GPUはOpenCL非対応なので実質CPUのみの処理です。
そこで同じCPUのみの処理であるはずの1-bと2-aを比較するとビデオカードがある方が
数%ですが大きな値がでています。誤差の可能性もありますが、独立のGPUとVRAMが
あることで共有メモリの使用がなくなり性能の改善につながった可能性もあります。


現状ではSmallLuxGPUはLuxRaysライブラリの評価とLuxRender本体のOpenCL対応
に向けたテストという扱いですが、エクスポータを利用してblender2.5の外部レンダラとして
利用することもできるようです。

またLuxRenderも次のv0.8からはOpenCL対応に向けた動きが本格化してくる予定なので
今のうちにOpenCLが利用できる環境を整えておくというのもいいかもしれません。

---------------------------------------------------------------
コメントなどありましたらこちらへ->web拍手