我在 CLion 中创建了一个新的 CUDA 可执行项目,当它打开时,我收到了 CMake 错误:
CUDA_ARCHITECTURES is empty for target "cmTC_908f4".
CMakeLists.txt:
cmake_minimum_required(VERSION 3.19)
project(test CUDA)
set(CMAKE_CUDA_STANDARD 14)
add_executable(test main.cu)
set_target_properties(
test
PROPERTIES
CUDA_SEPARABLE_COMPILATION ON)
我尝试在互联网上搜索此错误,但没有成功。我只是尝试设置
set_target_properties(test PROPERTIES CUDA_ARCHITECTURES "35;50;72")
但这并没有帮助。 现在我不知道该怎么办了。
虽然我迟到了 9 个月,但我想我实际上解决了它。我刚刚偶然发现了(我认为是)完全相同的问题。它是在尝试在 CLion 中设置新的 CUDA 项目时发生的,我遇到了同样的错误。
我现在已经联系了 CLion 的 JetBrains 支持,他们向我指出了这个问题的解决方案。
如果您遇到同样的问题,您应该在“设置/首选项 > 构建、执行、部署 > 工具链 > [您用于此项目的工具链]”下看到自动检测到的“x86”架构。只需手动选择“amd64”(或者,我想,无论您的系统运行在什么架构上),然后 CMake 构建应该可以正常运行,并且简单的 Hello World 也应该可以毫无问题地编译和运行。
版本数据:
我想知道顺序是否重要,例如在编译功能之前设置 Cuda 架构。我的 CMakeLists 有效(并且在添加 CUDA_ARCHITECTURE 行之前无效)是:
cmake_minimum_required(VERSION 3.16)
project(myTarget LANGUAGES CXX CUDA)
# Locate sources and headers for this project
include_directories(${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/include /usr/local/cuda/include )
file(GLOB sources ${PROJECT_SOURCE_DIR}/*.cc ${PROJECT_SOURCE_DIR}/src/*.cc)
file(GLOB headers ${PROJECT_SOURCE_DIR}/*.h ${PROJECT_SOURCE_DIR}/include/*.h)
file(GLOB cuda_sources ${PROJECT_SOURCE_DIR}/src/*.cu)
# Add the executable, and link
add_executable(myTarget ${sources} ${cuda_sources} ${headers})
target_link_libraries(myTarget pthread z)
# Compile Info
set_target_properties(myTarget PROPERTIES CUDA_ARCHITECTURES "35;50;72")
target_compile_features(myTarget PUBLIC cxx_std_11)
target_compile_features(myTarget PUBLIC cuda_std_11)
要抑制
Policy CMP0104 is not set: CMAKE_CUDA_ARCHITECTURES now detected for NVCC
警告,您可以 查找 GPU 上的 SM 编号/计算能力(例如,3090 Ti 为 86)并像这样包含它:
cmake .. -DUSE_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES=86 -DCMAKE_BUILD_TYPE=Release
尝试按照此处所述设置 DCMAKE_CUDA_COMPILER:https://www.jetbrains.com/help/clion/cuda-projects.html#set-nvcc - 在 CMake 设置中添加 nvcc 路径。 请记住输入可执行文件的完整路径 - 不仅仅是 bin 文件夹
我遇到了类似的问题,想知道
CMAKE_CUDA_ARCHITECTURES
到底代表什么。它似乎代表了 NVidia 卡的特定架构,程序应针对该架构进行优化,或者程序应在其上运行的最小架构。我找到了这个链接这些架构数字与所使用的 GPU 的关系。
引用最重要的代码:
图灵 - CUDA 10+ - 75 CMAKE 默认
安培 - CUDA 11.1+ - 80,86,87
洛夫莱斯 - CUDA 11.8+ - 89
漏斗 - CUDA 12+ - 90
CMake 似乎在某个时候意识到 75 可能很快就会过时,但不想不断更新它。因此,您应该自行设置,否则它会警告您,并且目前将 75 设置为默认值。
如果您搜索 NVidia,他们倾向于将这些架构命名为“计算_50”。由于架构 35 在 CUDA11 中已弃用,因此按照 CMake 示例进行设置并不明智
set_target_properties(myTarget PROPERTIES CUDA_ARCHITECTURES "35;50;72")
而是使用
set_target_properties(myTarget PROPERTIES CUDA_ARCHITECTURES "75")
消除警告并保留行为。