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
Извините за долгое ожидание.