背景

我的老战神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
2
fatal error C1189: #error: --
unsupported Microsoft Visual Studio version! Only the versions 2012, 2013, 2015 and 2017 are supported!

大概的意思就是,VS版本不支持。

经过Google,很容易找到魔改的办法

简单来说就是把 CUDA 原本拿来检查 VS版本的代码改到可以通过。

把原本这样的代码:

1
#if _MSC_VER < 1600 || _MSC_VER > 1911

改成这样代码:

1
#if _MSC_VER < 1600 || _MSC_VER > 1920

就不会因为 VS版本太高被判定不可以编译了。

改好了之后重新编译,还是会出错!!!

错误变成了 expression must have a constant value
报错的位置在 VC Toolkit 里面。

网上说了两种办法:

  1. 安装 VC 2015 的 Toolkit,改平台工具集
  2. 复制 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}

除非注明,麦麦小家文章均为原创,转载请以链接形式标明本文地址。

版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)

本文地址:https://blog.micblo.com/2019/05/11/记GTX870M显卡在VS2017下写CUDA程序的排雷过程/