如何在CMake配置中设置nvcc的-arch=sm_86编译选项?
在CMakeLists.txt中配置nvcc的-arch=sm_86选项
因为atomicCAS(unsigned short*, unsigned short, unsigned short)需要CUDA架构sm_86及以上版本支持,所以需要在CMake中明确指定nvcc的架构参数,以下是几种可行的配置方式:
1. 针对单个目标配置(推荐,现代CMake)
如果你的CMake版本≥3.18(支持直接将.cu文件纳入add_executable/add_library),可以通过target_compile_options为特定目标添加CUDA编译参数,仅作用于该目标的CUDA代码:
# 生成可执行文件(或用add_library生成库) add_executable(my_cuda_app my.cu) # 仅对CUDA编译语言添加-arch=sm_86参数 target_compile_options(my_cuda_app PRIVATE $<$<COMPILE_LANGUAGE:CUDA>:-arch=sm_86>)
2. 全局CUDA编译配置
如果整个项目的所有CUDA代码都需要使用sm_86架构,可以直接设置全局的CMAKE_CUDA_FLAGS,对所有CUDA目标生效:
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -arch=sm_86")
3. 旧版CMake(依赖FindCUDA模块)
若使用的是较旧的CMake版本,需要通过FindCUDA模块处理CUDA代码,可在cuda_add_executable中指定OPTIONS参数:
find_package(CUDA REQUIRED) cuda_add_executable(my_cuda_app my.cu OPTIONS -arch=sm_86)
注意:指定-arch=sm_86后,编译器会自动适配对应的后端代码生成,无需重复设置原本的--gpu-code参数,即可正常编译支持unsigned short类型的atomicCAS函数。
内容的提问来源于stack exchange,提问作者Sakura
相关产品推荐
相关产品推荐

