2016年8月28日日曜日

SubStance Painter2.2で表示される [GPUIssuesCheck] The current TDR~ を解決する

SubStance Painter2.2を起動すると以下のようなログが流れる場合があります。



指定のURLからallegorithmicのサイトに行けば解決方法(英語)が書かれていますが、レジストリを直接書き換える必要があります。
(製品ソフト使用でいきなりレジストリ書き換えというのは少々敷居が高い気もします・・・)



■環境について

OS: Windows10pro バージョン1607(Build 14393.82)
CPU: i7-6700
MEM: 32GB
GPU: GeForce GTX960(4GB)


■何が起きているのか?

以下問題のログメッセージ

[GPUIssueCheck] The current TDR (GPU hang recovery) delay is low 2s.
See http://support.allegorithmic.com/documentation/display/SPDOC/GPU+drivers+crash+with+long+computations


このTDRTimeout Detection and Recovery の略です。

GPUドライバ側でGPUがハングアップしたと判断する時間値(タイムアウト値)が2秒を示しています。
GPUが何らかの原因(熱や故障など)で一定時間以上応答しない時ハングアップしたと判断しGPUにリセット(?)をかけるようです。

この判定時間=タイムアウト値が2秒になってるということです。

そしてSubStance Painter2.2にとって2秒では「タイムアウト値が短すぎるかもしれない」とログでレポートしているわけです。



SubStancePainter2.2はGPUコア(GPGPU的な利用?)を活用しているようで、大きなテクスチャを扱う等の際に、その処理に時間がかかることがあるようです。
(特にテクスチャExport時に長時間GPUを使用するようです)

その際先のTDR値の2秒を超えると、ドライバ側でGPUがハングアップしたと検知されてしまい、処理が中断してしまうようです。

つまりこのTDR値を適切な値に設定しすれば良いということになります。
(ちなみに2秒はドライバ内デフォルト値)


■適切なTDR値は?


ちなみにこのTDR値を0にするとハングアップ検出がされなくなります。
これは本当にGPUがハングアップした際にOSを抱き込んで固まる危険性があります。
その場合PCのリセットボタンか電源をOFFにするしかなくなるので少々リスキーです。

しかしどれくらいに設定すれば良いかの推奨値は先の公式ページにも特に書かれていません。
極論どれくらいの処理をさせるか=作業をするかに依存しそうです。

ひとつの目安としてテクスチャサイズが関係しているようです。
ちなみに巨大なテクスチャで(4k?8k?以上とか)あまりに複雑なことをやるとGPUメモリが3~4GBでも不足するといった事態もあるらしいです。
(そもそもExportができないらしい?)

フォーラム(海外)などの情報では60~240~480などといった数値が散見されます。

まずは30か60程度に指定しておき、作業中にExportがうまくいかない等の状況が発生したら120、240~等に増やしていけば良いかもしれません。



■レジストリ書き換え作業

まず概要ですが、

  • タイムアウト値の設定箇所(キー)は2つあります。
    • TdrDelay
      GPUスケジューラからのGPU処理中断(タイムアウト)されるまでの猶予時間。単位は秒。デフォルト2秒。
      この値秒以上GPUの応答が無いとGPUがハングアップとみなされる。
      今回はTdrDelay値120に設定してみます。
    • TdrDdiDelay
      OSのスレッド処理がGPUドライバ処理中断を判断する時間。単位は秒。デフォルト5秒。
      今回はTdrDelay値125に設定してみます。※TdrDelay<TdrDdiDelayとなっているようなので、TdrDelayより少し長い程度に設定してみます。どうせGPUハングを検出したらアプリ側で長い間待っていても意味がない気がするので。
  • この2つのキーは初期状態では存在していないかもしれません
    その際はキーを作ります。
    データは DWORD です。
    (キーが存在していない場合はデフォルト値が使用されます)




以下書き換え作業手順。
  1. スタートメニュー右クリック>ファイル名を指定して実行 欄で regedit と入力してENTERキー押し。
    「このアプリがデバイスに変更を加えることを許可しますか」のダイアログでは「はい」を選択。
    レジストリエディタを起動。
  2. レジストリエディタ画面左のツリーで以下を辿り右画面に表示させます。
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers
  3. TdrDelayが無い場合は作成します(ある場合は次へ進む)
    右画面の空白部分で右クリック>新規(N)>DWORD(32ビット)値(D)
    作成した行の上で、右クリック>名前の変更 でTdrDelay に変更。
  4. TdrDelayの行の上で右クリック>修正。
    「表記」で「10進数(D)」をクリック。
    値のデータ(V)で120と入力します。
  5. TdrDdiDelay についても同じ要領でキーが無ければ作成し、名前変更、値の修正をします。
  6. レジストリエディタを終了し、PCを再起動します。
 これで書き換え作業完了です。

SubStancePainter2.2を起動して問題のログが表示されなければうまくいっています。




■参考サイト

msdn.micrfosoft.com: TDR Registry Keys









0 件のコメント:

コメントを投稿