多くのテクスチャマップを使用すると、キャッシュに悪影響がありますか?


10

同じテクスチャユニットにバインドされた多くのテクスチャ(たとえば、5つ以上のマップ)がある場合、2つまたは3つのテクスチャしかなかった場合よりも、キャッシュでの動作が悪くなりますか?

回答:


16

イマレットの答えに加えて、シェーダー内の異なるテクスチャデータへのアクセス数を増やすと、GPUキャッシュへの圧力が高まることは事実ですが、効果に大きく影響する可能性のある他のいくつかの要因があります。また、CPUキャッシュのように、GPUに複数のキャッシュレイヤーが存在する可能性があるという事実により、複雑になる可能性もあります。テクスチャユニット<= L0 <= L1 <= ..メモリ

エイリアスを回避-> MIPマップを使用

パースペクティブや単純なスケーリングによるテクスチャデータの縮小化があるシーンがあり、MIPマッピングを使用していない場合は、エイリアシングが発生します。これは視覚的なアーティファクトを生成するだけではありません。パフォーマンスの問題である可能性が非常に高いです。

エイリアシングを取得するとすぐに、テクスチャへのアドレスアクセスは一貫性がなくなり、キャッシュをスラッシングするだけでなく、コストがかかる可能性のある多くのDRAM "ページブレーク"(より正確には、行ブレーク)を引き起こします。MIPマッピングは、インコヒーレンシの低減に役立ちます。

テクスチャ圧縮

おそらく少し明白なオプションかもしれませんが、テクスチャ圧縮(例:DXTn | ETC * | PVRTC * | etc)を8bppから2bppまでターゲット設定できる場合は、次の方法でメモリ帯域幅/キャッシュの効率を大幅に向上できます。 4倍から16倍までの係数。現在、すべてのGPUについて話すことはできませんが、一部のテクスチャ圧縮スキーム(上記のリストなど)はハードウェアでデコードするのが非常に簡単で、データキャッシュ階層全体で圧縮されたままで、テクスチャユニットでのみ圧縮解除されます。これらのキャッシュのサイズを効果的に乗算します。

データサイズ

明らかに、一部のデータ、たとえば後続のレンダリングでテクスチャデータとして使用されるレンダーターゲットは、テクスチャ圧縮を使用できません。可能な限り、最小のピクセル形式を使用してください。つまり、32 / 16bpp(A)RGBで可能な場合は、4x32浮動小数点形式を使用しないでください。

疎アクセス

これは、上記のエイリアシングの例にいくらか関連していますが、大きなレンダーターゲットが作成され、非常にまばらにしかサンプリングされないケースを見てきました。キャッシュラインは、CPUでもGPUでも非常に長いため、各キャッシュラインで1ピクセルのみを使用している場合は、転送が無駄になります。

また、WRT圧縮テクスチャは、テクセルのローカル領域間でデータを効果的に共有することで圧縮を実現します。コヒーレントなアクセス権がない場合は、メモリフットプリントの削減は別として、圧縮はおそらく役に立ちません。

依存テクスチャの読み取り

キャッシュの問題はそれほどではありませんが(計算されたアクセスが完全に矛盾しない限り)、頂点で提供されるUV座標によって直接定義されていないテクスチャアクセスは、直接定義されているものよりも遅くなる可能性があります。

Tiled / Morton VS Stridedテクスチャ

最近のほとんどのテクスチャーはタイルまたはモートンのような(別名Twiddled / Swizzled)順序(または両方の組み合わせ)で保存されると思われます、一部のテクスチャースキャンラインの順序のままになる可能性があります。テクスチャは、かなりの数のキャッシュミス/ページブレークにつながる可能性があります。残念ながら、私は特定のフォーマットがそのように配置されているかどうかを見つける方法を本当に知りません。

(背景を読むには、BlinnのThe Truth About Texture Mapping。FWIWを試してください。いくつかのステップを踏むと、少なくとも初期のPCハードウェアでTwiddled-order(つまりMorton Order)テクスチャが使用されるようになります)。


8

答えはあなたが何を意味するかによります。最新のハードウェア(バインドレステクスチャなど)は、実際にいくつのテクスチャが「バインド」されているかをあまり気にしません。本当の問題はあなたどれだけ使うかです

テクスチャは通常、キャッシュに適した方法でデータを格納します(モートン曲線と思います)。さらに多くのテクスチャを使用すると、テクスチャが互いにスペースを奪い合うため、キャッシュミスが多くなります。

これは、よく知られている古いシェーダープログラミングヒューリスティックによるものです。テクスチャタップは遅いです。使いすぎないでください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.