«

CUDA编程学习笔记

1、 下载CUDA工具包、驱动和SDK,依次安装,编译SDK里的工程文件,具体配置方法可谷歌百度,基本步骤就是先编译sdk里面的几个库,然后设置代码相应库函数关键字高亮。

2、 下载CUDA调试工具Nsight,可以实现单卡双机调试或双卡单机调试,虽然听说2.2可以单卡单机,但还没找到方法。具体调试可参考Nsight的help文档和cudabbs.it168.com上的别人笔记(CUDA双机Nsight调试总结)。

3、 Nsight2.2中包含cuda4.0,cuda4.1, cuda4.2 rules。

4、如果在运行cuda程序时出现黑屏花屏显卡驱动奔溃几秒然后重新启动,个人认为应该是显存不足造成的,后来发现不是这个原因,其实是(http://msdn.microsoft.com/zh-cn/windows/hardware/gg487368) 。 这时候打开Nsight 的Monitor,将Options/General下的WDDM TDR enabled 设置为 False,重启电脑,这时再运行程序,显示器不会更新画面,GPU会提供完全的显存专注于运行我们的程序。直到运行结束,显示器画面恢复更新。这种方法当然只有用在实验上,不能用在实际中。

5、 普通C++控制台和MFC程序中如何新建调用CUDA程序(VS2010):

  1. 首先新建一个C++工程,然后右击工程,打开“生成自定义“,选择最新的cudarules。

  2. 然后新建两个.cu文件,分别命名为kernel.cu和func.cu,前者存放核函数,后者存放调用核函数的基本cuda函数。然后打开两个文件的属性,将项类型设置为CUDA C/C++,然后在CUDAC/C++下的Device里的Code Generation参数修改为运行电脑GPU的计算等级,例如1.1的就写成compute11,sm11。还有,前者kernel.cu属性中“从生成中排除“要选”是“。

  3. 在func.cu文件中将kernel.cu当做头文件包含,里面的函数进行基本的cuda程序操作:分配显卡内存、拷贝内存到显存、调用kernel函数、拷贝显存到内存。

  4. 在func.cu文件中定义函数时,将func函数定义为C扩展函数:extern “C”void func();

  5. 新建一个cpp文件,作为主程序,先在程序上面添加C扩展函数func()的说明,此时不需要include “func.cu”。然后再下面的代码中调用func函数即可。

  6. 打开整个工程的属性,在CUDA C/C++下的Device里的Code Generation参数依然修改为运行电脑GPU的计算等级。

  7. 在工程属性的“链接器/附加依赖项”中添加cudart.lib;

6、 CUDA Tookit中的NVIDIAVisual Profiler是个不错的cuda程序性能分析软件,能生成程序中GPU处理部分的各个步骤的时间条,以及各个阶段的具体参数。

7、 CUDA提供了CUBLA(具有基本的向量和矩阵运算)库,SDK中已经自带了,不用另外下载。它的运算函数分为三个级别:1)向量与向量的运行2)矩阵与向量的运算3)矩阵与矩阵的运算。

工程属性的链接器中的附加依赖项需添加:cublas.lib。

基本的调用步骤举例:

  1. 包含cublas的头文件
  2. 创建一个cublas上下文句柄
  3. 调用cublas函数处理向量或矩阵运算:
  4. 销毁cublas句柄:

8、 在CUBLAS中矩阵是按列优先存储的,这与C中按行存储矩阵的思想正好相反。

分享