我有一个带有大量内存访问的CUDA程序,它们是“随机”的,因此根本不会合并。现在,当我为不同的内核运行时参数调整此程序并选择块大小总是7的倍数(从7开始,比如说980)和threadsPerBlock总是warpsize的倍数(从32开始,比如说1024)没有区别在程序的运行时。怎么能解释一下呢?
非常感谢!
答案 0 :(得分:1)
螺纹块尺寸的影响很小。这是我尝试的最后一次优化(只有当占用率非常低时,只要占用率超过50%左右,费米级的性能几乎相同)。如果你的内核非常糟糕,那么你根本不会发现任何差异。
此外,您可以在Matlab代码上运行CUDA Visual Profiler。使用GPU编码,可以对所有内容进行分析。
在会话设置中执行以下步骤。
那说,从个人经验来看,看看你是否可以使用纹理内存来做一些缓存。即使内存访问没有合并,你仍然可以从内存位置获得一些缓存命中。