田中ゼミでは、複雑な3DCGを高速に生成するためにはGPUと呼ばれるハードウェアの処理速度が重要になっています。
GPUで高速に3DCGを生成させるために、複数のGPUを同時に使って並列処理で高速化させる方法があります。
田中ゼミにあるNVIDIA社製のGeForce GTX 295は 2つのGPUを搭載するマルチGPU型のグラフィックスボードなのですが、これまで2つ目のGPUがうまく動きませんでした。
下の写真はPC本体とGTX 295の写真です。
※グラフィックスボード上に怪しい画像が貼り付けてありますが、これは購入時(製造時)から貼り付けてあったものです。このGTX 295の製品ページはこちら
これまで何度かボード上の2つのGPUを同時に動かそうと試みたのですが、NVIDIA社製のドライバがうまく機能しなくて並列動作をしませんでした。
めんどくさがりが多い田中ゼミではそれ以上の検討をすることなく、そのまましばらく放置されていたのですが、ここに来て急にマルチGPUがやりたくなり、最新のNVIDIAドライバを使って再度試してみることになりました。
それで最新バージョンのドライバ(256.53)を使ってみると、なんとあっさりと動くではないですか!
それで急遽、マルチGPUで我々の開発しているソフトウェアがどれくらい速くなるか試してみることになりました。
大変軽いノリで実験の開始です。
【検証に使用した環境】
OS: FreeBSD 8.1-stable 64bit版
CPU: Intel Core i7 920 (2.66GHz)
メモリ: 9GB(トリプルチャンネルで動作)
NVIDIAドライバ: FreeBSD x86_64 ドライバ256.53
GPU: NVIDIA GeForce GTX 295 1792MB (GIGABYTE社製 GV-N295-18I-B (Rev. 1.0))
【マルチGPUの設定】
(1) マルチGPUの動作モード
マルチGPUは動作の仕方によって、2種類の設定があります。
- AFR: 画面(フレーム)毎の並列処理
- SFR: 1つの画面(フレーム)を分割して並列処理
ただ、今回の実験では SFRモードしか速度が向上しませんでした。
(2) 設定ファイル
マルチGPUの設定は以下のファイルに設定を書きこみます。
/etc/X11/xorg.conf
(3) 設定内容
Section "Screen" に
Option "MultiGPU" "SFR"
を追加します。そうすると、GPUがSFRモードで並列動作(2GPUで動作)開始します。
【マルチGPUの速度検証】
以前の記事のこことここでGPUの速度を田中ゼミで開発しているソフトウェアで検証しましたが、
今回も同じものを使いました。
こちらはマルチGPUを用いて日本刀を3DCG再現している様子です。(OS: FreeBSD 8.1-stable)
◇日本刀のデジタルアーカイブシステム
- 1GPU(シングル動作)を使用: 50.0FPS
- 2GPU(マルチ動作)を使用: 71.0FPS
◇不均質誘電体(プラスチックやペイント)のレンダリングシステム
- 1GPU(シングル動作)を使用: 47.0FPS
- 2GPU(マルチ動作)を使用: 74.3FPS
◇レイトレーシングシステム
以上のように2GPUで処理することで大幅に処理速度(CGの生成速度)が向上していることがわかります。
特にレイトレーシングシステムでは、GTX 295を2GPUで使用すると 46.9FPSとなり、これは最新かつ最高スペックのGTX 480 (約30FPS)よりも高速に動作することがわかりました。
【GPUの温度】
GPUに計算処理をさせると電力消費量が増えますのでGPUが高温になります。
当然マルチGPUだとその消費電力からなる発熱は凄まじいものとなります。
ためしにレイトレーシングシステムを使用したときどのぐらいGPUの温度が上昇するか試してみると、
なんと! 2つのGPUの温度は90℃を超えてしまっています。かなりの電力を消費していることがわかります。
下の画像は、レイトレーシングシステムを動作させながらGPUの温度を表示させている様子です。
温度を示すメーターがレッドゾーンに入っており、GPU温度も90℃を突破しています。
※ NVIDIAドライバから温度異常の警告が出るのは105℃からなので、まだ余裕はありますが。
【WindowsでのマルチGPUの問題】
今回のOpenGLによるマルチGPUの検証は、全てFreeBSD上で行っています。
Windowsでも同様な実験を行いましたが、Windows上ではマルチGPUの設定を行っても速度の向上が認められませんでした。( NVIDIA ドライババージョン 258.96)
Windowsでは、OpenGLがあまり重要視されていないためなのか、それとも我々が何か設定を間違ったのかはわかりませんが、我々のシステムではWindows上でのマルチGPUは使用できないようです。
Windowsでは、マルチGPUの設定はNVIDIAの設定ツールから以下のように3つの設定から選択します。
- シングルGPU
- フレームのレンダリングを強制的に交互にする 1
- フレームのレンダリングを強制的に交互にする 2
とあります。
※この選択肢だと1と2の違いが良く分からないのですが...
今回の記事が面白いと思った方は以下のボタンをクリックして下さい.