GTX480 でのグローバル メモリ トランザクションの数をプロファイリングしたいと考えています。ただし、そのフィールドの出力は常に 0 であるため、uncached_global_load_transaction オプションは役に立ちません。他の方法はありますか? たとえば、他のカウンターを有効にして、それらに基づいてトランザクション数を計算できますか?
1 に答える
グローバル メモリは仮想アドレス空間です。データは、デバイス メモリまたは固定システム メモリに常駐できます。Compute Capability 2.x デバイスの場合、次のように階層を計算できます。
SM から L1C へのグローバル ロード トランザクション
- キャッシュ トランザクションは 128B
sm2l1c_global_load_transactions = l1_global_load_hit + l1_global_load_miss
SM から L2C へのグローバル ロード トランザクション
- SM 非キャッシュ グローバル トランザクションまたは L2 への L1 キャッシュ ミスは 32B トランザクションです。
sm2l2c_global_load_transactions = (l1_global_load_miss * 4) + uncached_global_load_transaction
CUDA プロファイラーは、global_atomic、global_atomic_cas、および global_red 操作のカウンターを公開しません。
CUDA プロファイラーは、グローバル対ローカルに基づいて L2 からシステム メモリまたはデバイス メモリにデータを表示するカウンターを公開しません。次のカウンターを使用して、L2 への帯域幅とシステム メモリ (PCIe 経由) またはデバイス メモリ (DRAM) への帯域幅を取得できます。
L2 トランザクション
- L2 クエリは 32B
- CUDA プロファイラーのバージョンに応じて、これには次のソースの 1 つ以上から L2 への読み取りが含まれます: SM L1 (ローカル、グローバル、アトム、サーフェス)、TEX キャッシュ、定数キャッシュ、命令キャッシュ、MMU、コピー エンジンなど。 .
l2_read_transactions = sum(l2_subp{0,1}_read_sector_queries)
デバイスメモリ (FB、DRAM)
- DRAM への読み取り帯域幅は、L2 ミスと ECC (有効な場合) からのものです。
- FB クエリは 32B
fb_read_transactions = sum(fb_supb{0,1}_read_sectors)
グローバル ストア、ローカル ロード/ストア、および L2 からシステム メモリへの計算は、同様のパターンに従います。
詳細については、CUPTI ユーザーズ ガイドのセクション「Event Reference - Compute Capability 2.x 」を参照してください。これらの文字列名は、CUDA プロファイラー、ビジュアル プロファイラー、nvprof (5.0)、および CUPTI API を使用する最近のドライバーで動作するはずです。
CUDA 5.0 を使用している場合、nvprof コマンドnvprof --query-events
は、インストールされているデバイスで利用可能なすべてのイベントを一覧表示します。