CPUとGPUの組み合わせでBlenderのレンダリングをしてみた
Blender 2.8 betaのCyclesレンダーは、GPUとCPUを組み合わせてレンダリングできます。そこで、どれくらい早く結果が得られるのか試してみました。
目次
GPUとCPUを組み合わせる
BlenderのCyclesレンダーは、レンダリングするときに画像を小さな区画(タイル)に分けてレンダリングします。一般的にGPUでレンダリングするときはタイルサイズを大きめに、CPUのときはタイルサイズを小さめにすると、画像全体のレンダリングにかかる時間が短くなります。
CPUとGPUを組み合わせる場合はタイルサイズを小さめにすると言われているのですが、実際はどうなのか試してみました。
サンプルと設定方法
Blenderのバージョンは2.8 betaです。どんどんアップデートされているので、正式リリースされるころには違う結果が得られるようになってるかも。
使用したPCは、CPUがRyzen 7 2700Xで、GPUがGTX1060 6GBです。
画像はBlender 公式のデモ のデータを使用しました。Car Demo (bmw27)とClass roomです。
「設定」の「システム」に「Cyclesレンダーデバイス」の項目がありまして、CPUとGPUの両方にチェックします。「レンダー」メニューのレンダーエンジンをCyclesにして、デバイスを「GPU演算」にします。そうすると、GPUとCPUの両方が使用されます。
比較してみた
まずはCar Demo(bmw27)です。
レンダー |
タイル |
時間 |
|
---|---|---|---|
CPUのみ |
32x32 |
04:34.04 |
|
GPUのみ |
256x256 |
04:01.04 |
|
CPU+GPU |
16x16 |
01:41.69 |
|
CPU+GPU |
32x32 |
01:48.98 |
|
CPU+GPU |
64x64 |
02:13.84 |
※1 |
CPU+GPU |
128x128 |
03:08.88 |
※1 |
CPU+GPU |
256x256 |
07:11.80 |
※1 |
※1はGPUが先にレンダリングを終えてしまって、GPUが無負荷な時間が生じてました。
とくに256x256ではGPUが担当するタイルはあっという間にレンダリングが終わってしまって、CPUのレンダリングをひたすら待つという状態でした。
下図はタイルサイズを256x256にしたときの、レンダリング開始時の様子です。
図をよく見ると1枚の画像が12個に区分けされています。それに対して、CPUが8コア16スレッドの能力を持ってるわけです。GPUは自分の担当のタイルのレンダリングを終わらせると、停止します。あとはひたすらCPUを待つわけです。
次にClass roomです。
レンダー |
タイル |
時間 |
|
---|---|---|---|
CPUのみ |
32x32 |
15:00.92 |
|
GPUのみ |
256x256 |
11:30.34 |
|
CPU+GPU |
16x16 |
06:21.50 |
|
CPU+GPU |
32x32 |
05:20.79 |
|
CPU+GPU |
64x64 |
05:56.53 |
|
CPU+GPU |
128x128 |
06:22.18 |
※1 |
CPU+GPU |
256x256 |
07:28.85 |
※1 |
※1はGPUが先にレンダリングを終えてしまって、GPUが無負荷な時間が生じてました。
下図は、タイルサイズを256x256にしたときのレンダリング終了時の様子です。このデモデータは画像の中心から順番にレンダリングするようになっているのですが、中心部のレンダリングが最後まで残っています。つまり、最初に割り当てられたタイルをCPUがレンダリングしている間に、GPUが周囲のタイルを次々にレンダリングしてしまったという状態です。
考察
CPUとGPUは、併用した方がレンダリング時間は短くなります。 計算資源が増える訳ですから当然ですね。ただし、CPUとGPUが全力で頑張りますので、発熱と廃熱に注意です。
タイルサイズは小さめが良いです。 どうやら、CPUの各スレッドとGPUは割り当てられたタイルをそれぞれレンダリングするようです。CPUは複数のタイルを同時にレンダリングしますが、その代わり各タイルのレンダリング時間は長めです。その間、GPUはタイルを1つずつレンダリングしていきます。そうすると、CPUがレンダリングしているのにGPUがレンダリングするタイルが残っていないという事態が起こるわけですね。
本投稿の結果はRyzen 2700X (8コア16スレッド)とGTX1060の組み合わせの場合の結果です。
CPUのコア数や1コアあたりの性能やGPUの性能によって、どれくらいのタイルサイズが適正か変わってきます。レンダリングする画像によっても変わります。各PCでどれくらいが適正なのか試してみないといけないですね。
公開日
広告
PCカテゴリの投稿
- BlenderでマルチGPUをしてみた
- CPUとGPUの組み合わせでBlenderのレンダリングをしてみた
- Jupyter Notebookがすごい
- Jupyter notebookをWindows10にインストール
- SphinxにTwitter Cardを出力させる
- Surface Pro 6でトリプルディスプレイ
- Surface Pro 6のBlenderのレンダリング性能を測る
- USキーボードでプログラミングが捗るというのは本当なのか
- USキーボードの使用をやめた話
- Visual Studio CodeでSSHを使ってサーバーのファイルを編集する
- Visual Studio Codeで定型文(スニペット)を入力する
- reStructuredTextをdocx(Word形式)ファイルに変換してみた
- 安売りのPCにLinuxを入れようとしてハマった話
- 用紙のサイズのまとめ