在 Visual Studio 2017 中使用 CUDA

Using CUDA with Visual Studio 2017

我正在尝试安装 CUDA,但收到一条消息说 "No supported version of visual studio was found"。我认为这是因为我使用的是 Visual Studio 2017(社区),而 CUDA 目前最多只支持 Visual Studio 2015。不幸的是,Microsoft 不允许我下载旧版本的 Visual Studio无需支付订阅费。

有什么办法可以解决与 VS 2017 的兼容性问题,或者我可以不使用 CUDA 吗?

目前,Microsoft 似乎仍在提供 VS2015 Update 2 社区版。您必须加入 "dev essentials" 计划,但它似乎是免费的。

我最近能够从 here 下载安装程序。

更新:CUDA 9 RC 于昨天在 developer.nvidia.com 上向注册开发者开放,它支持 VS 2017。

  1. 如果要安装 CUDA 8.0Visual Studio 2017,您需要安装 Visual Studio 2017 的附加组件。

    单击“开始”菜单并输入 Visual Studio 安装程序。打开 Visual Studio 安装程序

    打开 Individual components 选项卡和 select VC++ 2015.3 v140 toolset
    Compilers, build tools and runtimes之下。

  1. 如果没有安装 .NET Framework 3.5,还需要安装
    Nvda.Build.CudaTasks.v8.0.dll 程序集 .

打开经典控制面板,转到 Programs and features
并按 Turn Windows features on or off。检查 .NET Framework 3.5 并按确定。

  1. 下载完整的 CUDA toolkit 发行版并将其解压到磁盘上的某个位置。
  2. 如果您尚未安装 CUDA toolkit,请立即安装。如果您只安装了 Visual Studio 2017,请取消 select Visual Studio integration 复选框。


现在您想收到 "No supported version of the visual studio was found" 错误。

但是为了在Visual Studio 2017中成功构建Cuda工具包项目,您还需要按照步骤5和6进行操作。

  1. 转到解压缩的分发包中的 CUDAVisualStudioIntegration\extras\visual_studio_integration\MSBuildExtensions
    文件夹,复制所有文件并将它们粘贴到
    C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140\BuildCustomizations:

  1. 在最后一步中,您需要编辑 Cuda 项目以识别来自 Visual Studio 2017 的 NVidia 构建任务。在文本编辑器中打开 .vcxproj 文件,找到所有出现的 CUDA 8.0.props。将字符串开头的宏替换为 $(VCTargetsPath14),这样 XML 片段将如下所示:

<ImportGroup Label="ExtensionSettings"> <Import Project="$(VCTargetsPath14)\BuildCustomizations\CUDA 8.0.props" /></ImportGroup>

不要忘记在文件末尾编辑自定义目标路径:

<ImportGroup Label="ExtensionTargets"> <Import Project="$(VCTargetsPath14)\BuildCustomizations\CUDA 8.0.targets" /></ImportGroup>



确保仔细检查您的路径配置!
如果您在命令提示符下使用 nvcc,您可能不会从 Visual Studio 文件夹调用 cl.exe



现在您可以构建 Visual Studio 2017 年的 Cuda 项目。

此解决方案的部分内容来自 Oleg Tarasov blog

谢谢大家的帮助。我只是想用拼图的最后一部分来补充这个 post。 CUDA v9.0 RC 正在寻找 VS2017 以标识为 1910,但最新更新实际上标识为 1911。要修复打开 .../CUDA/v9.0/include/crt/host_config.h 并更改此行:
#if _MSC_VER < 1600 || _MSC_VER > 1910
对此:
#if _MSC_VER < 1600 || _MSC_VER > 1911

您可能还需要将以下内容添加到您的 CMakeLists 中:
list(APPEND CUDA_NVCC_FLAGS --cl-version=2017)

我 运行 使用 CUDA 9.1 和 VS2017 Enterprise 遇到了同样的问题。

将 VC++ 编译器更改为 v140(而不是 141)后,一切正常 运行。

已有标志

#if _MSC_VER < 1600 || _MSC_VER > 1911

但它不会停止显示错误。

不知道为什么,但是尝试在 VS2015 上 运行 它会导致有关未安装 v141 的错误...因此由于一些扭曲的逻辑,我尝试不在安装 v141 的地方使用...一切正常!

将此留在此处,因为它可能会帮助处于相同情况的其他人。 (虽然我真的不明白为什么,如何,何时,谁或什么解决方案。

为了在 windows shell 中使用 Cuda 编译器 nvcc,您需要执行以下操作

  1. 从 VS 2017 的单个组件安装正确的工具集版本 - VC++ 2017 version 15.4 v.14.11 toolset

  2. 运行 在 windows shell 之后 "c:\Program Files (x86)\Microsoft Visual Studio17\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 -vcvars_ver=14.11

  3. 您可以从 windows shell

  4. 编译 nvcc 代码而不会出错

最新更新(截至 06/12/2018 正确)最新 Cuda 版本为 9.2,最新 Visual Studio 版本为 2017.7 不能一起使用。上述解决方案中提供的说明不起作用。这是对我有用的:

  1. 卸载Visual Studio。
  2. 卸载Visual Studio安装程序
  3. 下载 Visual Studio 2017.6(请注意,众所周知,Microsoft 会更改链接和修订版,恕不另行通知)https://docs.microsoft.com/en-us/visualstudio/productinfo/installing-an-earlier-release-of-vs2017
  4. 启动安装程序
  5. 转到单个组件。点击 Windows 10 SDK 10.0.15063 enter image description here

  6. 官网下载cuda工具包:https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal

  7. 您可能需要下载补丁。

我想使用文本编辑器(即 Sublime)编辑我的 CUDA 程序并从命令提示符编译它们,但我 运行 遇到 nvcc 编译器错误。我用 Windows 10 OS 安装了 Visual Studio 2017,但编译后,它说 "only version of VS 2012, 13, 15 and 17 are allowed." 所以我所做的是从安装中安装 VC++ 2015 工具包VS 2017 安装包(参考上图post)。我没有走完他的整个过程,我只是将我的 cl.exe 文件的路径从新创建的 VS 14.0 文件夹复制到环境变量。 .exe 可以在这里找到:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

希望对您有所帮助!

对于看到后者的人。

首先,尝试只安装 CUDA 10 (CUDA Toolkit 10.0)。

如果在没有任何模组的情况下它仍然无法工作,请确保您拥有列表中显示的尽可能多的 VC++ 工具集。查看 this video,停在 8:41 并比较列表。

如果出于某种原因您必须使用 CUDA 9.0 - 9.2,您将需要跳一些圈:

  • 对于 cmd 构建设置 vcvars_ver=14.11 - see this answer
  • 对于 IDE 构建,将平台工具集(在项目属性 - 常规中)设置为
    • Visual Studio 2017 (v141)) 或
    • Visual Studio 2015 (v140))

如果您有非常自定义的基于 cmd 的构建,请搜索 #if _MSC_VER(在 .../CUDA/.../include/crt/host_config.h 中)并删除尾随 || _MSC_VER > ...