作者 | 一天到晚潜水的鱼 编辑 | DeepDriving
点击下方卡片,关注“自动驾驶之心”公众号
ADAS巨卷干货,即可获取
点击进入→自动驾驶之心【模型部署】技术交流群
编译CUDA
代码可以使用NVCC
工具直接在命令行输入命令进行编译,比如:
nvcc cuda_test.cu -o cuda_test
但是这种方法只适合用来编译只有几个文件的CUDA
代码,大规模的工程代码一般都使用CMake
工具进行管理。本文介绍2种使用CMake
编译CUDA
代码的方法。
之前写了几篇介绍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
的版本号,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编程语言支持
在3.10
及以上版本的CMake
中,find_package
的方式已经被弃用(可以用但不推荐),要编译CUDA
代码可以CMakeLists.txt
文件中添加对CUDA
编程语言的支持。如果程序中CUDA
代码是可选的,那么可以在CMakeLists.txt
文件中使用下面的语句进行使能:
enable_language(CUDA)
如果CUDA
代码是必须的,那么就需要像下面这样进行设置,表示在项目CUDA_TEST
中要用到CUDA
和C++
两种编程语言:
project(CUDA_TEST LANGUAGES CUDA CXX)
可以通过CheckLanuage
判断CUDA
是否可用
include(CheckLanguage)
check_language(CUDA)
然后就可以跟编译普通C++
代码一样用add_executable
编译可执行文件了:
cmake_minimum_required(VERSION 3.10)
project(CUDA_TEST LANGUAGES CUDA CXX)
include(CheckLanguage)
check_language(CUDA)
add_executable(cuda_test cuda_test.cu)
参考资料
https://cmake.org/cmake/help/latest/module/FindCUDA.html
https://cliutils.gitlab.io/modern-cmake/chapters/packages/CUDA.html
视频课程来了!
自动驾驶之心为大家汇集了毫米波雷达视觉融合、高精地图、BEV感知、传感器标定、传感器部署、自动驾驶协同感知、语义分割、自动驾驶仿真、L4感知、决策规划、轨迹预测等多个方向学习视频,欢迎大家自取(扫码进入学习)
(扫码学习最新视频)
国内首个自动驾驶学习社区
近1000人的交流社区,和20+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、Occpuancy、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!
【自动驾驶之心】全栈技术交流群
自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向;
添加汽车人助理微信邀请入群
备注:学校/公司+方向+昵称