有什么区别:DRAM吞吐量与全局内存吞吐量

use*_*944 6 cuda gpu gpgpu nvidia

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还是全局内存吞吐量指标?

小智 0

全局内存加载/存储通过缓存;其中一些可能会受到点击或回写。这将避免访问 DRAM。因此,全局内存吞吐量取决于加载/存储请求的数量以及缓存的命中/未命中率。

相比之下,DRAM吞吐量仅根据DRAM访问来计算,没有考虑缓存的任何影响。

要测量您的情况下的内核吞吐量,您应该使用全局内存吞吐量,因为其中包括缓存效果。