在 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.0
和 Visual Studio 2017
,则需要为 Visual Studio 2017 安装其他组件。单击“开始”菜单并键入 Visual Studio Installer。打开 Visual Studio 安装程序打开 Individual components
选项卡并选择 VC++ 2015.3 v140 toolset
在Compilers, build tools and runtimes
下。
-
如果您没有安装
.NET Framework 3.5
,您还需要安装它。Nvda.Build.CudaTasks.v8.0.dll
assembly 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 < 1600 || _MSC_VER > 1910
对此:#if _MSC_VER < 1600 || _MSC_VER > 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 > ...
【讨论】:
【参考方案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 库?