我安装了Visual Studio 2017和Cuda Toolkit 9.1。它正在工作,我通过构建几个项目来确认它。
现在,当我编辑 .cu 文件并按构建时。它说该项目已经是最新的。只有在使用重新生成时,才能将更改构建到新的二进制文件中。
是强制使用 Build -> Compile
或 Ctrl+F7 进行编译而不是生成。
这为我解决了这个问题,但也请注意,在随后采用上述解决方法之前,我最初尝试了Build -> Run Code Analysis on File
(这也有效(。
在NVidia提交错误报告后,他们在下一个工作日解决了工单,并承诺在下一个版本的Nsight Visual Studio中提供修复程序。(我目前使用的是CUDA 10.0附带的Nsight Visual Studio 6.0。
我期待着尝试新版本(无论何时发布(,我对他们的反应速度感到惊喜。
Microsoft修改了VS 2017中检测源代码更改的方式。
一个解决方案是从 chrispy81 在 Nvidia 开发者论坛上编写的。
In the CUDA 10.0.targets files:
"C:Program Files (x86)Microsoft Visual Studio2017ProfessionalCommon7IDEVCVCTargetsBuildCustomizationsCUDA 10.0.targets"
"C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V110BuildCustomizationsCUDA 10.0.targets"
"c:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.0extrasvisual_studio_integrationMSBuildExtensionsCUDA 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
抱歉久等。