1

ゼロコピーを利用した CUDA アプリケーションのパフォーマンスを分析した経験のある人はいますか (ここを参照: Default Pinned Memory Vs Zero-Copy Memory ) メモリ モデル?

ゼロコピー機能を使用するカーネルがあり、NVVP を使用すると、次のように表示されます。

平均的な問題サイズでカーネルを実行すると、0.7% の命令リプレイ オーバーヘッドが発生するため、大きな問題はありません。そして、この 0.7% はすべてグローバル メモリ リプレイ オーバーヘッドです。

問題のサイズを実際に大きくすると、95.7% の命令リプレイ オーバーヘッドが発生します。これはすべて、グローバル メモリのリプレイ オーバーヘッドによるものです。

ただし、通常の問題サイズのカーネル実行と非常に大きな問題サイズのカーネル実行の両方のグローバル ロード効率とグローバル ストア効率は同じです。この指標の組み合わせをどうするかはよくわかりません。

主に確信が持てないのは、NVVP のどの統計が、ゼロ コピー機能で何が起こっているかを確認するのに役立つかということです。どのタイプの統計を見ればよいかについてのアイデアはありますか?

4

1 に答える 1

5

Fermi および Kepler GPU は、複数の理由でメモリ命令をリプレイする必要があります。

  1. メモリ操作は、アドレス分岐計算を実行し、L1 キャッシュとの間でデータをやり取りするために複数のトランザクションを必要とするサイズ指定子 (ベクター型) 用でした。
  2. メモリ操作には、複数のキャッシュ ラインへのアクセスを必要とするスレッド アドレスの相違がありました。
  3. メモリ トランザクションで L1 キャッシュが見つかりませんでした。ミス値が L1 に返されると、L1 はワープ スケジューラに命令を再生するように通知します。
  4. LSU ユニットのリソースがいっぱいで、リソースが使用可能になったときに命令を再生する必要があります。

までの待ち時間

  • L2 は 200 ~ 400 サイクル
  • デバイス メモリ (ドラム) は 400 ~ 800 サイクル
  • PCIe 経由のゼロ コピー メモリは数千サイクル

遅延の増加による LSU リソースのミスと競合の増加により、リプレイ オーバーヘッドが増加しています。

グローバル負荷効率は、実際に転送されたデータ量に対する、実行されたメモリ命令のために転送する必要がある理想的なデータ量の比率であるため、増加していません。理想的とは、実行されたスレッドがキャッシュ ライン境界で始まるメモリ内の順次要素にアクセスしたことを意味します (32 ビット操作は 1 キャッシュ ライン、64 ビット操作は 2 キャッシュ ライン、128 ビット操作は 4 キャッシュ ライン)。ゼロ コピーへのアクセスは遅くなり、効率が低下しますが、転送されるデータ量が増加したり変化したりすることはありません。

プロファイラーは次のカウンターを公開します。

  • gld_throughput
  • l1_cache_global_hit_rate
  • ドラム_{読み取り、書き込み}_スループット
  • l2_l1_read_hit_rate

ゼロ コピーの場合、これらの指標はすべて大幅に低くなるはずです。

Nsight VSE CUDA Profiler のメモリ実験では、PCIe (ゼロ コピー メモリ) 経由でアクセスされるデータの量が示されます。

于 2012-12-14T03:08:16.227 に答える