参照のGPU局所性は心配する価値がありますか?


9

、参照の局所性、それはCPUのパフォーマンスをするようmakeがGPUのパフォーマンスに大きな違いとして?

たとえば、GPUに200の描画コマンドを送信した場合、各コマンドのデータがメモリ内で連続していると、バッファ/テクスチャマップをジャンプするのではなく、(潜在的に)顕著な違いが見られますか?

副題:ほとんどのリソースを不変にすることで、GPUが誤った共有の問題を防ぐことができると思います。しかし、そうでない場合、スレッドが常に4つのフラグメントに相当する作業を行うのはなぜですか。

回答:


10

参照の局所性は重要ですが、それほど心配する必要はありません...完全に制御できないためです。

OpenGL / DirectXを使用する場合、通常はメモリレイアウトの制御に制限があり、ドライバーが残りを行います。たとえば、インターリーブまたは非インターリーブの頂点データを使用するなど、複数の頂点バッファーレイアウトを試すことができ、データ/ドライバー/ GPUのパフォーマンスによって異なります。アプリケーションに最適なものをプロファイルして選択します。

たとえば、GPU Gems Pipelineの最適化では、参照の局所性が2回言及されていますが、最初は次のとおりです。

比較的順次的な方法で頂点データにアクセスします。最新のGPUは、頂点をフェッチするときにメモリアクセスをキャッシュします。他のメモリ階層と同様に、参照の空間的な局所性は、キャッシュでのヒットを最大化するのに役立ち、帯域幅の要件を減らします。

そして二番目

T&L後の頂点キャッシュを最適化します。最近のGPUには、先に変換された最新の頂点の結果を格納する小さな先入れ先出し(FIFO)キャッシュがあります。このキャッシュにヒットすると、変換とライティングのすべての作業と、パイプラインの初期に行われたすべての作業が保存されます。このキャッシュを利用するには、インデックス付きのプリミティブを使用し、メッシュ上の参照の局所性を最大化するように頂点を順序付ける必要があります。D3DXやNVTriStrip(NVIDIA 2003)など、このタスクに役立つツールが利用可能です。

私の意見では、これらの推奨事項は私が話している内容に従っており、メモリレイアウトを完全に制御することはできないが、たとえば各VBO頂点のレイアウト方法など、制御できることはパフォーマンスに影響を与える可能性があることを意味します。

アプリケーションがパフォーマンスに影響を与えている場合は、最初にボトルネックを検出する必要があります。これは参照のデータ局所性に問題がない可能性がありますが、カスタリングのない大量のデータがあるため、フラスタムカリングを実行していないなどの理由で発生する可能性があります。 etc このトピックに関する私の答えをここで確認できます。

OpenCL / CUDAを使用するときは、メモリレイアウトを完全に制御できることが多いので、参照の局所性についてもっと心配する必要があると思います。


3

当初、GPUはデータの再利用がほとんどないマルチメディアアプリケーションにのみ使用されていました。GPUが汎用アプリケーション(つまり、GPGPUと呼ばれる)にますます使用されるようになると、GPUはハードウェア管理の大容量キャッシュを備えています。たとえば、Fermi GPUには768 KBの最終レベルのキャッシュがあり、Kepler GPUには1536 KBのキャッシュがあります。最終レベルのキャッシュ、およびMaxwell GPUには2048 KBの最終レベルのキャッシュがあります。これは、GPUキャッシュに関する大量の調査とともに、データの局所性がGPUにとって明らかに重要であることを示しています。上記の詳細と参照については、私の調査用紙を参照してください。

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