memory - 如何在不测量的情况下获取/计算 GPU 的内存延迟?

标签 memory cuda gpgpu latency

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/

相关文章:

c++ - 推力::主机执行策略的段错误

cuda - 为 CUDA 编译器驱动程序禁用二进制缓存

ios - Xcode 分析错误,缺少库?

c++ - 结构的 cudaMalloc 和相同结构的元素

c - 动态内存使用情况,C 中的列表

cuda - 使用 CUDA 进行 Cholesky 分解

c - 不正确的结果 - Intel HD 4000 上的 OpenCL

opengl - glsl 和 opencl 中的钳位函数如何工作?它使用创建分支吗?我应该避免使用它吗?

ios - LLDB 评估在 iOS 上耗尽内存。我怎样才能释放一些内存?

c - 生成内存访问图的工具