c++ - Compiling/adding cuda code to existing project (CMake) -
i trying port parts of existing project gpus via cuda code. understand cmake has options (find_cuda...) deal .cu files separately, yet still trying figure out how ecosystem can used in context of existing projects.
my question following. let's have existing c++ project cmake config file (cmakelists). current practice eleganly (if possible) include cuda kernels? can cmakelists constructed in way, .cu files compiled if gpu present?
my current idea create separate folder, cuda related code exists , compile static library. way it?
having cuda files in separate folders recommended way not required. basic principle collect .cu files in cmake variable (let's call cuda_src) , .cpp files in different variable (call src). compile both files , put them together. variable cuda_found provided find_package(cuda) can used determine if cuda installed on system. use of static library cuda files not required, i'll show both ways here.
in top level cmake file want have find cuda , set nvcc flags:
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() with static cuda library
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 , link libraries add_executable(${prog_name} ${src}) target_link_libraries(${prog_name} ${libs} ) without static cuda lib
file(glob_recurse src *.cpp) if(cuda_found) #compile cuda files , add compiled object files normal source files file(glob_recurse cuda_src *.cu) cuda_compile(cuda_objs ${cuda_src}) set(src ${src} ${cuda_objs}) endif() #compile .cpp files , link libraries add_executable(${prog_name} ${src}) target_link_libraries(${prog_name} ${libs} )
Comments
Post a Comment