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枚でモニタにつないで描画に使えば回避できるようです. |