最新のGPUで頂点データを整理する最もパフォーマンスの高い方法


9

私が頂点で構成モデルでは、各持っていると言うpositionnormaltangent、およびtexcoord三角形がインデックストリプルによって指定された属性を、。

頂点の属性だけに注目すると、配列の構造と構造の配列という2つの広範な戦略に気づきます。また、構造体の配列は、特定の頂点の属性のメモリの局所性(したがってキャッシュの局所性)を増加させるため、優先されると聞きました。

これが実際にパフォーマンスを向上させるのですか?これが起こると私が考えることができる主な方法は、長い間キャッシュから削除された頂点データをラスタライザが取得する必要がある頂点インデックスによるものです。頂点データへのアクセスがこのようにランダムである場合、同じキャッシュライン上の頂点のすべての属性を保持すると、確実に処理が速くなりますが、これは、三角形の指定の順序を最適化することでほとんど軽減できる問題ではありませんか?

さらに、最近のGPUは、多くのタイプの構造のベクトルよりも、同じタイプの長いベクトルをアンパックする方が優れている可能性があることを理解しています。インデックスの順序が最適化されている場合、配列構造のレイアウトが同じ頂点データの構造配列のレイアウトを一貫して上回ることは可能でしょうか?


4
あなたは単にそれを試してみて、あなたのケースにとってどちらが最も速いかを見てみませんか?
user1118321

頂点シェーダーにはすべての頂点属性が与えられるため、構造化配列の方がより効率的であり、それらをメモリ内でグループ化することで、キャッシュをより使いやすくすることができます。
PaulHK

構造のデータ型に応じて、vec4sとfloatはうまくパックされますが、他の型はあまりうまくいきません
PaulHK

2
@ user1118321個々のベンチマーク実験は立派なプラクティスですが、より広範な理論的議論には確かにより長期的な価値があり、頂点プルハードウェアの動作に基づく一般的なプラクティスの確立がもたらされる可能性があります。
クリスはモニカを復活させる

回答:


2

申し訳ありませんが、あなたの質問スレッドにコメントを追加しようとしていましたが、やりすぎたようです。私の開発経験はDX 11の観点からのものなので、この一部はOpenGLで保持されない可能性があります

データのメモリ局所性は確かに重要な役割を果たします。しかし、これに関係する他のいくつかの項目、つまりご存じのようにデータの幅があります。私はいくつかのGPUを使用しており、特定の転換点に基づいて、いくつかのGPUで非常に高いパフォーマンスを達成しています。たとえば、私の古いAMD r290では、1つを超える追加コストなしで、基本的に最大4つのfloat4を頂点バッファーに渡すことができましたが、> 4をポストすると、測定可能な低下がありました(フレーム内)割合)。これは純粋に私の記憶から外れているので、最良の事例です。しかし、GPUアーキテクチャは常に変化しており、今日のパフォーマンスを向上させるニッチなテクニックは、明日のパフォーマンスの悩みの種かもしれません。私'

そうは言っても、頂点の順序付けについて質問しました。確かにそれはわずかに役立ちます。パフォーマンスの向上は、これをインデックスバッファーと組み合わせると、ハードウェアが既に計算された頂点を最適化してキャッシュできるようになります。あなたは確かにあなたの考えに従って特別に注文したトライアングルストリップなどからさらに多くの利益を得るかもしれません。私が行うモデルレンダリングのほとんどは、インスタンス化されたインデックス/頂点ベースの最適化モデルであり、循環モーションエフェクト(たとえば、ツリーのブランチ)に対して少量のルックアップを使用します。これらの場合、ツリーのブランチ全体が同じ値を検索します。したがって、ここでもキャッシングを利用できます。

私自身から要約すると言えることは次のとおりです。

  • あなたのゲーム/アプリケーションの開発はまだ時期尚早に最適化しないようにしながら、最初は最適化を考えすぎないようにしてください。戻って新しい機能を追加する必要がある場合、すべての作業を失う可能性があります。あなたはおそらく私の習慣を持っています> <、最高のパフォーマンスとテクニックを得ようとするのが大好きです
  • GPUアーキテクチャは多様であり、1つの長所は別の短所を反映することができます。AMDとNvidiaは、開発者がゲームをアーキテクチャに最適化することで有名です。理由は、それぞれに長所と短所があります。開発の途中をたどるのが最適な場合があります。ハードウェアベンダーベースの機能は使用しないでください(ここの意見)。(それに加えて、いくつかのパック形式はAMDにのみ存在します)。

これらは私が経験したほんの一部の考えと経験です。あなたはこれらのまさにトピックの周りであなたが手に入れるべきであるたくさんの本が世に出ています。多くの人があなたが提案していることを説明するのを見たことはありませんが、それは間違いではありません。幸運を。


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