我的cuda库的构建时间正在增加,所以我认为在CUDA 5.0中引入的单独编译可能对我有所帮助.我无法弄清楚如何用cmake实现单独的编译.我查看了NVCC文档并找到了如何编译设备对象(使用-dc选项)以及如何链接它们(使用-dlink).我尝试使用cmake运行它失败了.我正在使用cmake 2.8.10.2和FindCUDA.cmake主干的头部.然而,我无法找到如何指定应编译哪些文件以及如何将它们链接到库中.特别的语法function(CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS output_file_var cuda_target options object_files source_files)
我不清楚,因为我不知道是什么的output_file_var和cuda_target是.在这里我的尝试的不工作结果:
cuda_compile(DEVICEMANAGER_O devicemanager.cu OPTIONS -dc)
cuda_compile(BLUB_O blub.cu OPTIONS -dc)
CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS(TEST_O gpuacceleration
"" DEVICEMANGER_O BLUB_O)
set(LIB_TYPE SHARED)
#cuda_add_library(gpuacceleration ${LIB_TYPE}
#${gpuacc_SRCS}
#devicemanager.cu
# blub.cu
#DEVICEMANAGER_O
# TEST_O
#)
Run Code Online (Sandbox Code Playgroud)
有谁知道如何使用cmake编译和链接cuda库?提前致谢.
编辑: 在朋友咨询FindCUDA.cmake的开发人员后,FindCUDA.cmake提供的示例中修复了一个错误(https://gforge.sci.utah.edu/gf/project/findcuda/scmsvn/?action= browse&path =%2F checkout%2Ftrunk%2FFindCuda.html).我现在能够构建这个例子.在我的项目中,我可以根据需要使用以下内容构建库(需要cmake 2.8.10):
set(LIB_TYPE SHARED)
set(CUDA_SEPARABLE_COMPILATION ON)
cuda_add_library(gpuacceleration ${LIB_TYPE}
blub.cu
blab.cu
)
Run Code Online (Sandbox Code Playgroud)
但是: 我无法链接到这个库.当我在没有单独编译的情况下构建lib时,我能够链接它.现在收到以下错误:
undefined reference to `__cudaRegisterLinkedBinary_53_tmpxft_00005ab4_00000000_6_blub_cpp1_ii_d07d5695'
Run Code Online (Sandbox Code Playgroud)
对于具有接口中使用的功能的每个文件.看似奇怪,因为它建立没有任何警告等任何想法如何使这工作?
编辑: 我终于想出了如何做到这一点.有关详细信息,请参阅@ PHD和我的答案.