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

Posted

技术标签:

【中文标题】有啥区别:DRAM 吞吐量与全局内存吞吐量【英文标题】:What is the difference: DRAM Throughput vs Global Memory Throughput有什么区别:DRAM 吞吐量与全局内存吞吐量 【发布时间】:2012-06-09 17:09:17 【问题描述】:

内核实现的实际吞吐量由 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 还是全局内存吞吐量指标?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

对于请求的带宽量有请求的全局加载/存储吞吐量指标。全局加载/存储吞吐量报告来自全局地址空间的实际吞吐量。否则感谢您澄清全局内存(虚拟地址空间)和 DRAM 内存之间的区别。【参考方案2】:

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

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

要在您的案例中测量内核吞吐量,您应该使用全局内存吞吐量,因为其中包括缓存效应。

【讨论】:

如果我想知道使用了多少可用带宽,是否应该使用 DRAM 吞吐量?

以上是关于有啥区别:DRAM 吞吐量与全局内存吞吐量的主要内容,如果未能解决你的问题,请参考以下文章

java hadoop 与java 有啥区别

60 cuda全局性能优化

吞吐量与带宽的区别

java8与java11有啥不同

JVMJVM内存结构之——垃圾收集器(并发与并行/ GC性能指标/ 垃圾收集器组合关系/ CMS收集器/ G1收集器)

IOPS 与吞吐量