Linking CUDA files to an existing c++ project using Cmake -
i've been trying port part of existing c++ project cuda. found this great example on how include simple cuda kernel existing header file, key separate gpu code cpu, , further on include function definitions.
i've been trying accomplish similar, yet can't seem make example work cmake tool, build tool of project. cmake looks in lines of:
include_directories($cmake_current_source_dir) find_package(cuda quiet) if(cuda_found) set( codebase basic.cpp kernel.hpp ) include_directories(${cuda_include_dirs}) message(status "cuda detected") set(cuda_propagate_host_flags on) set(cuda_separable_compilation off) list( append cuda_nvcc_flags -gencode=arch=compute_30,code=compute_30,ccbin=g++-4.8 ) list( append cuda_nvcc_flags -gencode=arch=compute_52,code=sm_52 ) #collect cuda files file(glob kernels *.cu) #build static library cuda_add_library(kernel_lib ${kernels} static) set(libs ${kernel_lib} ${codebase}) add_library(codebase_static static ${libs}) endif()
my basic.cpp, basic.hpp, kernel.hpp , kernel.cu file (found *.cu) following:
basic.cpp
#include "kernel.hpp" #include <stdio.h> int main(){ gpu_hello(); return 0; }
kernel.hpp
int gpu_hello();
and kernel.cu
#include <stdio.h> #include "kernel.hpp" __global__ void mykernel(){ printf("hello mykernel\n"); } int gpu_hello(){ mykernel<<<1,1>>>(); cudadevicesynchronize(); return 0; }
when try call gpu_hello() basic.cpp, emits the: undefined reference 'gpu_hello()' error.
is there trick it? need wrap gpu_hello() function 1 in basic.hpp?
thank explanation, realize beginner question, yet me understand problem more thoroughly.
wiki
Comments
Post a Comment