Windows OS上でカーネル実行時にタイムアウトエラーが出る

Windowsではグラフィックドライバ上でGPUプログラムの実行時間に制限があります. ゲームなどのGPUを用いるプログラムによるハングアップにより画面が写らない等の現象が起こり, ユーザがリセットボタンを押さざるを得ない状況を避けるために設定されているようです.

Windows VISTAで2秒,XPで5秒がデフォルトで設定されている値です. Windows 7は資料は見つかっていないのですが,実際にやってみるとおおむね2秒を超えるとタイムアウトが起こるので, VISTAと同じでしょう.

OSのこの設定を変えるには,レジストリをいじる必要があります.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\GraphicsDrivers

にDWORD値を持つキー "TdrLevel" を追加し,その値を0にします. 1にするとtimeoutチェックは行いますが,リカバリーは行わない,2だとVGAでリカバリー, 3が標準の方法でリカバリーします. また,DWORD値を持つキー "TdrDelay" でタイムアウトの秒数を設定できます.

レジストリをいじってTDR(timeout detection and recovery)を無理矢理なくすのは実際にはあまりよくないので, できれば実装方法を見直してタイムアウト時間内に処理が終わるようにするのがよいでしょう. また,OSはウィンドウをモニタに描画しているGPUに関してTDRが働くので, グラフィックカードを2枚用意し,1枚をCUDA専用,もう1枚でモニタにつないで描画に使えば回避できるようです.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-10-27 (木) 15:09:14 (2038d)