10

so I've been successfully working on my CUDA program on my Linux but I would like to support Windows platform as well. However, I've been struggling with correctly compiling it. I use :

  • Windows 10
  • Cmake 3.15
  • Visual Studio 2017
  • CUDA Toolkit 10.1

When using the old deprecated Cmake CUDA support of using find_package(CUDA 10.1 REQUIRED) it correctly reports the correct path to the toolkit when using it. However, it is my understanding that the latest Cmake does not properly support the old method anymore and that cuda_add_libraryetc don't properly link anymore. So I have reformatted my 'CMakeLists.txt' file to the following based on this:

cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
project(myproject LANGUAGES CXX CUDA)

add_library(mylib SHARED mycudalib.cu)

# My code requires C++ 11 for the CUDA library, not sure which ones of these 
# will do the trick correctly. Never got the compiler this far.
target_compile_features(mylib PUBLIC cxx_std_11)
SET(CMAKE_CXX_STANDARD 11)
SET(CMAKE_CUDA_STANDARD 11)    


set_target_properties( mylib PROPERTIES CUDA_SEPARABLE_COMPILATION ON)

add_executable(test_mylib test.cpp)

target_link_libraries(test_mylib mylib ${CUDA_CUFFT_LIBRARIES})

However, I get the following error from line 2:

CMake Error at C:/Program Files/CMake/share/cmake-3.15/Modules/CMakeDetermineCompilerId.cmake:345 (message):
  No CUDA toolset found.
Call Stack (most recent call first):
  C:/Program Files/CMake/share/cmake-3.15/Modules/CMakeDetermineCompilerId.cmake:32 (CMAKE_DETERMINE_COMPILER_ID_BUILD)
  C:/Program Files/CMake/share/cmake-3.15/Modules/CMakeDetermineCUDACompiler.cmake:72 (CMAKE_DETERMINE_COMPILER_ID)
  CMakeLists.txt:2 (project)

I've tried a variation of suggestions online such as adding the following to 'CMakeLists.txt':

set(CMAKE_CUDA_COMPILER "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1/bin/nvcc")

or adding the following variable to Cmake: enter image description here

This is the 'CMakeLists.txt' file I use on Linux to compile succesfully. The difference is there I use Cmake 3.5 and CUDA Toolkit 9.0:

cmake_minimum_required(VERSION 3.5)
project( myproject)
find_package(CUDA 9.0 REQUIRED)
if(CUDA_FOUND)  
        list(APPEND CUDA_NVCC_FLAGS "-std=c++11")
endif(CUDA_FOUND)

cuda_add_library(mylib SHARED mycudalib.cu)
cuda_add_executable(test_mylib test.cpp)
target_link_libraries(test_mylib mylib ${CUDA_CUFFT_LIBRARIES})
Mineral
  • 197
  • 1
  • 1
  • 10

6 Answers6

16

For Windows 10, VS2019 Community, and CUDA 11.3, the following worked for me:

  1. Extract the full installation package with 7-zip or WinZip
  2. Copy the four files from this extracted directory .\visual_studio_integration\CUDAVisualStudioIntegration\extras\visual_studio_integration\MSBuildExtensions into the MSBuild folder of your VS2019 install C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations

The four files are:

  • CUDA 11.3.props
  • CUDA 11.3.targets
  • CUDA 11.3.xml
  • Nvda.Build.CudaTasks.v11.3.dll

I had tried installing (and reinstalling) CUDA with Visual Studio Integration, but CMake wasn't able to find the CUDA installation (even with CUDA_PATH and CMAKE_CUDA_COMPILER defined).

bjacobowski
  • 789
  • 6
  • 6
  • 4
    Note that you actually install the CUDA toolkit from an executable (not extract from 7-zip). Then, in the CUDA subfolder you listed (e.g. `C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\extras\visual_studio_integration\MSBuildExtensions` for CUDA 10.2, you'll find the 4 files you listed. Those you copy to the MS Visual Studio folder you listed. – adam.hendry Aug 18 '21 at 22:32
7

I have tried it on a different PC now and it works fine. So I had absolutely no idea why it's not working on this one. As CUDA_PATH is correctly setup in my system variables.

Then looking into it further, by uninstalling the 'Build Tools' of Visual Studio and only having the Community IDE installed, CMake used the IDE instead of the Build Tools and then it started working fine.

Mineral
  • 197
  • 1
  • 1
  • 10
  • 10
    I just ran into the same issue with the Build Tools. If you want to keep the Build Tools installed, you just need to copy everything from: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4\extras\visual_studio_integration\MSBuildExtensions To: C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Microsoft\VC\v160\BuildCustomizations Change your CUDA and VS versions in those paths as necessary. For some reason the CUDA toolkit installer doesn't consider the Build Tools installs when choosing where to add the integrations. – Matthew Dixon Aug 23 '21 at 22:04
  • After replicating this copy step, the error persists. Has anyone found additional constraints or workarounds? – ROS Jan 15 '23 at 01:46
3

Look at this. It may solve your issues. https://gitlab.kitware.com/cmake/cmake/issues/19029

Seems like Nvidia cuda installer has some issues with installing the VS integration with vs 2017. Check if you can find this file in your vs installing path.

C:/Program Files (x86)/Microsoft Visual 
Studio/2017/Professional/Common7/IDE/VC/VCTargets/BuildCustomizations/CUDA 
10.1.xml
Neng Qian
  • 75
  • 1
  • 8
  • This file is missing on my system (well, I am using 2019, so it's missing from `C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\VC\VCTargets`). Is there an installer option which will installs that file? – user2023370 Sep 10 '19 at 10:29
  • I have no idea. Finally, I decided to use instead just use VS 2015. And it works quite well so far. – Neng Qian Sep 10 '19 at 18:55
3

I was trying to build darknet from source and came across this issue.

What resolved it for me was the following:

  • making sure no other Visual Studio or Visual Studio Build Tool was installed except for VS2019. (I configured this using the uninstall feature of the ~1 mb vs_community.exe installer program)
  • REINSTALLING CUDA 10.1, using the 2.5 gb installer, and in that process, making sure 'VS Integration' is installed (for me... this was a 'reinstall' since I had already installed it, but with a bunch of VS2019,VS2017 + Build Tools all installed at once!!) during the installation.

At that point, my cudnn files were still in the bin/lib/include folder of the 10.1 installation, and I hit "Configure" in CMake again.

Success! No errors. (CMake 3.18, VS2019, CUDA 10.1.243, cudnn 7.6.5)

Ryu S.
  • 1,538
  • 2
  • 22
  • 41
2

I just have the same issue of No CUDA toolset found with different versions, and my system:

-Windows 11 -Cmake 3.20.0 -Visual Studio 2019 -CUDA Toolkit 11.6

Some netizens said that it happened if you installed Visual Studio before you install CUDA. So, I tried and reinstall CUDA, finally it work now. You also can try it. Good luck.

enter image description here

James
  • 21
  • 1
0

I had a similar problem, and probably @James claim is right, it is just visual studio and cuda integration mismatch. I followed @bjacobowski's solution. For any future reference, I integrated CUDA 12.1 and Visual Studio 2022 community edition.

  • I copied the four files from C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\extras\visual_studio_integration\MSBuildExtensions
  • And pasted into C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\BuildCustomizations
bim
  • 612
  • 7
  • 18