パソコン・メモメモ備忘録

気の向くままパソコン関係等で気になることを書き記す。時々更新!

GPU Timeout

Windows では OpenGL を使って GPU でのレンダリングに時間がかかると GPU をリセットする機能が付いているらしい。高解像度の一枚絵を結構重めのシェーダでレンダリングする際に、そういう事が起こった。しばらく画面が固まった後、一瞬画面が暗転して、復帰して、TimeOut のエラーメッセージが出る。

調べてみるとこれに関するMSDN のページがあった(英語)。Timeout Detection and Recovery(TDR)というらしい。OpenGL だけでなくて Direct3D などでも同じようだ(OpenGL も最終的に Direct3D の変換されて描画しているとか...ほんまか?)。まぁ、GPU が不安定になったときには必要な機能かもしれない。特に、Vista 以降は、普通の画面表示も DirectX を用いているので、GPU がとられっきりになると、CPU が暇でも、画面表示が固まってしまうことになる。

ただ GPU に高解像度で重い描画を、非リアルタイムでやらせたいときには、ちょっと不都合。デフォルトでは 2 秒待って、GPU から返事返事が無ければ Timeout してしまうようだ。レジストリに記述を追加すれば、任意の秒数に設定したり、TDR 自体を off にもできるようだ。

とりあえず TDR を Off にして様子を見てみると、これまで Timeout エラーが出ていた描画が無事できるようになった(その間画面が固まるわけではあるが)。まぁ実際に GPU に問題があって制御が返ってこないこともあるので、TDR を off にするのはやりすぎで、必要最小限の秒数を設定するのが良さそう(と言われた)。

ちなみにレジストリを regedit で編集した後は、再起動しないと反映されないっぽいので注意。

まぁ、普通の人は、こんなレンダリングをすることは無いだろうから、気にしなくて大丈夫かな。