安装
兼容问题
使用的是 CUDA9.1 和 VS2017. 由于CUDA更新远远赶不上VS,所以……直接使用是不行的……
解决方案见https://blog.csdn.net/shenpibaipao/article/details/79519533,摘录于下:
- 打开VS Installer,修改-单个组件,选上
用于桌面的VC++2015.3 v140 工具集(x86, x64)
- 项目属性里面换掉平台工具集
- C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1\include\crt\host_config.h,修改第133行的
#if _MSC_VER < 1600 || _MSC_VER > 1911
,将1911改成一个比较大的数(如1920) - 因为v140里面没有安装CUDA,所以需要重新装一下CUDA
第一个项目
创建项目的时候选择模板-NVIDIA-CUDA
,直接给示例程序,直接运行就行。(就只是向量相加,很快的)
代码分析:
- 首先一堆include
- addWithCuda函数用于main函数中调用,其中进行以下操作:
- 定义显存中的指针
dev_a
,dev_b
,dev_c
,中间的函数调用全部会返回一个状态码,设置变量cudaStatus
用于保存状态码 - SetDevice
- cudaMalloc函数来申请指针对应数组的空间
- cudaMemcpy函数来向那三个指针里面拷贝内存中的数据
- 调用计算用的函数,在显存里面计算
- cudaGetLastError来检测有无错误
- cudaDeviceSynchronize等待所有操作结束
- cudaMemcpy来将结果数组拷贝回来
- cudaFree释放空间
- 定义显存中的指针
上面的程序也没有用多线程,也没啥复杂的操作,类似一个……代码比较长的helloworld
行数多主要是因为要考虑各种异常情况并且提示……自己写就懒得加了[doge]
程序设计
GPU配置查看
要多线程,肯定先看看多少个线程合适。代码里面直接添加(来自http://www.360doc.com/content/18/0408/16/5315_743836114.shtml):
1 | int dev = 0; |
结果类似:
1 | 使用GPU device 0: GeForce GTX 950M |