使用CUDA和Visual Studio 2017

27

我正在尝试安装CUDA,但是收到了一条消息,提示“未找到支持的Visual Studio版本”。我认为这是因为我正在使用2017年版(社区版)的Visual Studio,而CUDA目前仅支持至Visual Studio 2015。不幸的是,微软不允许我下载旧版本的Visual Studio而不支付订阅费。

是否有办法解决VS 2017的兼容性问题,或者我不能使用CUDA?


1
您可以在此处下载Visual Studio的旧版本(https://www.visualstudio.com/vs/older-downloads/)。是的,您需要加入Dev Essentials计划,但它是免费的。 - Robert Crovella
我刚刚下载了VS2015 Update 2的安装程序。 - Robert Crovella
9个回答

49
如果您想安装 CUDA 8.0 并与 Visual Studio 2017 配合使用,则需要为 Visual Studio 2017 安装其他组件。

点击开始菜单并键入 Visual Studio Installer,打开 Visual Studio Installer。

打开 Individual components 选项卡并在 Compilers, build tools and runtimes 下选择 VC++ 2015.3 v140 toolset

install additional components for Visual Studio 2017

2. 如果您没有安装 .NET Framework 3.5,您还需要安装它。
Nvda.Build.CudaTasks.v8.0.dll 程序集 依赖于 MS .NET Framework 3.5
打开经典控制面板,进入 程序和功能
然后点击 打开或关闭Windows功能。勾选 .NET Framework 3.5 并按 OK。

enter image description here

  1. 下载完整的CUDA Toolkit分发版并将其解压到磁盘上的某个位置。
  2. 如果您没有安装CUDA Toolkit,请现在安装。如果您仅安装了Visual Studio 2017,请取消选择Visual Studio integration复选框。


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

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

  1. 进入您提取的分发版中的CUDAVisualStudioIntegration\extras\visual_studio_integration\MSBuildExtensions文件夹,复制所有文件并将它们粘贴到
    C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140\BuildCustomizations:

msbuild

  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

另一个cl.exe可能在路径中

现在,您可以从Visual Studio 2017构建Cuda项目。

这个解决方案的部分内容来自Oleg Tarasov博客


你真的需要 .net 框架吗?我还没有在 VS 2017 下安装 CUDA,但是我不记得在旧版本中安装过它。 - tera
@tera,就我个人而言,我讨厌它。它会使所有东西变慢。但我认为你需要它。Nvda.Build.CudaTasks.v8.0.dll程序集依赖于MS .NET Framework 3.5。 - Panos Kalatzantonakis
如果您正在执行自定义安装,请不要取消选择Visual Studio Integration复选框。虽然它不能正常工作,但如果您不选择它,则上述提到的MSBuildExtensions文件夹中的文件将无法下载。 - NauticalMile
@NauticalMile 只有在使用网络安装程序时才会出现这种情况,该程序会从安装程序中下载所需的文件。如果您下载完整的 1-2GB 离线安装程序,则可以使用 7zip 或其他工具提取 installer.exe,并在其中找到 MSBuildExtensions 文件夹。 - snickers10m
反汇编DLL后,我发现Nvda.Build.CudaTasks.v8.0.dll依赖于.NET 4.0,当我们需要 .NET 配置文件时,通常会与VS2017一起安装。 - Soleil

5

目前,微软似乎仍然提供VS2015 Update 2社区版。您需要加入“dev essentials”计划,但它似乎是免费的。

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

更新:昨天,CUDA 9 RC已经向注册开发人员提供,并且支持VS 2017。


5
感谢大家的帮助。我想在此补充一些信息。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)


2
随着VS2017的更新,我们需要增加_MSC_VER阈值。我刚刚删除了第二个条件。 - Soleil

4

针对看到这篇文章的人。

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

如果没有任何修改仍然无法正常工作,请确保您拥有与列表上看到的VC++工具集一样多的工具集。请查看此视频,在8:41处停下来并比较列表。

如果由于某种原因必须使用CUDA 9.0 - 9.2,则需要跳过一些步骤:

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

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


2
为了在 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 Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 -vcvars_ver=14.11

  3. 您可以在 Windows shell 中编译 nvcc 代码,而不会出现错误。


0

我想使用文本编辑器(如Sublime)编辑我的CUDA程序,并从命令提示符编译它们,但遇到了nvcc编译器错误。我安装了带有Windows 10操作系统的Visual Studio 2017,但在编译后,它说“只允许VS 2012、13、15和17版本”。所以我做的是从VS 2017安装程序的安装包中安装VC++ 2015工具包(请参阅顶部帖子的图像)。我没有完全按照他的过程进行,而是只将新创建的VS 14.0文件夹中的cl.exe文件路径复制到环境变量中。.exe文件可以在此处找到:

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

希望这有所帮助!

0

最新更新(截至2018年6月12日),最新的Cuda版本为9.2,最新的Visual Studio版本为2017.7。但是请注意,它们不兼容。以上解决方案提供的指令无效。以下是成功解决问题的方法:

1. 卸载Visual Studio。 2. 卸载Visual Studio安装程序。 3. 下载Visual Studio 2017.6(请注意,微软可能会在没有通知的情况下更改链接和版本)https://learn.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 Toolkit:https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal 7. 您可能需要下载补丁。

0

我在使用CUDA 9.1和VS2017 Enterprise时遇到了相同的问题。

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

已经有标志。

#if _MSC_VER < 1600 || _MSC_VER > 1911

但它仍然不停地显示错误。

不知道为什么,但是在尝试在VS2015上运行时会出现关于未安装v141的错误...所以由于某种扭曲的逻辑,我尝试在已安装v141的地方不使用它...然后一切都正常了!

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


3
为了帮助需要的人更好地理解,在Visual Studio 2017上编译CUDA示例时可能会失败,因为CUDA检查_MSC_VER是否在特定范围内,而VS2017最新的工具集太新了。
  • 在“解决方案资源管理器”中右键单击您的项目(不是解决方案)。
  • 选择“属性”菜单项。
  • 在左窗格中,选择“配置属性 >> 常规”。
  • 将“平台工具集”从“Visual Studio 2017(v141)”更改为“Visual Studio 2013(v120)”。
- Ahmed Nassar

0

更新一下,我的兼容性如下:

  • Cuda版本11.2
  • Visual Studio Community 2019

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接