首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将code代码编译/添加到现有项目(CMake)

将code代码编译/添加到现有项目(CMake)
EN

Stack Overflow用户
提问于 2017-08-21 09:16:12
回答 1查看 1.6K关注 0票数 4

我试图通过CUDA代码将现有项目的部分移植到GPU。我知道cmake有选择(find_cuda.)为了单独处理.cu文件,我仍然试图弄清楚如何在现有项目的上下文中使用这个生态系统。

我的问题如下。假设我有一个现有的C++项目,其中包含一个config文件(CMakeLists)。目前的做法包括数据自动化系统内核(如果可能的话)是什么?CMakeLists能否以一种方式构建,只有当GPU存在时才编译.cu文件?

我目前的想法是创建一个单独的文件夹,其中只有与CUDA相关的代码,然后将其编译为一个静态库。就是这样吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-21 10:40:01

将CUDA文件放在单独的文件夹中是我推荐的方法,但不是必需的。基本原则是收集.cu变量中的所有CMake文件(让我们称之为CUDA_SRC)和其他变量中的所有.cpp文件(称为SRC)。现在编译这两个文件并将它们放在一起。可以使用由CUDA_FOUND提供的变量find_package(CUDA)来确定您的系统是否安装了CUDA。对于cuda文件,不需要使用静态库,但我将在这里向您展示这两种方法。

在您的顶级cmake文件中,您希望有这样的内容来查找CUDA并设置一些nvcc标志:

代码语言:javascript
复制
find_package(CUDA QUIET)
if(CUDA_FOUND)
    include_directories(${CUDA_INCLUDE_DIRS})
    SET(ALL_CUDA_LIBS ${CUDA_LIBRARIES} ${CUDA_cusparse_LIBRARY} ${CUDA_cublas_LIBRARY})
    SET(LIBS ${LIBS} ${ALL_CUDA_LIBS})
    message(STATUS "CUDA_LIBRARIES: ${CUDA_INCLUDE_DIRS} ${ALL_CUDA_LIBS}")
    set(CUDA_PROPAGATE_HOST_FLAGS ON)
    set(CUDA_SEPARABLE_COMPILATION OFF)
    list( APPEND CUDA_NVCC_FLAGS -gencode=arch=compute_30,code=compute_30 )
    list( APPEND CUDA_NVCC_FLAGS -gencode=arch=compute_52,code=sm_52 )
endif()

带有静态CUDA库的

代码语言:javascript
复制
if(CUDA_FOUND)
     #collect CUDA files
     FILE(GLOB_RECURSE CUDA_SRC  *.cu)
     #build static library
     CUDA_ADD_LIBRARY(my_cuda_lib ${CUDA_SRC} STATIC)
     SET(LIBS ${LIBS} ${my_cuda_lib})
endif()

#collect cpp files
FILE(GLOB_RECURSE SRC  *.cpp)

#compile .cpp files and link it to all libraries
add_executable(${PROG_NAME} ${SRC})
target_link_libraries(${PROG_NAME} ${LIBS} )

没有静态CUDA库的

代码语言:javascript
复制
FILE(GLOB_RECURSE SRC  *.cpp)

if(CUDA_FOUND)
    #compile cuda files and add the compiled object files to your normal source files
    FILE(GLOB_RECURSE CUDA_SRC  *.cu)
    cuda_compile(cuda_objs ${CUDA_SRC})
    SET(SRC ${SRC} ${cuda_objs})
endif()

#compile .cpp files and link it to all libraries
add_executable(${PROG_NAME} ${SRC})
target_link_libraries(${PROG_NAME} ${LIBS} )
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45793407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档