architectures.cmake 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. # See supported GPUs on Wikipedia
  2. # https://en.wikipedia.org/wiki/CUDA#GPUs_supported
  3. # Initial set based on CUDA 7.0.
  4. set(CMAKE_CUDA_ARCHITECTURES_ALL 20 21 30 35 37 50 52 53)
  5. set(CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 20 30 35 50)
  6. if(CMAKE_CUDA_COMPILER_TOOLKIT_VERSION VERSION_GREATER_EQUAL 8.0)
  7. list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 60 61 62)
  8. list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 60)
  9. endif()
  10. if(CMAKE_CUDA_COMPILER_TOOLKIT_VERSION VERSION_GREATER_EQUAL 9.0)
  11. if(NOT CMAKE_CUDA_COMPILER_ID STREQUAL "Clang" OR CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 6.0)
  12. list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 70 72)
  13. list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 70)
  14. endif()
  15. list(REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES_ALL 20 21)
  16. list(REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 20 21)
  17. endif()
  18. if(CMAKE_CUDA_COMPILER_TOOLKIT_VERSION VERSION_GREATER_EQUAL 10.0
  19. AND (NOT CMAKE_CUDA_COMPILER_ID STREQUAL "Clang" OR CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0))
  20. list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 75)
  21. endif()
  22. if(CMAKE_CUDA_COMPILER_TOOLKIT_VERSION VERSION_GREATER_EQUAL 11.0)
  23. if(NOT CMAKE_CUDA_COMPILER_ID STREQUAL "Clang" OR CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 11.0)
  24. list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 80)
  25. list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 80)
  26. endif()
  27. list(REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES_ALL 30)
  28. list(REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 30)
  29. endif()
  30. if(CMAKE_CUDA_COMPILER_TOOLKIT_VERSION VERSION_GREATER_EQUAL 11.1
  31. AND (NOT CMAKE_CUDA_COMPILER_ID STREQUAL "Clang" OR CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0))
  32. list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 86)
  33. endif()
  34. if(CMAKE_CUDA_COMPILER_TOOLKIT_VERSION VERSION_GREATER_EQUAL 11.4
  35. AND (NOT CMAKE_CUDA_COMPILER_ID STREQUAL "Clang"))
  36. list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 87)
  37. endif()
  38. # FIXME(#23161): Detect architectures early since we test them during
  39. # compiler detection. We already have code to detect them later during
  40. # compiler testing, so we should not need to do this here.
  41. if(NOT CMAKE_GENERATOR MATCHES "Visual Studio")
  42. set(_CUDA_ARCHS_EXE "${CMAKE_PLATFORM_INFO_DIR}/CMakeDetermineCUDACompilerArchs.bin")
  43. execute_process(
  44. COMMAND "${_CUDA_NVCC_EXECUTABLE}" -o "${_CUDA_ARCHS_EXE}" --cudart=static "${CMAKE_ROOT}/Modules/CMakeCUDACompilerABI.cu"
  45. RESULT_VARIABLE _CUDA_ARCHS_RESULT
  46. OUTPUT_VARIABLE _CUDA_ARCHS_OUTPUT
  47. ERROR_VARIABLE _CUDA_ARCHS_OUTPUT
  48. )
  49. if(_CUDA_ARCHS_RESULT EQUAL 0)
  50. execute_process(
  51. COMMAND "${_CUDA_ARCHS_EXE}"
  52. RESULT_VARIABLE _CUDA_ARCHS_RESULT
  53. OUTPUT_VARIABLE _CUDA_ARCHS_OUTPUT
  54. ERROR_VARIABLE _CUDA_ARCHS_OUTPUT
  55. OUTPUT_STRIP_TRAILING_WHITESPACE
  56. )
  57. endif()
  58. if(_CUDA_ARCHS_RESULT EQUAL 0)
  59. set(_CUDA_ARCHITECTURES_NATIVE "${_CUDA_ARCHS_OUTPUT}")
  60. list(REMOVE_DUPLICATES _CUDA_ARCHITECTURES_NATIVE)
  61. else()
  62. if (NOT _CUDA_ARCHS_RESULT MATCHES "[0-9]+")
  63. set(_CUDA_ARCHS_STATUS " (${_CUDA_ARCHS_RESULT})")
  64. else()
  65. set(_CUDA_ARCHS_STATUS "")
  66. endif()
  67. string(REPLACE "\n" "\n " _CUDA_ARCHS_OUTPUT " ${_CUDA_ARCHS_OUTPUT}")
  68. file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
  69. "Detecting the CUDA native architecture(s) failed with "
  70. "the following output:\n${_CUDA_ARCHS_OUTPUT}\n\n")
  71. set(_CUDA_ARCHS_OUTPUT "")
  72. endif()
  73. unset(_CUDA_ARCHS_EXE)
  74. unset(_CUDA_ARCHS_RESULT)
  75. unset(_CUDA_ARCHS_OUTPUT)
  76. endif()