GPU レンダリング

はじめに

GPU レンダリングは、CPU の代わりにグラフィックスカードをレンダリングに使うことができます。
近頃の GPU は、非常に大量の演算処理を行うように設計されているので、GPU を使うことでレンダリングを速めることができます。
一方、メモリに制限があるため、複雑なシーンのレンダリングに限度があったり、同じグラフィックカードで表示とレンダリングを行っている時の表示反応に問題があります。
Cycles には、NVIDIA グラフィックカードの推奨仕様である CUDA と、AMD/ATI グラフィックカードでのレンダリングをサポートするための OpenCL の、2 つの GPU レンダリングモードがあります。
しかし、この実装は実験段階であり、イメージのようなアンビエントオクルージョンのレンダリングが現在サポートされています。


設定

GPU レンダリングを可能にするには、まず、User Preferences (CtrlAltU) の System タブにある Compute Device で、使用するデバイスを選択します。
次に、Render プロパティで、レンダリングに CPU を使うのか GPU を使うのかを設定します。


CUDA

NVIDIA CUDA は、NVIDIA グラフィックカードによる GPU レンダリングに対応しています。
GTX 2xx (Shader Model 1.3) 以降のグラフィックカードに対応していますが、GTX 4xx または GTX 5xx (Shader Model 2.x) カードの使用を推奨します。
それ以前のカードでは、CPU レンダリングよりも遅くなるケースがあります。
Cycles は、すべての OS において、最新のドライバーをインストールする必要があります。
また、Blender においても、使用する OS にあったバージョンをダウンロードしてください。
64 ビット版 OS を使用しているのであれば、64 ビット版の Blender をダウンロードしてください。

古いグラフィックカード

Mac や Linux は、正式にはサポートされていないカード用に、実行時にカーネルをコンパイルすることが可能です。
GeForce 8xxx および 9xxx カードは、正式リリースには含まれていませんが、実験的機能 を有効にすることによって動作する可能性があります。
それには、CUDA Toolkit 4.0 (64 bit 版) 以降がインストールされている必要があります。
他のバージョンでも動作するかもしれませんが、サポートはされていません。
初めてのレンダリングが実行されると、カーネルは使われている GPU アーキテクチャ用にコンパイルされる必要があります。
Cycles は、典型的な GPU カーネルに比べて非常に複雑であるため、グラフィックカードによっては、コンパイルに 40 秒から数分かかり、メモリ使用量も約 2 GB 程になる可能性があります。


OpenCL

実装はまだ終わっておらず、実験的機能 としてマークされています。
OpenCL を使ったレンダリングはまだ完全にはサポートされていませんが、多くのグラフィックカードをサポートできるように取り組んでいます。
フルカーネルは、AMD OpenCP コンパイラによるコンパイルをしていないため、現在は、シンプルなクレイレンダリングのみサポートされています。
初めてのレンダリングが実行されると、カーネルは使われている GPU アーキテクチャ用にコンパイルされる必要があります。
Cycles は、典型的な GPU カーネルに比べて非常に複雑であるため、グラフィックカードによっては、コンパイルに 40 秒から数分かかり、メモリ使用量も約 2 GB 程になる可能性があります。
OpenCL バージョン 1.1 以上が必要です。


よくある質問


レンダリング中に Blender が応答しないのはなぜ?

グラフィックカードがレンダリングしている間、グラフィックカードはユーザインターフェースを再描画できず、インタラクティブな応答ができなくなります。
できるだけ頻繁に GPU の制御を戻すことでこの問題を回避しようとしていますが、完全にスムースなインタラクティブ性は、特に重いシーンでは保証できません。
これは正しい解決策がないグラフィックスカードの制限ですが、将来的にはある程度の改善が可能かもしれません。
可能であれば、複数の GPU を組み込み、1 つをディスプレイ用として使い、他のをレンダリング用として使用するのが最善の方法です。

CPU でレンダリングできるシーンが GPU でレンダリングできないのはなぜ?

いくつかの原因があるかもしれませんが、最も一般的な原因は、グラフィックカードに十分なメモリが無いということです。
現在、グラフィックカードのメモリに収まるシーンのみをレンダリングすることができますが、これは通常、CPU とくらべて小さいものとなります。
例えば、8KB、4KB、2KB、1KB のイメージテクスチャは、それぞれ 256MB、64MB、16MB、4MB のメモリが必要とされることに注意してください。
GPU メモリよりも大きなシーンをサポートするシステムを追加する予定ではありますが、すぐに追加されるわけではありません。

レンダリングに複数の GPU を使用できますか?

はい。
User Preferences > System > Compute Device Panel で設定できます。

複数の GPU を使うことで使用可能なメモリは増えますか?

いいえ。
各 GPU は、自身のメモリにしかアクセスできません。

レンダリングはどれが速い? NVIDIA か AMD か? CUDA か OpenCL か?

現在は、CUDA を使った NVIDIA がより速くレンダリングされています。
CUDA 特有の機能を使っているわけでもないので、そうなる理由は特にありませんが、コンパイラはより完成されているため、より大きなカーネルをサポートすることができます。
OpenCL 対応はまだ作業中で、動作するフルカーネルをまだ持っていないため、まだ最適化されていません。


エラーメッセージ


Unsupported GNU version! gcc 4.5 and up are not supported!

Linux の場合、GCC のバージョンによってはこのエラーが出る可能性があります。
その場合は、/usr/local/cuda/include/host_config.h 内の、以下の行を削除します。
#error -- unsupported GNU version! gcc 4.5 and up are not supported!

CUDA Error: Invalid kernel image

Windows 64 ビット上でこのエラーが発生した場合、32 ビット版ではなく 64 ビット版の Blender を使用してください。

CUDA Error: Out of memory

これは通常、GPU 上にシーンを保存するための十分なメモリがないことを意味しています。
現在、グラフィックカードのメモリに収まるシーンのみをレンダリングすることができますが、これは通常、CPU とくらべて小さいものとなります。
詳しくは前述をみてください。

The NVIDIA OpenGL driver lost connection with the display driver

Windows のタイムアウト制限を超えたためだとすると、続行することはできません。
GPU が表示とレンダリングの両方に使用されている場合、Windows は、GPU がレンダリングの計算を行える時間に制限を設けます。
特に重いシーンをレンダリングする場合は、Cycles は非常に多くの GPU 時間を取る事になります。
Render プロパティの Performance パネルにある Tile Size を小さくすることで、この問題を軽減することはできますが、根本的に解決するには、表示とレンダリングのグラフィックカードを使い分けることです。

  • 最終更新:2012-06-15 15:22:32

このWIKIを編集するにはパスワード入力が必要です

認証パスワード