linux下如何编译CUDA+QT(qtcreator下)
1、问题
目前Cuda进行gpu加速非常流行,qt在linux和windows上跨平台开发同样很受欢迎。那么如何让qt+cuda在linux下一个项目内同时编译,让软件开发人员省去编译环境配置的麻烦呢?我们将解决如何将cuda的nv编译环境,集成到qt项目中。:.
linux系统+GT640显卡
qtcreator2.8+qt4.7.4+cuda5.0:.
先看一下我已经配置好的qt项目,在资源管理器中,已经可以看到普通C/C++代码和cuda代码是分开显示的。这个是qt设置的问题,但是已经可以在一起编译执行了。
具体操作,修改qt项目配置文件pro,在配置后面加入如下代码,我们就实现了qt+cuda 的交叉编译。
让你的项目可以看到后缀cu的cuda代码文件
OTHER_FILES+=./Bll/ImageReconstruction/Cuda/CudaFDK.cu\
./Bll/ImageReconstruction/Cuda/CudaFDK_kernel.cu\
./Bll/ImageReconstruction/Cuda/CudaFDK_SS.cu\
./Bll/ImageReconstruction/Cuda/CudaFDK_SS_kernel.cu
CUDA配置,具体按照你系统环境更改
CUDA_SOURCES+=./Bll/ImageReconstruction/Cuda/CudaFDK.cu\
./Bll/ImageReconstruction/Cuda/CudaFDK_kernel.cu\
./Bll/ImageReconstruction/Cuda/CudaFDK_SS.cu\
./Bll/ImageReconstruction/Cuda/CudaFDK_SS_kernel.cu
CUDA_SDK=/usr/local/cuda-5.0/cudaSDK路径
CUDA_DIR=/usr/local/cuda-5.0/CUDAtookit路径
SYSTEM_NAME=linux自己系统环境&39;Win32&39;,&39;x64&39;,or&39;Win64&39;
SYSTEM_TYPE=32操作系统位数&39;32&39;or&39;64&39;,
CUDA_ARCH=sm_21cuda架构,forexample&39;pute_10&39;,&39;pute_11&39;,&39;sm_10&39;
NVCC_OPTIONS=--use_fast_math
includepaths
INCLUDEPATH+=$$CUDA_DIR/include
librarydirectories
QMAKE_LIBDIR+=$$CUDA_DIR/lib/
CUDA_OBJECTS_DIR=./
ThefollowinglibraryconflictswithsomethinginCuda
QMAKE_LFLAGS_RELEASE=/NODEFAULTLIB:msvcrt.lib
QMAKE_LFLAGS_DEBUG=/NODEFAULTLIB:msvcrtd.lib
Addthenecessarylibraries
CUDA_LIBS=cudartcufft
Thefollowingmakessureallpathnames(whichoftenincludespaces)areputbetweenquotationmark s
CUDA_INC=$$join(INCLUDEPA TH,&39;-I&39;,&39;-I&39;,&39;&39;)
NVCC_LIBS=$$join(CUDA_LIBS,&39;-l&39;,&39;-l&39;,&39;&39;)
LIBS+=$$join(CUDA_LIBS,&39;.so&39;,&39;&39;,&39;.so&39;)
ConfigurationoftheCudapiler
CONFIG(debug,debug|release){
Debugmode
cuda_d.input=CUDA_SOURCES
cuda_d.output=$$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o
cuda_dmands=$$CUDA_DIR/bin/nv-D_DEBUG$$NVCC_OPTIONS$$CUDA_INC$$NV CC_LIBS--machine$$SYSTEM_TYPE-arch=$$CUDA_ARCH-c-o${QMAKE_FILE_OUT}${Q MAKE_FILE_NAME}
cuda_d.dependency_type=TYPE_C
QMAKE_EXTRA_COMPILERS+=cuda_d
}
else{
Releasemode
cuda.input=CUDA_SOURCES
cuda.output=$$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o
cudamands=$$CUDA_DIR/bin/nv$$NVCC_OPTIONS$$CUDA_INC$$NVCC_LIBS--mac hine$$SYSTEM_TYPE-arch=$$CUDA_ARCH-O3-c-o${QMAKE_FILE_OUT}${QMAKE_FIL E_NAME}
cuda.dependency_type=TYPE_C
QMAKE_EXTRA_COMPILERS+=cuda
}
将nv编译和qmake编译集成到一起的好处就是,软件开发人员不需要头疼两种混合编译器的配置,只需要关注程序编写即可。