CUDA:我能知道我是否有全局内存合并吗?

CUDA:我能知道我是否有全局内存合并吗?,cuda,gpgpu,Cuda,Gpgpu,我使用的是GeForce GTX 580(计算能力2.0) 在我的程序中,我怀疑瓶颈是访问内核中的全局内存。我怀疑这是因为所有的计算都涉及到通过索引存储在全局内存中的数组而获得的数字,而且从双精度切换到单精度只会提高10%左右的性能。(如果浮点运算是瓶颈(?),那么使用费米器件的速度应该是费米器件的两倍。) 所以为了改善这个瓶颈,我考虑了内存合并。这里的问题是,我不知道我是否做到了。要么我已经有了它,而且这是它得到的最好的版本(比英特尔i7上的顺序版本快25倍),要么我可能通过某种方式重写以获得

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

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

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


但有办法知道吗?我是否可以通过某种方式“关闭”合并来找到答案,或者通过另一种方式找到答案?

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

CUDA Visual profiler将在摘要表中显示每个内核的加载/存储效率;Grizzly给出了一个很好的答案,说明了这一点在这里的新卡中发生了怎样的变化:

不过我有Compute Visual Profiler,所以也许我可以在那里检查一下。但是我不知道我在找什么,@JonathanDursi说视觉分析器也能给你信息,不过我没有经验。