カーネルによって達成される実際のスループットは、4 つのメトリックを使用して CUDA プロファイラーによって報告されます。
- グローバル メモリ ロード スループット
- グローバル メモリ ストアのスループット
- DRAM 読み取りスループット
- DRAM 書き込みスループット
CUDA C ベスト プラクティス ガイドでは、グローバル メモリのロード/ストア スループットを実際のスループットとして説明しており、DRAM の読み取り/書き込みスループットについて具体的には何も述べていません。
CUPTI ユーザー ガイドでは、次のように定義されています。
- ((128*global_load_hit) + (l2_subp0_read_requests + l2_subp1_read_requests) * 32 - (l1_cached_local_ld_misses * 128))/(gputime)としてのグローバル メモリ ロード スループット
- (l2_subp0_write_requests + l2_subp1_write_requests) * 32 - (l1_cached_local_ld_misses * 128))/(gputime)としてのグローバル メモリ ストア スループット
- (fb_subp0_read + fb_subp1_read) * 32 / gputimeとしての DRAM 読み取りスループット
- (fb_subp0_write + fb_subp1_write) * 32 / gputimeとしての DRAM 書き込みスループット
fb_subp* カウンターが多数の DRAM アクセス (32 バイト アクセスの場合は 1 ずつ増加) を報告し、すべての SM について収集されるため、DRAM の読み取り/書き込みスループットを理解しています。したがって、スループットが gputime とアクセスされたバイト数の関数として計算されることは明らかです。
グローバル メモリ スループットの定義がわかりません。global_load_hit および counter の定義はありません。どちらの場合も l1_cached_local_ld_misses が差し引かれる理由がわかりません。
このコンテキストでは、DRAM はグローバル メモリとは異なるものですか?
カーネルの実際のスループットを知りたい場合、DRAM またはグローバル メモリ スループット メトリックを使用する必要がありますか?