cudaGetDeviceProperties()
API 调用似乎并没有告诉我们太多有关全局内存延迟的信息(甚至没有典型值或最小/最大对等)。
编辑:当我说延迟时,我实际上指的是必须从主设备内存读取数据的各种情况的不同延迟。所以,如果我们取this paper ,实际上是 6 位数字:{ TLB L1 命中,TLB L2 命中,TLB 未命中 } x L1 数据缓存开启 { 打开,关闭 }。
Q1:除了自己测量之外,还有其他方法可以获得这些数字吗?
甚至是基于 SM 版本、SM 时钟和内存时钟的经验计算可能会。
我会问第二个问题,即:
问题2:如果没有,是否有实用程序可以为您执行此操作?
(尽管这可能与该网站的主题无关。)
最佳答案
cudaDeviceProperties()
的用途是,与 x86 CPU 上的等效 cpuid
工具一样,返回相关的微架构参数。与 CPU 一样,即使微架构参数相同,GPU 的性能特征也可能会有所不同,例如由于不同的时钟频率,或者由于所连接的 DRAM 的规范不同,以及它们与处理器内部各种缓冲和缓存机制交互的方式。一般来说,没有一个可以指定的“内存延迟”数字,我也不知道如何从已知的微架构参数计算可能的范围。
因此,在 CPU 和 GPU 上,都必须利用复杂的微基准来确定 DRAM 延迟等性能参数。如何为每个所需参数构建这样的微基准测试太过宽泛,无法在此介绍。已发表多篇论文,详细讨论了有关 NVDIA GPU 的问题。最早的相关出版物之一是 (online draft):
Wong、Henry 等人。 “通过微基准测试揭秘 GPU 微架构。”论文集:2010 年 IEEE 国际系统与软件性能分析研讨会 (ISPASS),第 235-246 页
最近的一项涵盖开普勒架构的工作是 ( online draft ):
梅欣欣,楚小文。 “通过微基准测试剖析 GPU 内存层次结构。” Arxiv 手稿,2015 年 9 月,第 1-14 页
如果无法构建自己的微基准测试,则必须依赖已发布的结果,例如上面引用的特定 GPU 的各种特定于实现的性能参数的结果。
在多年来针对 GPU 平台进行优化的过程中,我不需要了解此类数据,一般来说,CUDA 分析器的性能指标应该足以追踪特定的瓶颈。
关于memory - 如何在不测量的情况下获取/计算 GPU 的内存延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35757357/