我已经安装了Visual Studio 2017和Cuda Toolkit 9.1,且已经成功构建了几个项目来确认它们的可用性。
但是当我编辑一个 .cu 文件并按下“构建”按钮时,它显示项目已经是最新的,只有使用“重建”才能将更改构建到新的二进制文件中。
我已经安装了Visual Studio 2017和Cuda Toolkit 9.1,且已经成功构建了几个项目来确认它们的可用性。
但是当我编辑一个 .cu 文件并按下“构建”按钮时,它显示项目已经是最新的,只有使用“重建”才能将更改构建到新的二进制文件中。
一种解决方法是通过强制编译而不是使用构建进行编译,使用Build -> Compile
或Ctrl+F7 代替。
这对我解决了问题,但请注意,在采用上述解决方法之前,我最初尝试了Build -> Run Code Analysis on File
(这也起作用)。
微软在VS 2017中修改了源代码更改检测的方式。
chrispy81在Nvidia Developer Forum上提供了一个解决方案。
In the CUDA 10.0.targets files:
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\BuildCustomizations\CUDA 10.0.targets"
"C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\BuildCustomizations\CUDA 10.0.targets"
"c:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\extras\visual_studio_integration\MSBuildExtensions\CUDA 10.0.targets"
under this tag:
<WriteLinesToFile
Condition="'%(CudaCompile.ExcludedFromBuild)' != 'true'"
File="%(CudaCompile.DepsOutputPath)"
Lines="@(_CudaCompileDeps)"
Overwrite="true" />
write this:
<PropertyGroup>
<CudaCompileItemFullPath>%(CudaCompile.FullPath)</CudaCompileItemFullPath>
</PropertyGroup>
<GetOutOfDateItems
Condition ="'$(SelectedFiles)' == ''"
Sources ="%(CudaCompile.FullPath);
@(_CudaCompileDeps)"
OutputsMetadataName ="Outputs"
DependenciesMetadataName ="AdditionalInputs"
CommandMetadataName ="Command"
TLogDirectory ="$(TLogLocation)"
TLogNamePrefix ="%(CudaCompile.Filename)%(CudaCompile.Extension)$(CudaCompileItemFullPath.GetHashCode())">
<Output TaskParameter="OutOfDateSources" ItemName="CudaBuildCoreOutOfDateItems"/>
</GetOutOfDateItems>
好消息!这个问题已经得到解决,可通过2019年2月发布的CUDA 10.1工具包获得。 https://developer.nvidia.com/cuda-toolkit
很抱歉让您等待了这么久。
生成 -> 配置管理器
) - Christian W.