2

OpenCL ベンチマーク サイトhttp://www.clbenchmark.com/には、次のベンチマークがあります。

Image Filter: Separable Gaussian Blur - Global Memory Usage and
Image Filter: Separable Gaussian Blur - Image Memory Usage

Nvidia がグローバル メモリ使用量を完全に支配しています。たとえば、GTX 580 は HD 7970 のほぼ 2 倍の速さです。これは、Nvidia がまだリードしている数少ないベンチマークの 1 つです。誰かがこれがなぜなのか説明できますか?

私が尋ねる理由は、非常に高速に動作する GTX 590 でレイ トレーサーを作成したからです。ほとんどのレビューから、私のレイ トレーサーは HD 7970 で 4 倍高速に実行されると予想していました。しかし、実際には 4 倍遅く実行されます。そして、私はその理由を理解していません。画像バッファは使用しません。ピクセルをグローバル メモリに書き出します。カーネル時間をプロファイリングすると、HD 7950 のカーネル時間が 4 倍遅いことがわかり、問題はカーネル側にあり、PCI バスを介してデータを移動するときではないことがわかります。

4

1 に答える 1

4

グローバルメモリはデバイスメモリであり、グローバルメモリを使用するデータバッファは読み書きできるという利点があります。つまり、データ バッファーへのアクセスがより多くの GPU サイクルを消費します。

他の部分では、テクスチャ メモリ、つまりイメージ メモリはグローバル メモリよりも高速であり、使用する GPU サイクルが少なくなります。ただし、読み取り専用または書き込み専用にすることができます。

読み取り専用または書き込み専用が必要な場合は、より高速な画像バッファーを使用できます。ただし、読み書きバッファが必要な場合は、データ バッファ (グローバル メモリ) を使用する必要があります。

また、注意すべきもう 1 つの点は、バッファが RGBA を宣言している場合、イメージ バッファへの読み取りは一度に 4 つのデータをフェッチできることです。float4 を使用する場合は、データ バッファーでもこの利点を利用できます。gpu は 1 回のフェッチで 4 つの float 値にアクセスできるため (これによりパフォーマンスが向上します)。

できるだけ少ないグローバル メモリを常に使用するようにしてください (各メモリ アクセスの正確なサイクル数を知るには、NVIDIA または AMD のマニュアルを参照してください)。もっと理解が必要な場合はお知らせください:)

于 2013-03-11T09:28:34.203 に答える