我使用的是GeForce GTX 580(计算能力2.0)。
在我的程序中,我怀疑瓶颈是访问内核中的全局内存。我怀疑这是因为所有计算都涉及通过索引存储在全局内存中的数组得到的数字,并且因为从双精度切换到单精度只会使性能提高10%。 (如果浮点运算是瓶颈(?),那么使用费米设备的速度应该快两倍。)
因此,为了改善这个瓶颈,我想到了内存合并。这里的问题是我不知道我是否实现了它。要么我已经拥有它,这就像它获得的那样好(比英特尔i7上的顺序版本快25倍),或者我可能通过某种方式重写以获得合并来让它运行得更快。
但有没有办法知道?我可以以某种方式“关闭”聚结找出来,或以另一种方式找到?
答案 0 :(得分:2)
CUDA Visual Profiler将向您展示摘要表中每个内核的加载/存储效率; Grizzly给出了一个很好的答案,关于这里的新牌如何改变:Compute Prof's fields for incoherent and coherent gst/gld? (CUDA/OpenCL)
答案 1 :(得分:1)
不,内存合并不是你打开或关闭的东西,它是你通过使用正确的内存访问模式和对齐来实现的。我不确定,因为我从未使用过(不在Windows上工作),但我认为nVidia的Parallel Nsight可以告诉你你的内存访问是否合并。