编译CUDA代码可以使用NVCC工具直接在命令行输入命令进行编译,如:
nvcc cuda_test.cu -o cuda_test
然而,这种方法只适合编译只有几个文件的CUDA代码。 大型工程代码通常使用CMake工具进行管理。 本文介绍了使用CMake编译CUDA代码的2种方法。
之前写过几篇介绍CUDA编程的文章,有时间会继续写。
1.使用find_package
如果CMake版本大于3.10,可以使用CMakeLists.txt文件中的find_package导出CUDA包,然后使用cuda_add_executable()或cuda_add_library()编译CUDA可执行文件或库文件。
cmake_minimum_required(VERSION 3.8)
project(CUDA_TEST)
find_package(CUDA REQUIRED)
message(STATUS "cuda version: " ${CUDA_VERSION_STRING})
include_directories(${CUDA_INCLUDE_DIRS})
cuda_add_executable(cuda_test cuda_test.cu)
target_link_libraries(cuda_test ${CUDA_LIBRARIES})
变量CUDA_VERSION_STRING表示CUDA的版本号hadoop2.8.2源码编译,CUDA_INCLUDE_DIRS表示存储CUDA头文件的目录,CUDA_LIBRARIES表示CUDA库文件。 更多说明请参考CMake的官方文档:
https://cmake.org/cmake/help/latest/module/FindCUDA.html
CMakeLists.txt编写完成后,执行以下命令编译可执行文件:
mkdir build && cd build
cmake ..
make
2.添加CUDA编程语言支持
在 CMake 3.10 及以上版本中,find_package 方法早已被弃用(可以使用但不推荐)。 要编译 CUDA 代码,您可以向 CMakeLists.txt 文件添加对 CUDA 编程语言的支持。 如果程序中的CUDA代码是可选的,您可以在CMakeLists.txt文件中使用以下语句启用它:
enable_language(CUDA)
如果需要CUDA代码hadoop2.8.2源码编译,那么需要进行如下设置,这意味着在项目CUDA_TEST中将同时使用CUDA和C++编程语言:
project(CUDA_TEST LANGUAGES CUDA CXX)
可以通过CheckLanuage判断CUDA是否可用
include(CheckLanguage)
check_language(CUDA)
然后你可以使用add_executable来编译可执行文件,就像编译普通C++代码一样:
cmake_minimum_required(VERSION 3.10)
project(CUDA_TEST LANGUAGES CUDA CXX)
include(CheckLanguage)
check_language(CUDA)
add_executable(cuda_test cuda_test.cu)
参考