簡體   English   中英

使用cmake單獨編譯和鏈接CUDA C ++設備代碼

[英]Separate Compilation and Linking of CUDA C++ Device Code with cmake

我想在使用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
)

這將有助於查看錯誤消息。

通過僅查看代碼,而不是指定庫路徑,可以使用$ {CUDA_LIBRARIES}。

轉儲標志部分,並對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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM