Моят компютър има GTX 580 (компютърни възможности 2.0).
Искам да компилирам източник на CUDA, който използва динамичен паралелизъм, функция, въведена в изчислителната способност 3.5.
Знам, че няма да мога да стартирам програмата на моя GPU, но трябва да е възможно да компилирам този код на моята машина. Предполагам това, защото мога да компилирам без проблеми 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.