2

OpenGL Compute Shaders を使用してデータの計算を行っています。1 つのシェーダーを 10 秒以上実行できないことを除けば、すべて正常に動作します。glBeginQuery(...)とで時間を計りglEndQuery(...)ます。シェーダーは 1 ミリ秒から 10 秒で正常に実行されます。シェーダーが必要とする時間を増やすために、シェーダーを呼び出さずにデータを追加するだけです。しかし、シェーダーが 10 秒以上必要な場合、データを追加することはできません。その後、プログラムがフリーズし、それ以上何もできなくなります。私が測定した最高​​値は 11.02 秒でした。

では、コンピューティング シェーダーの時間境界はありますか? それとも、私が間違っていた明らかな何かがありますか?

追加情報:Nvidia GT 555Mを搭載したノートブックで作業しています。私は bumblebee を使用し、QtCreator を起動optirunして Nvidia カードで実行します。私を助けるためにさらに情報が必要な場合は、お尋ねください. それに答えるために何が必要なのか、私にはわかりません。

4

1 に答える 1

2

Windows のタイムアウト検出と回復の制限に達しているようです。

通常、これのデフォルトは 2 秒で、10 秒や 11 秒ではありませんが、何かまたは誰かがレジストリを変更した可能性があります。

ここを見て、10/11 秒の TDR が得られるようにレジストリ キーが設定されているかどうかを確認してください。

これが自分のマシンでのみ実行する予定の独自のアプリである場合は、この制限を自由に増やしてください。ただし、他の人にアプリケーションを実行してもらう場合は、他の人がレジストリ設定を変更してアプリケーションに対応することを期待しないでください。

Compute の作業を、数千ではなく、(最大で) 数十ミリ秒かかる管理可能な作業のチャンクに分割する必要があります。

編集:

Linux を使用しているとコメントしたため、NVIDIA ドライバーには「ウォッチドッグ」タイマーをオーバーライドするオプションがあります。

于 2015-04-20T22:51:53.240 に答える