当CUDA的内核参数对运行时没有任何影响时

时间:2011-06-22 12:30:43

标签: runtime cuda

我有一个带有大量内存访问的CUDA程序,它们是“随机”的,因此根本不会合并。现在,当我为不同的内核运行时参数调整此程序并选择块大小总是7的倍数(从7开始,比如说980)和threadsPerBlock总是warpsize的倍数(从32开始,比如说1024)没有区别在程序的运行时。怎么能解释一下呢?

非常感谢!

1 个答案:

答案 0 :(得分:1)

螺纹块尺寸的影响很小。这是我尝试的最后一次优化(只有当占用率非常低时,只要占用率超过50%左右,费米级的性能几乎相同)。如果你的内核非常糟糕,那么你根本不会发现任何差异。

此外,您可以在Matlab代码上运行CUDA Visual Profiler。使用GPU编码,可以对所有内容进行分析。

在会话设置中执行以下步骤。

  1. 在Launch中指定您的Matlab可执行文件。
  2. 在工作目录中选择matlab脚本的目录
  3. in Arguments:-nojvm -nosplash -r name_of_matlab_script(with .m)
  4. 那说,从个人经验来看,看看你是否可以使用纹理内存来做一些缓存。即使内存访问没有合并,你仍然可以从内存位置获得一些缓存命中。