单独编译和链接CUDA C ++设备代码与cmake

时间:2018-05-03 12:36:14

标签: c++ cmake cuda gpgpu gpu-programming

我想在使用cmake构建系统的现有C ++代码库中添加cuda代码。我在NVIDIA上发现了一篇文章(下面的链接),它完全展示了如何使用make build。我是cmake构建系统的新手,但我通过阅读和试验本网站上其他链接的内容进行了很好的尝试。到目前为止没有成功!有人对此有所了解吗?如果是,那么请指导我。

https://devblogs.nvidia.com/separate-compilation-linking-cuda-device-code/

这是我的CMakeLists.txt文件

cmake_minimum_required(VERSION 3.5.1)
message(STATUS "CMake version: ${CMAKE_VERSION}")

project(CUDAwithC)
find_package(CUDA 9.1 REQUIRED)
INCLUDE(FindCUDA)
INCLUDE_DIRECTORIES(/usr/local/cuda-9.1/include include)
set(SOURCE_FILES src/app.cpp src/particle.cpp src/v3.cpp)
cuda_add_executable(
    tee ${SOURCE_FILES}
)
set(
    CUDA_NVCC_FLAGS
    ${CUDA_NVCC_FLAGS};
    -x cu -gencode -arch=compute_20 -dc
)

target_link_libraries(
    tee /usr/local/cuda/lib64/libcudart.so
)

1 个答案:

答案 0 :(得分:1)

查看错误消息会有所帮助。

只需查看代码,而不是指定库路径,请使用$ {CUDA_LIBRARIES}。

转储flags部分并使用cuda_add_executable的OPTIONS参数传递-arch标志。

不要使用include_directories(最佳做法),而是使用target_include_directories并传递$ {CUDA_INCLUDE_DIRS}。你不应该这样做,因为cuda_add_executable会为你做这件事(据报道)。

启用compile_commands.json以查看构建系统正在尝试执行的操作很有帮助。

set( CMAKE_EXPORT_COMPILE_COMMANDS ON )

还值得通过FindCUDA.cmake阅读以了解它提供的内容。

/usr/share/cmake-3.10/Modules/FindCUDA.cmake