CUDA调试工具(SDK编译器)可以对所有NVIDIA的GPU进行控制并实时获得GPU状态和运行情况。
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程序时出现黑屏花屏显卡驱动奔溃几秒然后重新启动,个人认为应该是显存不足造成的,后来发现不是这个原因,这时候打开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的就写成compute_11,sm_11。还有,前者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。
8、 在CUBLAS中矩阵是按列优先存储的,这与C中按行存储矩阵的思想正好相反。
基本的调用步骤举例:
1) 包含cublas的头文件:
2) 创建一个cublas上下文句柄:
3) 调用cublas函数处理向量或矩阵运算:
4) 销毁cublas句柄:
关於CUDA在VS2008下的调试问题
在前提只有一台主机一张NV显卡的情况下
不知道大家都怎麼调试自己的程序...
在VS总是找不到一个有效率的程序去调试他...
用VS就是為了好调试
不过...NV自己出的那套Nsight貌似要两张显卡或者两台主机才能调试