2

くだらない

私は約 1 年間 (同じハードウェア上で) OpenGL でコーディングしてきましたが、上の画像のようなアーティファクトを取得するようになったのはつい最近のことです。それらは私のプログラムを短時間 (数分) 連続して実行した後に表示され、どこにでも表示されます: ワードパッド (写真を参照) からデスクトップやタスクバー、さらには他のゲーム (League of Legends ランチャー、それはソフトウェア レンダラーです) まで。考える)。

それらは、画像に表示されているものと同様の任意の形式を取ることができます: 黒/白のブロックまたは私のアプリケーションからのテクスチャの断片。影響を受けるアプリケーションが画面を更新すると、アーティファクトは消えます。

情報

私のアプリケーションはそれ自体は問題ないように見えますが、アーティファクトはありません

最新のドライバー (hp elitebook 8540w を持っています)、windows 7 64 ビット、および Opengl 3.3 以下の ATI m5800 カードを使用しています。

コード サンプルを投稿しないのはなぜですか? (不愉快に聞こえるかもしれませんが) アーティファクトを引き起こしているコードの特定の部分ではないように思われるため、問題なく 15 分間プログラムを簡単に実行できます。私のグラフィックス カードは摂氏 68 度まで熱くなり、アーティファクトは発生しません。アーティファクトは、複数回連続して実行した後に発生し始めますが、アーティファクトが発生した場合でもビデオ カードが 68 度を超えることはありません。

なぜこれをここに投稿するのですか?これが私のコードによるものなのかハードウェア/ドライバーによるものなのかはまだわからないため、この質問は技術的な観点から見ると非常に難しいと思うため、他の方法では「新しい GC を購入する」という回答しか得られません。場所。

フレームバッファやシェーダから 3D テクスチャ、バッファテクスチャ、テクスチャ配列など、さまざまな OpenGL を使用しています。

私のハードウェアは、私が知る限り、損傷を受けていませんが、エリートブックであるため、過熱しやすい傾向があります。

私の推測

(RAM とは、グラフィック カードのビデオ RAM のことです)

私は OpenGL についてよく知りませんし、グラフィックス カードとそのドライバーについてはさらに詳しく知っていますが、これに近づこうと思います。以下はまとまりのない思考の流れです。大胆な部分だけを読んでください。

グラフィック アーティファクトで見つけたすべてのインターネット ソースによると、過熱が原因で RAM が不良であることがわかります。

ただし、これが事実である場合、なぜこの「不良 RAM」は連続実行後にのみアクセスされ、再起動後には決してアクセスされないのでしょうか? アプリケーションが停止して GC の状態がリセットされたときに、OS がすべてのグラフィックス メモリをクリーンアップするべきではありませんか? RAM が不良の場合、グラフィック カードがデータの破棄に追いつかず、最終的に他のすべてが「取得」されたときにこの RAM にアクセスするようです。また、RAM の誤動作が温度に基づいている場合、アプリケーションを 15 分間 1 回実行できるのに、温度が同じままで同じ期間に 4 回実行できないのはなぜですか?

また、これは本当に悪い ram ですが、テクスチャの一部が表示されるのはなぜですか? これは、RAM が一部で正常に機能したことを意味するのではないでしょうか? (写真の青いブロックは私が使用しているテクスチャの一部です)

さらに重要なのは、なぜ自分のアプリケーションでのみアーティファクトを取得しているように見えるのですか? 私がインストールした他のどのアプリケーションも、これらのアーティファクトをどこにも生成しません!

これは、私のハードウェアではなく、私が何か間違ったことをしていることを示唆しています! (または、ほとんどのゲームが DirectX で実行される可能性が高いため、OpenGL が私のラップトップで何か問題を起こしています)。

そして最後に、すべてを奇跡的にしています。私のハードウェアは私の大学から部分的に資金提供を受けています。これは、私の友人が同じハードウェア(本当に 100% 同一)を持っていることを意味し、彼は私のコードを実行するアーティファクトを取得していません。

それで...それはドライバーのバグですか?私の友人は私と同じドライバーを使っています... 私はここで完全に道に迷っています。

私が結論づけることができるのは、私の RAM が壊れており、私と私のアプリケーションを除いて、どうにかして誰もが悪い部分を回避することができているということです。

私が聞きたいのはこれです: どうやってこれらのアーティファクトを手に入れたのですか? また、一部のアプリケーションはどのようにしてそれらを回避できますか? ハードウェア/ソフトウェアで何が起こっていますか?

PS: これは非常に構造化されておらず、質問として混沌としていると理解しています。これは、私がしばらくこの問題に取り組んでいて、見つけた情報を含めようとしたためです。今日、または今から 1 年後に、この主題に関連していると思われる情報があれば幸いです。何か提案があれば、喜んでこの投稿を再構成します。私はアーティファクトについてたくさん検索しましたが、問題のアプリケーションに限定されたコードによる異常を説明する検索結果が非常に多く、ほとんど役に立ちません。これは、私が重要な情報源を見逃している可能性があることを意味します。もしそうなら、リンクしてください。

これがどのように見えるかに反して、私は情報と議論を求めているだけで、直接的な解決策を求めているわけではありません。最善の解決策は明らかに新しいグラフィックス カードを購入することです。

重要な情報源:ビデオ カードの問題の診断

4

1 に答える 1

3

グラフィック アーティファクトで見つけたすべてのインターネット ソースによると、過熱が原因で RAM が不良であることがわかります。

そして、彼らはおそらく正しいです。これは、欠陥のあるグラフィックス RAM で見られる典型的な種類のエラーです。

ただし、これが事実である場合、なぜこの「不良 RAM」は連続実行後にのみアクセスされ、再起動後には決してアクセスされないのでしょうか?

再起動後は、グラフィックス RAM のごく一部しか実際に使用されないためです。最初の 64MiB 程度のようなものです。これは、最新のグラフィックス カード (数 100MiB) に存在する膨大な量の RAM と比較して、かなり小さい量のメモリです。

プログラムがしばらく実行された後、大量の RAM を作成して解放している場合は、さらに RAM を消費します。パフォーマンス上の理由から、グラフィックス RAM の割り当てはすべて連続している必要があります。また、物事を単純かつ高速に保つために、ドライバーは未使用の連続した RAM の先頭への追加割り当てのためにベース ポインターをインクリメントするだけです。

アプリケーションが停止して GC の状態がリセットされたときに、OS がすべてのグラフィックス メモリをクリーンアップするべきではありませんか?

たとえば、プログラムの実行中に OS が新しいグラフィックス メモリを予約したとします。プログラムが終了しても、他の割り当ては残ります。または、プログラムが終了した後、ドライバーの内部状態により、以前とは異なるメモリ部分が割り当てられます。

したがって、すべてのグラフィック RAM に欠陥があるわけではありません。(欠陥のない) RAM の最初の部分のみが事前に割り当てられてアクセスされる、後の部分のみ。

技術的には、RAM の欠陥部分を特定して使用しないようにすることができました。しかし、ドライバーではそれがサポートされていません (私は知っています)。

于 2013-10-06T14:40:38.563 に答える