目标“cmTC_28d80”的 CUDA_ARCHITECTURES 为空

问题描述 投票:0回答:5

我在 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")

但这并没有帮助。 现在我不知道该怎么办了。

cmake cuda clion jetbrains-ide
5个回答
3
投票

虽然我迟到了 9 个月,但我想我实际上解决了它。我刚刚偶然发现了(我认为是)完全相同的问题。它是在尝试在 CLion 中设置新的 CUDA 项目时发生的,我遇到了同样的错误。

我现在已经联系了 CLion 的 JetBrains 支持,他们向我指出了这个问题的解决方案。

如果您遇到同样的问题,您应该在“设置/首选项 > 构建、执行、部署 > 工具链 > [您用于此项目的工具链]”下看到自动检测到的“x86”架构。只需手动选择“amd64”(或者,我想,无论您的系统运行在什么架构上),然后 CMake 构建应该可以正常运行,并且简单的 Hello World 也应该可以毫无问题地编译和运行。

版本数据:

  • CLion 2021.3.4
  • CMake 3.21.1(与 CLion 捆绑)
  • CUDA工具包11.6
  • MSVC 2022 / 版本 17.0
  • Windows 11 专业版

0
投票

我想知道顺序是否重要,例如在编译功能之前设置 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)


0
投票

要抑制

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

-1
投票

尝试按照此处所述设置 DCMAKE_CUDA_COMPILER:https://www.jetbrains.com/help/clion/cuda-projects.html#set-nvcc - 在 CMake 设置中添加 nvcc 路径。 请记住输入可执行文件的完整路径 - 不仅仅是 bin 文件夹


-1
投票

我遇到了类似的问题,想知道

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")
消除警告并保留行为。

© www.soinside.com 2019 - 2024. All rights reserved.