グラフィックス カードをアップグレードするとフレーム レートが低下する原因は何ですか?

StackOverflow https://stackoverflow.com/questions/56424

  •  09-06-2019
  •  | 
  •  

質問

以前は、NVIDIA 8400GS (256MB) を使用して、一貫した 60 FPS (モニターの同期速度) で実行されていた 2 画面の DirectX アプリケーションがあります。ただし、カードを 512 MB の RAM を搭載したカードに交換すると、フレーム レートが 40 FPS を超えるのに苦労しました。(トリプルバッファリングを使用しているため、これだけ高くなります。) 2 つのカードは同じメーカー (PNY) のものです。他のすべての条件は同じです。これは Windows XP Embedded アプリケーションであり、各カードの新しいイメージから開始しました。ドライバーのバージョン番号は 169.21 です。

アプリケーションはすべて 2D です。I.E.テクスチャ付きのクワッドと大量のプリレンダリングされたグラフィックスだけです (したがって、カードのメモリをアップグレードする必要があります)。CPU がオンザフライでデコードする圧縮アニメーションもあります。これにはテクスチャ ロックが含まれます。ロックには永遠に時間がかかりますが、CPU が更新するために別のシステム メモリ テクスチャを用意し、デバイスの UpdateTexture メソッドを使用してレンダリングされたテクスチャを更新することも試みました。全体的なパフォーマンスに違いはありません。

DirectX のパフォーマンスに関するインターネット上で見つかるすべての FAQ に目を通しましたが、DirectX プロジェクトに取り組むのはまだ初めてなので、難解な知識があれば役立つと思います。:)

この件について話している間にもう一つ。スワップ チェーンで Present を呼び出すと、現在のパラメーター (PresentationInterval) と呼び出し自体のフラグの両方で D3DPRESENT_DONOTWAIT を使用しているという事実に関係なく、DirectX はプレゼントが完了するのを待っているようです。これは 2 画面アプリケーションなので、2 つのモニターがゲンロックされていないように見えるため、これは問題です。スレッドプールを介して Present 呼び出しを実行することでこの問題を回避しています。この根本的な原因は何でしょうか?

役に立ちましたか?

解決

カードはまったく同じで (どちらも GeForce 8400GS)、メモリ サイズのみが異なりますか?メモリ サイズが異なると、クロック レートもわずかに異なります (つまり、より多くのメモリを搭載したカードでは、使用するメモリが遅くなる可能性があります!)。

したがって、最初に確認することは、次のようなものを使用して、GPU コアとメモリのクロックレートです。 GPU-Z.

他のヒント

サーフェス ロックが問題かどうかを確認する簡単なテストです。テクスチャの更新をコメント アウトし、フレームレートが 60hz に戻るかどうかを確認するだけです。残念ながら、ロックされたサーフェスに書き込んでリソースを更新すると、常にパフォーマンスが低下します。テクスチャでミップマップを使用していますか?DX9 にミップマップの自動生成が追加されたことは知っていますが、ミップマップの生成に多くの時間がかかる可能性があります。各フレームで同じリソースを常にロックしている場合は、テクスチャを除いたトリプル バッファリングのような、テクスチャのプールを作成してみることもできます。レンダリングで 1 つのテクスチャを使用させ、次の更新時に、プール内でレンダリングに使用されていない次に使用可能なテクスチャを選択します。もちろん、メモリに制限がある場合や、アニメーション化されたテクスチャの差分を作成するだけの場合は別です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top