【问题标题】:Visual Studio 2017 not detecting change in .cu (CUDA) filesVisual Studio 2017 未检测到 .cu (CUDA) 文件中的更改
【发布时间】:2018-06-19 09:53:37
【问题描述】:

我已安装 Visual Studio 2017 和 Cuda Toolkit 9.1。它正在工作,我通过构建一些项目来确认它。

现在当我编辑一个 .cu 文件并按下 build 时。它说该项目已经是最新的。只有在使用重新构建时才能将更改构建到新的二进制文件中。

【问题讨论】:

  • 您是否将相关文件/项目添加到配置管理器? (build -> configuration manager)
  • 我在使用 vs2017、cuda 9.1 和工具集 v140 时遇到了同样的问题。如果您有解决方案,请告诉我。
  • 我也有同样的问题

标签: visual-studio cuda


【解决方案1】:

一种解决方法是使用 Build -> CompileCtrl+F7 强制编译而不是构建。
这解决了我的问题,但也请注意,我最初尝试了 Build -> Run Code Analysis on File(这也有效),然后才采用上述解决方法。

【讨论】:

    【解决方案2】:

    在 NVidia 提交错误报告后,他们在下一个工作日解决了问题,并承诺在 Nsight Visual Studio 的下一个版本中提供修复。 (我目前正在使用 CUDA 10.0 附带的 Nsight Visual Studio 6.0。)

    我期待着试用新版本(无论何时发布),他们的响应速度让我惊喜不已。

    【讨论】:

      【解决方案3】:

      微软在 VS 2017 中修改了方式,如何检测源代码更改。

      Nvidia Developer Forum 上的 chrispy81 写了一个解决方案。

      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>
      

      【讨论】:

        【解决方案4】:

        好消息! 2019 年 2 月发布的 CUDA 10.1 Toolkit 已经解决了这个问题,并提供了该工具包。 https://developer.nvidia.com/cuda-toolkit

        抱歉让您久等了。

        【讨论】:

          猜你喜欢
          • 2021-06-14
          • 2014-10-07
          • 2023-03-25
          • 1970-01-01
          • 2017-03-14
          • 2018-09-19
          • 2018-05-27
          • 2015-06-29
          • 2021-12-19
          相关资源
          最近更新 更多