blender-bar

Blender 2.81 でGPU+CPUレンダーのタイルサイズの最適解を探る

Blenderのverが2.81になった。この機会にGPU+CPUレンダーとタイルサイズの最適解を探ってみる。

先日、安かったから組んだRyzen7 2700のマシン、そのテストも兼ねて。

テスト環境

  • Blender 2.81 日本語
  • v2.74公式スプラッシュ fishy cat(CC0)
  • CYCLESレンダー
  • OS Windows10
  • CPU Ryzen7 2700(OC 3625Mhz)
  • GPU MSI Radeon RX 570 ARMOR 8G OC

fishy catは、もふもふの処理がクッソ重い。が、もうそれは過去のものらしい。Ryzen7導入により余裕すぎるレンダリング速度に到達。

ただし、レンダー後のコンポジットノードの関連処理は未だにクッソ重いため、「出力プロパティ→ポストプロセッシング」のコンポジティングとシーケンサーをオフにして測定したものを基本とした(2.74との互換性の問題がありそう)。寸法はデフォの200%。

この状態から以下3か所の設定を変更して差を測定した。

  1. 「レンダープロパティ→パフォーマンス→タイル」の数値
  2. 「レンダープロパティ→レンダーエンジン」のデバイス
  3. 「編集→プリファレンス→システム→Cyclesレンダーデバイス」のオンオフボタン

この環境の場合、初回レンダリング時のカーネルロード時間が割と長い(Radeonのドライバverのせいかも)ため、数回レンダリングしたのち、最も早いタイムを採用した。

GPU+CPUレンダーの効果

いつの間にか、GPUとCPUを同時に使いレンダリングできる機能(Hybrid renderingやCombined renderingなどと呼ばれている)が実装されていた。

効果を以下タイルサイズのパターンで検証。

  • CPUのみ 32
  • GPUのみ 1024
  • CPU+GPU 32+α

※GPUとCPUの最適なタイルサイズは反比例する傾向にある。GPUは大きいほど速く、多コアのCPUは小さいほど速い。のだが、ドライバとblenderのチューニング次第(おそらくRTX20シリーズあたりに最適化されてる)で大きく変わる模様。2.7系と2.8系でも結果が変わる。

CPUのみ タイル32×32

21.65秒を記録。

単純に計算して、以前の3倍くらい速くなっている(以前書いた記事)※。さすが16スレッド20MBキャッシュだ。数の暴力は強烈。

※前述のとおり2.8系の方が速い。旧環境(i7 3770)では2.79が50秒台、2.8系だと40秒台程度。

OCしすぎに注意

AMD Ryzen Master(AMD公式) で3.7Mhz以上ブッコムとBlenderが落ちた。電圧アップやクーラー強化をやりだすとキリが無いため、3625Mhzで終了。

なお、定格(3.4Ghz)だと22.5秒前後になる。

数の暴力を見せつけられると、つい16コア32スレッドのCPUが欲しくなるが我慢しとく。Blenderで遊んでる程度ではそんなもの不要。

Ryzen 9 はまだ高い。けど、どうせ数年内に全部12~16コアになるのだろう・・・その時買えば良し。

Core i7 5960Xが出てからたった5年、Xeon X6550が出てから、まだ10年も経ってない事を考えると・・・ねぇ・・・

GPUのみ タイル1024×1024

22.78秒を記録。

CPUの方がやや速いという結果になる・・・メモリ使用量も多く、発熱も大きい。危険な香りが漂っていたためOCは中止(このグラボはメーカーOCモデル)。

レンダリング結果から、「RX570≒Ryzen7 2700」になるようだ(あくまでBlender@fishy catの場合)。

というか、前回も同じような結果だった。やはりBlender的には、ミドルクラス以下のグラボを導入する意味はあまり無さそうだ。

現状(2019年末~)Ryzen 7 2700クラスのCPUは割と安い。

Blender目的にグラボを買うならGTX1660Tiクラス以上は必須。価格的に1660では微妙。

少なくともRX570を買ってもほとんど意味がない事は解る。どうでも良いグラボを差しておいてその分CPUに投入するか、CPUを抑えてGTX1660Ti以上を買った方が良さげ(ただし、これで実際速くなるかは解らない)。

CPU+GPU タイル32×32

21.04秒を記録(コンポジティング有にすると82秒)。

たいして速くならない!

まぁ、16スレッドから1スレッド増えても、最大6.25%しか変わらない・・・という事だ。

GPU複数差しすると比例して効果が出るのか(動くのか)は未知数だが、Blender的にはGTX1650の連装などもアリなのかもしれぬ。いや、それならRTX買った方が良いか・・・

CPU+GPU タイルサイズ変更時

次に、CPU+GPUの設定を入れたまま、タイルサイズを変更してみた(16+1スレッドでレンダリング)。

出力画像は全て同じであり、省略する。

なお、32×32の場合、480分割になる。

  • 8×8 21.85秒(最小サイズ)
  • 10×10 21.49秒
  • 20×20 21.28秒
  • 40×40 20.66秒(312分割)
  • 50×50 20.44秒
  • 60×60 20.56秒
  • 70×70 20.45秒
  • 80×80 20.74秒
  • 90×90 21.05秒(72分割)
  • 100×100 21.30秒(55分割)
  • 125×125 24.05秒(36分割)
  • 150×150 28.42秒(28分割)
  • 175×175 35.11秒(18分割)
  • 501×23 21.79秒(解像度の倍数)

fishy catの場合、鼻と髭の部分の処理が最も重いため、ココに割り当てられたスレッド(コア)が足を引っ張る。

つまり、1スレッドが21秒未満で処理できるのは、100×100の10000ピクセル前後らしい(重ねて言うがfishy catの場合)。

まとめ

オブジェクトの形状等による個別チューニングが必要なようだ。

とりあえずは、32~64ピクセル程度にしておいてCPU+GPUの設定にしておくのがベターか。

数年前は、グラボでの計算(GPGPU)メインの方がコスト的には優勢だったようだが、ミドルハイクラスのCPUですら10スレッド以上が標準になった今では、多コアCPUで攻めた方が良いのかもしれない。

少なくともBlender用途だと、Ryzen7 2700が2万以下で買えるようになった現状、GTX1650やRadeon RX570を導入する意味は、ほとんど無い。

しかしまぁ・・・レンダリングエンジンの仕様が変わったら全部パーなので・・・投資は自己責任で。

実際確実に2.80→2.81でCyclesエンジンの何かが変わっている。明らかに色味が違い、GPUモードは少し速くなった。

OptiX、RTコア、Vulkan あたりの対応のため何らかの変更が入ったのかもしれない・・・

2.80のレンダー結果(被写界深度の処理が違う?)


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA