2012-03-07 21 views
1

NVIDIA geforceカードを使用しているときに、CUDAプログラムを実行しようとすると2秒後にエラーが発生します。私はhereを読んで、HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\GraphicsDriversTDRlevelキーを使うことができます。しかし、私はレジストリにそのようなキーが表示されません。あなた自身を追加する必要がありますか?他の誰かがこの問題を経験したことがありますか?もしそうなら、それをどうやって解決しましたか?ありがとう。GPUカードが2秒後にリセットされる

+2

これは明らかにプログラミングに関する質問ではありません。スーパーユーザーに移行する投票。 – unwind

+3

「エラーが発生しました」というカードではなく、Windows WDDMサブシステムであり、ユーザスペースプログラムがディスプレイGPUを占有するのを事前定義された時間以上禁止するように設計されています。 – talonmies

答えて

2

モニターに接続されているグラフィックスカードで、cudaカーネルが2秒以上実行されている場合は、タイムアウトが発生します。したがって、これを避けるには、プログラムを2秒の制限を下回る複数のカーネル呼び出しに分割する必要があります。もう1つの選択肢は、モニタに接続されていないグラフィックスカードを使用することです。その後、タイムアウトの制限はありません。

cudaGetDeviceProperties(&prop,i) 
prop.kernelExecTimeoutEnabled 

上記のコードは、タイムアウトが有効かどうかを示しています。

最後に私はレジストリエントリについても読んだけど、(GNU/Linuxを使っているのでオプションではない)落胆しているようだ。私は間違っているかもしれませんが、私は自分でそのような鍵を追加する必要があると思います。

6

Windows Vista以降を使用していることを前提としています。

article you linked toには、Microsoft WDDMタイムアウト検出と回復のメカニズムを制御するレジストリキーのリストが含まれています。 talonmiesがコメントしたように、エラーを出すカードではありません。長時間実行しているカーネルを検出し、表示目的でGPUを回復するためにそれを殺すMicrosoft Windows WDDM TDRメカニズムです。

カーネルが長時間実行されている場合、GPUは計算作業で占有されていてディスプレイを更新できませんが、ほとんどの人がそのことを悪いと考えると思います。いくつかの開発者は、システムが数秒間応答しなくなる可能性があると理解して、より長い実行カーネルを開発できるように遅延を増やすことを選択しました。デバッガをWDDM GPUで使用する場合は、TDRを無効にする必要があります(NVIDIA Tesla GPUでWDDMのすべての問題を回避するTCCをサポートしています)。

キーが存在しない場合は作成する必要があります。私がお勧めします:

  • TdrLevel 3(すなわち有効)
  • TdrDelay 5(すなわち5秒)
  • TdrLimitTime 10
  • TdrLimitCount 10(すなわち10秒で最大10回のタイムアウト)

代わりに、実行に2番目のGPUを使用するか、カーネルの時間が2秒未満になるように問題を調整します。本当に大きな問題は、専用のGPUで実行する必要があります。これはもちろん、カーネルのバグではないと想定しています!

関連する問題