CMAKE 编译CUDA的设置——CMakeLists.txt的编写

CMAKE 编译CUDA的设置,关于CMAKE语法请自行参考官方文档。这里给出CMakeLists.txt的设置。

(1)指定CMAKE最小版本

cmake_minimum_required(VERSION 3.24 FATAL_ERROR)

(2)指定使用的显卡架构,natie为本地显卡,也可指定其他架构

if (NOT DEFINED CMAKE_CUDA_ARCHITECTURES)

set(CMAKE_CUDA_ARCHITECTURES native)

endif()

(3)指定项目名称,且设置编写语言为C++和CUDA(这里的CUDA会启用nvcc编译器)

project(cuda_lib LANGUAGES CXX CUDA)

(4)指定编译模式方式 ,一般选release速度更快

if (DEFINED CMAKE_BUILD_TYPE)

string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE)

else()

set(CMAKE_BUILD_TYPE RELEASE)

endif()

(5)指定C++版本,并强制使用,不允许降级

set(CMAKE_CXX_STANDARD 14)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

(6)使用CheckLanguage语言检查脚本查看CUDA语言是否可用

include(CheckLanguage)

check_language(CUDA)

(7)利用FindCUDAToolkit脚本,查看是否安装CUDAToolkit

if(NOT CUDAToolkit_FOUND)

include(FindCUDAToolkit)

endif()

(8)包含CUDAToolkit的路径

include_directories(${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES})

(9)指定CUDA 版本,并强制使用

set(CMAKE_CUDA_STANDARD 14)

set(CMAKE_CUDA_STANDARD_REQUIRED ON)

(10)使用STREQUAL判断代码编译模式,并指定编译参数

if(${CMAKE_BUILD_TYPE} STREQUAL "RELEASE")

set(NVCC_FLAGS -O3 -Wno-deprecated-gpu-targets)

message(STATUS "${PROJECT_NAME} compile cuda code in release mode")

else()

set(NVCC_FLAGS -G -Wno-deprecated-gpu-targets)

message(STATUS "${PROJECT_NAME} compile cuda code in debug mode")

endif()

(11)遍历符合文件后缀名的文件,文件路径存到source_file

file(GLOB_RECURSE source_file LIST_DIRECTORIES false src/*.cpp src/*.c src/*.cuh src/*.h src/*.cu)

(12)添加名为${PROJECT_NAME}的静态库,静态库元文件为上面遍历的文件

add_library(${PROJECT_NAME} STATIC ${source_file})

(13)设置${PROJECT_NAME} 静态库属性:CUDA_SEPARABLE_COMPILATION为ON表示所有CUDA文件单独编译;CUDA_RESOLVE_DEVICE_SYMBOLS为ON时表示编译器根据需要在可启用设备链接。

set_target_properties(${PROJECT_NAME} PROPERTIES CUDA_SEPARABLE_COMPILATION ON CUDA_RESOLVE_DEVICE_SYMBOLS ON)

(14)为静态库增加编译选项,参考cmake-generator-expressions(7) — CMake 3.23.1 Documentation

target_compile_options(${PROJECT_NAME} PRIVATE $<$:

${NVCC_FLAGS}>)

(15)指定CUDA运行时连接库

target_link_libraries(${PROJECT_NAME} PUBLIC CUDA::cudart)

(16)指定安装路径

install(TARGETS ${PROJECT_NAME})

你可能感兴趣的:(CUDA,与硬件加速,零知识证明,rust,c++)