Romi-知行合一

轻轻的风轻轻的梦,轻轻的晨晨昏昏, 淡淡的云淡淡的泪,淡淡的年年岁岁。
  博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

cuda工程在VS中使用心得

Posted on 2012-08-16 21:06  romi  阅读(3169)  评论(0编辑  收藏  举报

cuda几个月前接触过,当时只是了解大概,知道怎么用,现在重新看了《大规模并行处理器编程实践》这本书,书上讲的是第一代的cuda架构,现在的gpu经过了fermi都已经是开普勒架构了,我使用还是G80卡,看来得与时俱进了,这是后话了。

今天用cuda时照着以前的思路,出现了问题。经解决后,这里总结如下:

1.使用cuda,可以用在控制台应用程序中,也可以用于GUI中。用在GUI中时,和控制台应用程序一样将cuda计算部分写在函数内(.cu文件内,因为只有

.cu文件才能经过nvcc编译),调用该函数即可。

2.新建项目后,是没有加入nvcc编译器的,这时在自定义生成规则中加入CUDA(右键工程),如下图,实际上只需要CUDA Runtime API即可

3.本人使用的cuda3.2+vs2008,貌似在.cu文件是不支持调试的,所以不知道gpu计算时的存储情况。

4.计算时特别要注意存储器的大小,所需要的全局存储器、共享存储器、寄存器都要严格计算,已达到最佳性能。

5.影响性能的还有单个warp内线程执行指令的一致性、单个warp内线程读取数据时是否合并加载的。

6.数据预取对于线程时延长时很有效果。

7.和函数内每条指令都要占指令处理带宽,所以尽可能缩减指令,比如讲累加求和展开(书本上的例子)。

注:以前写的帖子自定义生成规则用的是CUDA Runtime那个,今天试了好像在使用时不太正确,有时得不出正确结果,但用CUDA就没问题。在有的情况下CUDA又有问题,CUDA Runtime能得出正确结果,具体为什么没搞清楚。(此问题已解,GPU设备设置问题,cudaSetDevice(0),使用CUDA Runtime API,这个是准确的,运行时api,使用真正的gpu设备)