我的電腦有一個GTX 580(計算能力2.0)。CMake生成一個針對較新設備的MSVC CUDA項目
我想編譯一個使用動態並行性的CUDA源代碼,這是計算能力3.5中引入的一項功能。
我知道我將無法在我的GPU上運行該程序,但是,應該可以在我的機器上編譯此代碼。我假設這是因爲我可以毫無問題地編譯使用3.5功能的CUDA示例。這些示例帶有「手動生成」的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
不知道從哪裏走了。感謝任何幫助。
我使用的是Windows 7的
忘了說:我使用的CMake 2.8.12.2。 –
可能與FindCUDA.cmake上的這個錯誤有關:http://public.kitware.com/Bug/view.php?id=15016 –