CUDA:我能查出我是不是有全局内存合并吗?

Posted

技术标签:

【中文标题】CUDA:我能查出我是不是有全局内存合并吗?【英文标题】:CUDA: Can i find out if i have global memory coalescence?CUDA:我能查出我是否有全局内存合并吗? 【发布时间】:2011-06-30 12:41:32 【问题描述】:

我使用的是 GeForce GTX 580(计算能力 2.0)。

在我的程序中,我怀疑瓶颈是访问内核中的全局内存。我怀疑这是因为所有计算都涉及通过索引存储在全局内存中的数组获得的数字,并且因为从双精度切换到单精度只会将性能提高 10%。 (如果浮点运算是瓶颈(?),那么使用 fermi 设备的速度应该是原来的两倍(?))

所以为了改善这个瓶颈,我想到了内存合并。这里的问题是我不知道我是否实现了它。要么我已经拥有它,而且它已经达到了它所能达到的水平(比英特尔 i7 上的顺序版本快 25 倍),或者我可以通过某种方式重写以获得合并,让它运行得更快。

但是有办法知道吗?我可以以某种方式“关闭”合并以找出答案,还是以其他方式找出答案?

【问题讨论】:

【参考方案1】:

CUDA Visual profiler 将在汇总表中显示每个内核的加载/存储效率;灰熊在这里给出了一个很好的答案,说明这在新卡中是如何变化的:Compute Prof's fields for incoherent and coherent gst/gld? (CUDA/OpenCL)

【讨论】:

【参考方案2】:

不,内存合并不是您打开或关闭的东西,它是您通过使用正确的内存访问模式和对齐来实现的。我不确定,因为我从未使用过(不在 Windows 上工作),但我认为 nVidia 的 Parallel Nsight 可以告诉您您的内存访问是否已合并。

【讨论】:

我确实有 Compute Visual Profiler,所以也许我可以在那里检查一下。但我不知道我在找什么.. 正如@JonathanDursi 所说,视觉分析器也可以为您提供信息,但我没有这方面的经验。

以上是关于CUDA:我能查出我是不是有全局内存合并吗?的主要内容,如果未能解决你的问题,请参考以下文章

CUDA 全局内存,它在哪里?

分析 CUDA 代码:合并内存读取时出现意外指令计数

OpenCL 内存带宽/合并

设备内存空间中的 cuda 程序内核代码

如何使用合并的内存访问

合并列表与CUDA中的重复键