记GTX870M显卡在VS2017下写CUDA程序的排雷过程
背景
我的老战神K670D-i7风光依旧,里面装有了Nvidia的 GTX870M
显卡,算力为 3.0
。
这个算力跑 TensorFlow
是不行的了,但是还是可以干点别的事情。
想装个 CUDA
调通某个开源的项目,结果就是不断触雷。
下面就是我的老设备排雷之旅。
条件
最开始的软件条件为:
- Windows 10
- VS 2017 Community 15.9.7 (平台工具集:
Visual Studio 2017 (v141)
) - CUDA 9.0
第一坑:折腾旧显卡驱动
按照套路,先到 NVIDIA 控制中心 里面的“系统信息”查看 CUDA
驱动的版本。
最开始找到是 CUDA 9.0
,所以理所当然的就安装了 CUDA Toolkit 9.0
。
结果就遇到第一个大坑 —— CUDA 9.0 不支持 VS2017!
一开始,按照套路在 VS2017 创建 CUDA 9.0 的工程。,
它会自动按照模板生成一个类似 Hello
的基础工程。
编译的时候就会出现一个错误 ——
1 | fatal error C1189: #error: -- |
大概的意思就是,VS版本不支持。
经过Google,很容易找到魔改的办法。
简单来说就是把 CUDA 原本拿来检查 VS版本的代码改到可以通过。
把原本这样的代码:
1 |
改成这样代码:
1 |
就不会因为 VS版本太高被判定不可以编译了。
改好了之后重新编译,还是会出错!!!
错误变成了 expression must have a constant value
,
报错的位置在 VC Toolkit 里面。
网上说了两种办法:
- 安装 VC 2015 的 Toolkit,改平台工具集
- 复制 Toolkit 的
.prop
文件到自己项目目录,然后改配置
我只能说,以上方法都是错误的!都不可以!!
唯一适配最新版 VS2017 的办法就是,升级你的N卡驱动和CUDA!
第二坑:升级N卡驱动
我以前的N卡驱动,也经是2017年的了,年代久远。
记得曾经在 NVIDIA EXPERIENCE 里面升级过,失败了。
结果这次还是失败,不讲道理那种。
白费我等待下载和安装的时间。
遇到这种升级卡BUG的情况,需要做到以下几点:
1.确保C盘腾出足够多的空间,即便你的临时文件夹不在C盘它也是会回C盘的
2.直接去官网下载,而不要用NVIDIA EXPERIENCE
我就靠这两点,成功把显卡驱动升级到目前最新的 425.31
。
425.31
对应的是 CUDA 10.1
,
因此我们要去 CUDA Toolkit 10.1 的下载界面下载这个版本。
CUDA Toolkit
是向下兼容 CUDA 驱动的,但是因为我们的驱动是CUDA 10.1
的,
所以被迫也要用最新版的CUDA Toolkit
。
安装好这些东西就意味着你已经快要成功了。
第三坑:VS2017配置
装完了全部必要的软件,就要去 VS2017 亲自试一下项目编译啦。
注意!此处有个坑!
你在 CUDA 9.0
创建的项目不一定是可以编译的,
此时需要重新创一个 CUDA 10.1
的项目。
直接去编译是不一定可以的!
你可以见到下面的错误:
1 | addKernel launch failed: no kernel image is available for execution on the device |
这是因为项目配置中的算力配置和显卡不匹配导致的。
请到“项目”菜单的“设置”里面的 CUDA C/C++
里面的 Code Generation
设置与你的显卡相匹配的算力信息。
好比说,GTX 870M 就是 compute_30,sm_30
。
在这个地方,可以找到你的算力配置对照表,但是需要注意实际写上去的时候一定要 computer
在前,sm
在后。
弄完了这些东西,编译就真的可以通过,运行也Ok啦~
当你看到下面的输出,就说明测试的DEMO跑通了。
1 | {1,2,3,4,5} + {10,20,30,40,50} = {11,22,33,44,55} |
除非注明,麦麦小家文章均为原创,转载请以链接形式标明本文地址。