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

时间:2012-06-05 16:49:54

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

2 个答案:

答案 0 :(得分:2)

全局内存吞吐量是来自全局地址空间的指令所请求的数据量。 global_load_hits是来自全局请求的L1缓存命中数(缓存行大小为128字节)。公式的其余部分通过计算对L2的所有访问来近似于错过L1的访问的全局吞吐量。

全局内存是一个虚拟内存空间,可以映射到设备内存和系统内存。

DRAM是物理设备存储器(例如卡上的GDDR5)。在L2未命中时访问DRAM。以下虚拟地址空间可以位于DRAM /设备内存中(全局,本地,常量,指令和纹理)。请注意,其中许多内存空间都是虚拟地址空间,最终数据可以驻留在DRAM或系统内存中。

答案 1 :(得分:0)

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

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

要测量您的内核吞吐量,您应该使用全局内存吞吐量,因为那些包括缓存效果。