Visual Studio 2017 не обнаруживает изменения в файлах .cu(CUDA)

У меня установлены Visual Studio 2017 и Cuda Toolkit 9.1. Он работает, я подтвердил это, создав несколько проектов.

Теперь, когда я редактирую файл .cu и нажимаю build. В нем говорится, что проект уже обновлен. При использовании rebuild можно создавать изменения в новый двоичный файл.

Ответ 1

Работа вокруг заключается в принудительной компиляции вместо сборки с использованием Build -> Compile или Ctrl + F7.
Это фиксировало проблему для меня, но также обратите внимание, что я сначала попробовал Build -> Run Code Analysis on File (который также работал), прежде чем впоследствии принять вышеупомянутое обходное решение.

Ответ 2

После подачи отчета об ошибке в NVidia, они решили проблему на следующий рабочий день, пообещав выпустить исправление в следующем выпуске Nsight Visual Studio. (В настоящее время я использую Nsight Visual Studio 6.0, поставляемую с CUDA 10.0.)

Я с нетерпением жду возможности попробовать новый релиз (когда бы он ни вышел), и я приятно удивлен скоростью их реакции.

Ответ 3

В VS 2017 Microsoft изменила способ определения изменений исходного кода.

Решение написано из chrispy81 на форуме разработчиков Nvidia.

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

Хорошие новости! Эта проблема была решена и доступна с помощью набора инструментов CUDA 10.1, выпущенного в феврале 2019 года. Https://developer.nvidia.com/cuda-toolkit

Извините за долгое ожидание.