Проблемы компиляции CUDA в Windows, ошибка Cmake: не найден набор инструментов CUDA - PullRequest
0 голосов
/ 17 июня 2019

, поэтому я успешно работаю над своей программой CUDA в Linux, но я бы также хотел поддерживать платформу Windows.Тем не менее, я боролся с правильной компиляцией.Я использую:

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

Когдаиспользуя устаревшую поддержку Cmake CUDA с использованием find_package(CUDA 10.1 REQUIRED), он корректно сообщает правильный путь к инструментарию при его использовании.Тем не менее, я понимаю, что последний Cmake больше не поддерживает должным образом старый метод и что cuda_add_library и т. Д. Больше не работают должным образом.Поэтому я переформатировал мой файл 'CMakeLists.txt' в соответствии с 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})

Однако из строки 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)

Я пробовал различные варианты предложений в Интернете, такие как добавление следующего в 'CMakeLists.txt':

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

или добавление следующей переменной в Cmake: enter image description here

Это файл 'CMakeLists.txt', который я использую в Linux для успешной компиляции.Разница в том, что я использую Cmake 3.5 и 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})

Ответы [ 2 ]

1 голос
/ 19 июня 2019

Я уже пробовал на другом ПК, и он отлично работает.Так что я понятия не имел, почему он не работает над этим.Так как CUDA_PATH правильно настроен в моих системных переменных.

Затем, изучив его, удалив «Инструменты сборки» Visual Studio и установив только IDE сообщества, CMake использовал IDE вместо инструментов сборки, после чего он начал работать нормально.

0 голосов
/ 24 июня 2019

Посмотри на это.Это может решить ваши проблемы.https://gitlab.kitware.com/cmake/cmake/issues/19029

Похоже, у установщика Nvidia cuda есть некоторые проблемы с установкой интеграции VS с vs 2017. Проверьте, можете ли вы найти этот файл в пути установки против.

C:/Program Files (x86)/Microsoft Visual 
Studio/2017/Professional/Common7/IDE/VC/VCTargets/BuildCustomizations/CUDA 
10.1.xml
...