CUDA9.0配置及用N卡跑第一个项目的不完全踩坑记录

环境:win10+CUDA9.0+vs2017

断断续续弄了两三天总算是配好环境把程序在GPU跑起来了……此为踩坑过程,配置过程参考以下文章:

  1. 配置+新建项目全程 https://blog.csdn.net/u013165921/article/details/77891913
  2. CUDA版本选择 https://blog.csdn.net/zl535320706/article/details/83474849
  3. 新建项目的另一个参考https://www.cnblogs.com/wayne793377164/p/8185404.html

一、环境配置篇

我的独立显卡是NVIDIA的GeForce 940MX,第一次查看CUDA版本时显示的是8.1,于是装了CUDA Toolkit 8.0 GA1。

但安装之后N卡的驱动出了问题:

  • 不能打开控制面板(会显示“NVIDIA显示设置不可用 您当前未使用连接到NVIDIA GPU显示器”);
  • 进GeForce Experience更新驱动,会显示“无法连接到NVIDIA 请稍后重试”。

按网上的教程,试过好几种方法包括终止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
这个错误的提示信息非常长……,查找资料后,大概是两个原因:

  • 显卡计算能力和项目默认设置不匹配
  • vs2017版本过高,使用v141的工具集而CUDA 9.0不支持

我先查看了项目配置(所有配置) -> 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有关的四个文件

  • CUDA 9.0.props
  • CUDA 9.0.targets
  • CUDA 9.0.xml
  • Nvda.Build.CudaTasks.v9.0.dll

全部复制到第一个文件夹即可。

E0029 应输入表达式
该错误是提醒kernel<<< 1, 1 >>>();这条语句左端第3个'<'有语法错误,在解决了MSB3721问题后,该提醒没有消失,但程序可已经可以正常运行,故忽略。

别的问题
修改平台工具集后,属性里“CUDA C/C++”“CUDA Linker”两项消失了;重启vs,无变化;重启电脑后又回来了。但不影响程序运行。
CUDA9.0配置及用N卡跑第一个项目的不完全踩坑记录_第1张图片

N卡运行篇

搞定之后当然是想放到GPU跑一下啦。在顶部菜单栏有一个“Nsight”,点击:
CUDA9.0配置及用N卡跑第一个项目的不完全踩坑记录_第2张图片
出现了这样的提醒:
CUDA9.0配置及用N卡跑第一个项目的不完全踩坑记录_第3张图片

于是根据提示在“开始”栏找到“NVIDIA Corporation”,打开手册,翻到上面说的目录,主要步骤如下:

  • 在vs中设置“允许安全连接”
  • 启动Nsight Monitor,在它的option中设置“允许安全连接”

CUDA9.0配置及用N卡跑第一个项目的不完全踩坑记录_第4张图片
这一步认真读文档就行。
配置好后,再运行就不会出现上面提醒了,效果如下

输出窗口:

CUDA9.0配置及用N卡跑第一个项目的不完全踩坑记录_第5张图片

“NVIDIA GPU 活动”窗口:
CUDA9.0配置及用N卡跑第一个项目的不完全踩坑记录_第6张图片
以上,踩坑结束,终于可以在GPU跑项目了。

你可能感兴趣的:(CUDA)