シェーダーキャッシュ:定義とそれがゲームのパフォーマンスにどのように影響するか

削除する一時ファイルの中に何度も見たことがあるでしょう Windows または、いわゆるDirectXシェーダーキャッシュまたはシェーダーキャッシュのスペースを確保します。 それが何であるか、そしてそれを削除したときのゲームのパフォーマンスが急落する理由を疑問に思ったことがある場合は、この記事を読む必要があります。

GPUはCPUと同じようにプロセッサですが、並列処理がスレッド指向であるという点で異なります。 そのため、グラフィックプロセッサはTLPタイプであり、中央のプロセッサはILPタイプであると言われています。 これに、グラフの実行スレッドがプロセスではなく、グラフィカルプリミティブまたはデータに向けられていることを追加する必要があります。

シェーダーキャッシュ

つまり、三角形、ピクセル、またはフラグメントごとに、3Dパイプラインの各ステージに独自のシェーダープログラムがあります。 これは高水準言語で書かれています。たとえば、DirectXについて話している場合はHLSL、OpenGLまたはVulkanについて話している場合はGLSLです。 ソニーのPSGLなど、特定のシステム専用のものもありますが PlayStation コンソール。 これらのプログラムはコンパイルする必要があるため、ソースコードからバイナリに渡す必要があります。

シェーダーキャッシュとは何ですか?

シェーダーキャッシュCoD

問題は、CPUがすべてx86である場合とは異なり、GPUの場合、レジスタと命令のセットがブランド間だけでなく、同じブランドのアーキテクチャ間でも共通ではない場合に発生します。 これは、プレイ中にシェーダーのコードをコンパイルする必要があることを意味し、スタッターとパフォーマンスの問題を引き起こします。 したがって、生成されたバイナリはファイルに保存され、ゲームが再度ロードされると、グラフィックカードのビデオメモリに再ロードされます。これは、シェーダーキャッシュまたはシェーダーキャッシュと呼ばれます。

したがって、グラフィックカードを更新する場合、ハードドライブまたは SSD 同じように。 また、これが初めてゲームをするときにグラフィックカードを判断するのが苦手な理由のひとつです。 特に彼らの通常のパフォーマンスを測定したい場合。

VRAMもスペースを占有します

キャッシュシェーダーコントロールパネルNVIDIA

  GPU グラフィックカードのはシステムにのみアクセスします RAM PCI Expressインターフェイスを介してDMAユニットを使用するため、シェーダーキャッシュは、ストレージユニットからRAMへ、およびRAMからビデオメモリへのシーンを構成するために必要な視覚情報とともにロードされます。 DirectStorageを使用すると、グラフィックハードウェアがSSDに直接アクセスできることが期待されますが、アクセスの待ち時間が短縮され、 CPU.

多くのゲームは十分に開発されており、シェーダーキャッシュはほとんどスペースを取りませんが、他のゲームはそれほど多くはなく、最終的に大量のグラフィックメモリを消費します。 つまり、ドライバーに関連する制限またはゲーム自体がある場合、新しいコンパイルが古いコンパイルに置き換わり、初期のパフォーマンスの問題が再発することが突然わかります。

いずれにせよ、プレイしているゲームがビデオRAMにスペースを必要とする場合は、現在のフレームのレンダリングが優先されることに注意する必要があります。 そのため、システムメモリに一時的に保存されているシェーダーキャッシュを取得しようとします。 また、ストレージユニットへのダンプは継続的に行われることを忘れないでください。グラフィカルプリミティブのシェーダーが生成されると、再度実行する必要がなくなるためです。

レイトレーシングとシェーダーキャッシュ

レイトレーシングでGPUについて最もよく聞かれる質問は、ブール型です。 この光線はこのグラフプリミティブと交差しますか? 答えは必ずしもイエスではないので、状況によって起こるかどうかという条件があります。 したがって、このシェーダーを初めて実行するときは、考えられるすべての結果を得るために、キャッシュシェーダーをコンパイルして生成する必要があります。

コンソールのシェーダーキャッシュ

XSX、XSS、PS5コンソラ

ビデオゲームコンソールには、工場出荷時の最初のモデルから最後のモデルまで、常に同じコンポーネントが含まれます。 数年経ちましたが、仕様は変わりません。 たとえば、今日では、最も古いグラフィックカードよりも古いモデルを見つけることができます。 ハードウェアの不変性を利用するXNUMXつの方法は、ゲームインストールにすでにコンパイルされているいわゆるシェーダーを利用することです。 これにより、ゲームごとにシェーダーキャッシュを生成する必要がなくなりますが、これは両刃の剣でもあります。

たとえば、より強力で下位互換性のあるコンソールを作成する場合は、次のオプションがあります。

  • ISAを新しいシステムのGPUにエクスポートして、古いシステムのスーパーセットとして機能させます。 これは、AMDがPlayStation5およびXboxシリーズでRDNA2アーキテクチャを使用して行ったことであり、GCN用に設計された前世代のゲームをスムーズに実行します。
  • 以前のシステムのすべてのグラフィック回路を新しいシステムに統合します。 これは、ニンテンドーが3番目のPlayStationとXNUMX番目のモデルのいくつかでXNUMXDSとSONYまでのコンソールで行ったことです。

エミュレーターレベルでは、多くの場合、コンパイル済みのシェーダーを取得して逆のプロセスを実行し、グラフィックカードで動作するように生成されたシェーダーキャッシュを生成できる中間コードを生成します。 ただし、これは正確な科学ではなく、ゲームを実行しているときに特定のグラフィックの不具合が発生する可能性があります。

GPUメーカー向けの最適化

LovelaceHopperOrganización

両方 NVIDIA & AMD 通常、最新のドライバーに最適化を含めて、最も削減します-エッジ ゲーム。 これらには、パフォーマンスを向上させるための最適な設定だけでなく、各ゲーム用にすでに最適化されたシェーダーキャッシュと、ベースゲームよりも優れたスペックが含まれています。 そして、両方のメーカーが、今日存在するすべての中で最も強力なゲームで可能な限り最高のパフォーマンスを発揮する最先端のグラフィックカードに関心を持っているということです。

したがって、これらはさまざまな開発スタジオにお金を残します。開発スタジオは、特定のグラフィックアーキテクチャ用にシェーダープログラムを最適化し、ベースゲームに付属しているものよりもうまく機能するシェーダーキャッシュを生成します。 これは、新しいモデルの購入を促し、プログラムの廃止を作成するために行われます。これは、業界を維持する消費の流れが存在するために必要です。 そのため、以前の記事に視覚的な変更がほとんどない多くのゲームでは、パフォーマンスが低下します。