forked from neka-nat/cupoch
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcuda_architecture_macros.cmake
39 lines (37 loc) · 1.74 KB
/
cuda_architecture_macros.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
cmake_minimum_required(VERSION 3.18 FATAL_ERROR)
function(get_available_cuda_architectures CUDA_ARCHITECTURES)
if (NOT CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
message(FATAL_ERROR "Unsupported CUDA compiler ${CMAKE_CUDA_COMPILER_ID}.")
endif()
if(CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "11.1")
execute_process(COMMAND ${CMAKE_CUDA_COMPILER} --list-gpu-code
RESULT_VARIABLE EXIT_CODE
OUTPUT_VARIABLE OUTPUT_VAL
)
if(EXIT_CODE EQUAL 0)
string(STRIP ${OUTPUT_VAL} OUTPUT_VAL)
string(REPLACE "sm_" "" OUTPUT_VAL ${OUTPUT_VAL})
string(REPLACE "\n" ";" ARCHITECTURES ${OUTPUT_VAL})
else()
message(FATAL_ERROR "Failed to run nvcc --list-gpu-code: ${EXIT_CODE}")
endif()
elseif(CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "11.0")
set(ARCHITECTURES "35;37;50;52;53;60;61;62;70;72;75;80")
elseif(CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "10.0")
set(ARCHITECTURES "30;32;35;37;50;52;53;60;61;62;70;72;75")
elseif(CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "9.1")
set(ARCHITECTURES "30;32;35;37;50;52;53;60;61;62;70;72")
else()
set(ARCHITECTURES "30;32;35;37;50;52;53;60;61;62;70")
endif()
set(${CUDA_ARCHITECTURES} "${ARCHITECTURES}" PARENT_SCOPE)
endfunction()
# Set the default CUDA architecture to either "native" or the lowest common denominator supported by CUDA 12
function(init_cmake_cuda_architectures)
if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24")
set(CMAKE_CUDA_ARCHITECTURES "native")
else()
set(CMAKE_CUDA_ARCHITECTURES "52")
endif()
set(CMAKE_CUDA_ARCHITECTURES "${CMAKE_CUDA_ARCHITECTURES}" PARENT_SCOPE)
endfunction()