环境:win10+CUDA9.0+vs2017
断断续续弄了两三天总算是配好环境把程序在GPU跑起来了……此为踩坑过程,配置过程参考以下文章:
我的独立显卡是NVIDIA的GeForce 940MX,第一次查看CUDA版本时显示的是8.1,于是装了CUDA Toolkit 8.0 GA1。
但安装之后N卡的驱动出了问题:
按网上的教程,试过好几种方法包括终止N卡的网络服务,但不管用,遂直接进“设备管理器” -> “显示适配器” -> N卡 -> 右键“更新驱动程序”。搜索更新程序的时间有点长,更新后进入NVIDIA的控制面板,此时点击“组件”,NVCUDA.DLL显示为CUDA9.1的驱动,版本变为388.x。8.0在9.1的驱动下也是可以运行的,但8.0不支持vs2017,所以决定重装CUDA。装好9.0后,发现驱动也变9.0了。再跟着文前链接的教程配置,一切顺利……
至此我的驱动版本经历了三次变化,最后停留在9.0(385.54)……CUDA版本9.0
结果第二天发现根本没必要重装CUDA,泪
配置好后我迫不及待地去找sample尝试运行,结果出现一堆错误,看着第二天要交的其他作业决定明天再战继续踩坑 ……
新建项目也参考文前链接1的步骤完成,然后写了个简单的cuda程序,计算向量点乘:
i | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
A[i] | 0.0 | 0.1 | 0.2 | 0.3 | 0.4 | 0.5 |
B[i] | -0.0 | -0.1 | -0.2 | -0.3 | -0.4 | -0.5 |
C=A.*B,输出:
i | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
C[i] | 0.0 | -0.01 | -0.04 | -0.09 | -0.16 | -0.25 |
……调试时候bug就来了
C1189:版本出错
C1189 #error: – unsupported Microsoft Visual Studio version! Only the versions 2012, 2013, 2015 and 2017 are supported!
c:\program files\nvidia gpu computing toolkit\cuda\v9.0\include\crt\host_config.h 133
用着vs2017居然出现了“Only…and 2017 are supported”的错误提醒,遂找资料,得知是实际版本号不对,解决方法:打开上面提示错误的host_config.h文件:
133行就是c出错地方,而第131行的if语句限定了版本,把1911改成一个更大的数比如1970就可以消除该错误信息。
这里我踩了个小坑:第一次打开这个文件时,我是直接复制了完整路径打开,结果就默认用dev c++打开了,而修改并保存后dev c++没有提示任何信息,但编译仍报错,用vs打开发现文件根本没有被修改,事实上修改这个文件需要管理员权限而dev完全没有提醒……
MSB3721
这个错误的提示信息非常长……,查找资料后,大概是两个原因:
我先查看了项目配置(所有配置) -> CUDA C/C++ -> Code Generation,发现项目的默认配置为“compute_30,sm_30”,而我的卡计算能力为5.0,应改成“compute_50,sm_50”;改了之后还是编译出错,就参考其他方法,用vs installer -> “修改” -> “C/C++组件” -> 勾选vs 2015工具集并修改。这之后会安装vs2015的工具集v140,然后重启vs,在“项目配置” -> “常规” -> “平台工具集”中选取vs2015,重新生成解决方案。(在查找解决方法的过程中提到可以修改某个头文件使项目支持工具集v141,但是没有说明是哪个头文件,并且部分这样做的人最后没有解决问题,还是要装v140,这里就没有尝试)
修改工具集后,系统提醒在C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140\BuildCustomizations
无法找到"CUDA 9.0.targets",于是搜了一下该文件的位置,在C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\BuildCustomizations
找到了,这时候把和CUDA 9.0有关的四个文件
全部复制到第一个文件夹即可。
E0029 应输入表达式
该错误是提醒kernel<<< 1, 1 >>>();
这条语句左端第3个'<'
有语法错误,在解决了MSB3721问题后,该提醒没有消失,但程序可已经可以正常运行,故忽略。
别的问题
修改平台工具集后,属性里“CUDA C/C++”“CUDA Linker”两项消失了;重启vs,无变化;重启电脑后又回来了。但不影响程序运行。
搞定之后当然是想放到GPU跑一下啦。在顶部菜单栏有一个“Nsight”,点击:
出现了这样的提醒:
于是根据提示在“开始”栏找到“NVIDIA Corporation”,打开手册,翻到上面说的目录,主要步骤如下:
这一步认真读文档就行。
配置好后,再运行就不会出现上面提醒了,效果如下
输出窗口: