Мой компьютер имеет GTX 580 (вычислительные возможности 2.0).
Я хочу скомпилировать исходный код CUDA, который использует динамический параллелизм, функцию, представленную в вычислительных возможностях 3.5.
Я знаю, что не смогу запустить программу на своем графическом процессоре, однако скомпилировать этот код на моей машине должно быть возможно. Я предполагаю это, потому что я могу без проблем скомпилировать образцы CUDA, которые используют возможности 3.5. Эти примеры поставляются с проектами Visual Studio, которые были "сгенерированы вручную" (я полагаю).
Я считаю, что моя проблема связана с CMake. Я использую CMake для создания проекта Visual Studio 2012.
Мой первый CMakeLists.txt выглядел так:
PROJECT(sample-cuda-tests)
FIND_PACKAGE(CUDA REQUIRED)
INCLUDE_DIRECTORIES(${CUDA_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
FILE(GLOB_RECURSE includes ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h )
FILE(GLOB_RECURSE sources ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cc ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cu )
CUDA_ADD_EXECUTABLE(sample-cuda-tests ${includes} ${sources})
TARGET_LINK_LIBRARIES(sample-cuda-tests ${CUDA_LIBRARIES})
Затем при компиляции со сгенерированным проектом Visual Studio 2012 я получил предупреждение с последующей ошибкой:
warning : The 'compute_10' and 'sm_10' architectures are deprecated, and may be removed in a future release.
error : calling a __global__ function from a __global__ function is only allowed on the compute_35 architecture or above
Что и ожидалось. Затем я добавил
list(APPEND CUDA_NVCC_FLAGS -gencode arch=compute_35,code=sm_35)
в CMakeLists. Предупреждение исчезло, но я получил:
error : kernel launch from __device__ or __global__ functions requires separate compilation mode
В порядке. Поэтому я добавил в CMakeLists:
set(CUDA_SEPARABLE_COMPILATION ON)
... и получил это:
fatal error : nvcc supports '--relocatable-device-code=true (-rdc=true)', '--device-c (-dc)', and '--device-link (-dlink)' only when targeting sm_20 or higher
Что странно, потому что я думал, что нацелился на sm_35 (выше, чем sm_20).
Позже я обнаружил, что могу установить некоторые параметры непосредственно в команде CUDA_ADD_EXECUTABLE. Поэтому я удалил строку, которая добавляла значения к CUDA_NVCC_FLAGS, и изменил команду CUDA_ADD_EXECUTABLE на:
CUDA_ADD_EXECUTABLE(sample-cuda-tests ${includes} ${sources} OPTIONS -gencode arch=compute_35,code=sm_35)
Что я получил:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\bin\crt\link.stub : fatal error C1083: Cannot open compiler generated file: 'C:/Users/sms/Desktop/sample-cuda-tests/CMakeFiles/sample-cuda-tests.dir/Debug/sample-cuda-tests_intermediate_link.obj': No such file or directory
Не знаю, куда идти сейчас. Цените любую помощь.
Я использую CUDA SDK 6.0 в Windows 7.