Skip to content

`CMAKE_CUDA_ARCHITECTURES_NATIVE` includes versions not present in `CMAKE_CUDA_ARCHITECTURES_ALL`

I have 2 GPUs:

  • device 0: NVIDIA TITAN X (Pascal), compute capability 6.1
  • device 1: Quadro K4200, compute capability 3.0

minimal example:

# CMakeLists.txt
cmake_minimum_required(VERSION 3.24 FATAL_ERROR) # actually using 3.26.3
if("${CMAKE_CUDA_ARCHITECTURES}" STREQUAL "")
  set(CMAKE_CUDA_ARCHITECTURES native CACHE STRING "CUDA architectures" FORCE)
endif()
cmake_policy(SET CMP0104 NEW)  # CMAKE_CUDA_ARCHITECTURES
find_package(CUDAToolkit REQUIRED)
enable_language(CUDA)
message(STATUS "CMAKE_CUDA_ARCHITECTURES (user specified): ${CMAKE_CUDA_ARCHITECTURES}")

message(STATUS "CMAKE_CUDA_COMPILER_TOOLKIT_VERSION: ${CMAKE_CUDA_COMPILER_TOOLKIT_VERSION}")
message(STATUS "CMAKE_CUDA_ARCHITECTURES_ALL: ${CMAKE_CUDA_ARCHITECTURES_ALL}")
message(STATUS "CMAKE_CUDA_ARCHITECTURES_NATIVE: ${CMAKE_CUDA_ARCHITECTURES_NATIVE}")

add_executable(test "${CMAKE_ROOT}/Modules/CMakeCUDACompilerABI.cu")

error:

$ cmake . && cmake --build . && ./test
-- CMAKE_CUDA_ARCHITECTURES (user specified): native
-- CMAKE_CUDA_COMPILER_TOOLKIT_VERSION: 11.2.152
-- CMAKE_CUDA_ARCHITECTURES_ALL: 35-real;37-real;50-real;52-real;53-real;60-real;61-real;62-real;70-real;72-real;75-real;80-real;86
-- CMAKE_CUDA_ARCHITECTURES_NATIVE: 61-real;30-real
...
nvcc fatal   : Unsupported gpu architecture 'compute_30'

expected:

-- CMAKE_CUDA_ARCHITECTURES_NATIVE: 61-real
...
[100%] Built target test
61;30

related: !7074 (merged)

Edited by Casper da Costa-Luis
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information