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)
- DRAM 读取吞吐量为(fb_subp0_read + fb_subp1_read) * 32 / gputime
- DRAM 写入吞吐量为(fb_subp0_write + fb_subp1_write) * 32 / gputime
我了解 DRAM 读/写吞吐量,因为 fb_subp* 计数器报告了许多 DRAM 访问(对于 32 字节访问增加 1)并为所有 SM 收集。所以我很清楚,吞吐量是根据 gputime 和访问的字节数计算的。
我不明白全局内存吞吐量定义。没有 global_load_hit 和 counter 的定义。我不明白为什么在这两种情况下都会减去 l1_cached_local_ld_misses 。
在这种情况下,DRAM 与全局内存有什么不同吗?
如果我想知道内核的实际吞吐量是多少,我应该使用 DRAM 还是全局内存吞吐量指标?