在 Visual Studio 2017 中使用 CUDA

Posted

技术标签:

【中文标题】在 Visual Studio 2017 中使用 CUDA【英文标题】:Using CUDA with Visual Studio 2017 【发布时间】:2017-09-30 09:40:13 【问题描述】:

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

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

【问题讨论】:

您可以下载旧版本的Visual Studio here。是的,您必须加入 dev essentials 计划,但它是免费的。 我刚刚下载了 VS2015 Update 2 安装程序。 【参考方案1】:
    如果要安装 CUDA 8.0Visual Studio 2017,则需要为 Visual Studio 2017 安装其他组件。单击“开始”菜单并键入 Visual Studio Installer。打开 Visual Studio 安装程序打开 Individual components 选项卡并选择 VC++ 2015.3 v140 toolsetCompilers, build tools and runtimes下。

    如果您没有安装.NET Framework 3.5,您还需要安装它。Nvda.Build.CudaTasks.v8.0.dllassembly dependents on MS .NET Framework 3.5

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

    下载完整的CUDA toolkit 分发包并将其解压到磁盘的某个位置。 如果您没有安装CUDA toolkit,请立即安装。如果您只安装了Visual Studio 2017,请取消选中Visual Studio integration 复选框。

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

但要在Visual Studio 2017 中成功构建Cuda 工具包项目,还需要按照步骤5 和6。

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

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

<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。

【讨论】:

你真的需要 .net 框架吗?我还没有在 VS 2017 下安装 CUDA,但不记得为旧版本安装了它。 @tera ,我个人讨厌它。它使一切变慢。但我认为你需要它。 Nvda.Build.CudaTasks.v8.0.dll 程序集依赖于 MS .NET Framework 3.5 如果您正在执行自定义安装,请不要取消选中Visual Studio Integration 复选框。不行,但是如果不选择,上面提到的MSBuildExtensions文件夹中的文件就不会被下载。 @NauticalMile 仅当您使用网络安装程序时才会出现这种情况,该安装程序会从安装程序下载所需文件。如果你下载完整的 1-2GB 离线安装程序,installer.exe 可以解压(使用 7zip 或其他),MSBuildExtensions 文件夹就在里面。 反汇编DLL,我发现Nvda.Build.CudaTasks.v8.0.dll依赖.NET 4.0,当我们需要.NET配置文件时,通常与VS2017一起安装。【参考方案2】:

目前,微软似乎仍在提供 VS2015 Update 2 社区版。你必须加入“开发要点”计划,但它似乎是免费的。

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

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

【讨论】:

【参考方案3】:

感谢大家的帮助。我只是想用拼图的最后一块来补充这篇文章。 CUDA v9.0 RC 正在寻找 VS2017 以识别为 1910,但最新更新实际上识别为 1911。修复打开 .../CUDA/v9.0/include/crt/host_config.h 并更改此行:#if _MSC_VER &lt; 1600 || _MSC_VER &gt; 1910 对此:#if _MSC_VER &lt; 1600 || _MSC_VER &gt; 1911

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

【讨论】:

随着 VS2017 的更新,我们需要增加 _MSC_VER 阈值。我刚刚删除了第二个条件。【参考方案4】:

对于看到后者的人。

首先,尝试只安装 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 构建,将 Platform Toolset(在项目属性 - 常规中)设置为 Visual Studio 2017 (v141)) 或 Visual Studio 2015 (v140))

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

【讨论】:

【参考方案5】:

为了使 Cuda 编译器 nvcc 在 Windows shell 中正常工作,您需要执行以下操作

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

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

    您可以从 windows shell 编译nvcc 代码而不会出错

【讨论】:

【参考方案6】:

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

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

已经有flag了

#if _MSC_VER < 1600 || _MSC_VER > 1911

但它不会停止显示错误。

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

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

【讨论】:

为有需要的人添加更多详细信息:在 Visual Studio 2017 上,CUDA 示例编译失败,因为 CUDA 在特定范围内检查 _MSC_VER,而 VS2017 最新工具集太新。 - 在解决方案资源管理器中右键单击您的项目(不是您的解决方案)。 - 选择“属性”菜单项。 - 在左侧窗格中,选择“配置属性 >> 常规”。 - 将“平台工具集”从“Visual Studio 2017 (v141)”更改为“Visual Studio 2013 (v120)”。【参考方案7】:

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

    卸载 Visual Studio。 卸载 Visual Studio 安装程序 下载Visual Studio 2017.6(注意微软已知会更改链接和修订版,恕不另行通知)https://docs.microsoft.com/en-us/visualstudio/productinfo/installing-an-earlier-release-of-vs2017 启动安装程序

    转到单个组件。单击 Windows 10 SDK 10.0.15063 enter image description here

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

    您可能需要下载补丁。

【讨论】:

【参考方案8】:

我想使用文本编辑器(即 Sublime)编辑我的 CUDA 程序并从命令提示符编译它们,但我遇到了 nvcc 编译器错误。我在 Windows 10 操作系统中安装了 Visual Studio 2017,但编译后显示“仅允许使用 VS 2012、13、15 和 17 的版本”。所以我所做的就是从 VS 2017 安装程序的安装包中安装 VC++ 2015 工具包(参考顶帖的图片)。我没有经历他的整个过程,我只是将我的 cl.exe 文件的路径从新创建的 VS 14.0 文件夹复制到环境变量中。 .exe 可以在这里找到:

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

希望这会有所帮助!

【讨论】:

以上是关于在 Visual Studio 2017 中使用 CUDA的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Visual Studio 2013或Visual Studio 2017设置TFS 2013

在 Visual Studio 2017 中使用 64 位 Visual C++ 工具集

如何在 Visual Studio 2017 中使用 Qt 库?

在 Visual Studio 2017 中使用 CUDA

Visual Studio 2017工程在Visual Studio 2019打开碰到的问题

Visual Studio 2017工程在Visual Studio 2019打开碰到的问题