diff options
author | Robert Maynard <rmaynard@nvidia.com> | 2022-04-27 18:49:50 (GMT) |
---|---|---|
committer | Robert Maynard <rmaynard@nvidia.com> | 2022-05-03 15:52:23 (GMT) |
commit | e8591f1516edffe9fc2ef138e5933a1c9914e9e5 (patch) | |
tree | 48291e9460af4a2bd6179b18685161ac23757385 | |
parent | e0dbca93aae6b01f8b239d346a0bc99d2ca2473e (diff) | |
download | CMake-e8591f1516edffe9fc2ef138e5933a1c9914e9e5.zip CMake-e8591f1516edffe9fc2ef138e5933a1c9914e9e5.tar.gz CMake-e8591f1516edffe9fc2ef138e5933a1c9914e9e5.tar.bz2 |
CUDA: native/all/all-major generates minimal set of ptx code
Fixes #23459
7 files changed, 25 insertions, 12 deletions
diff --git a/Modules/CMakeTestCUDACompiler.cmake b/Modules/CMakeTestCUDACompiler.cmake index ea07482..853d655 100644 --- a/Modules/CMakeTestCUDACompiler.cmake +++ b/Modules/CMakeTestCUDACompiler.cmake @@ -52,6 +52,7 @@ if(CMAKE_CUDA_ABI_COMPILED) set(CMAKE_CUDA_ARCHITECTURES_NATIVE "${_CUDA_ARCHS_OUTPUT}") endif() list(REMOVE_DUPLICATES CMAKE_CUDA_ARCHITECTURES_NATIVE) + list(TRANSFORM CMAKE_CUDA_ARCHITECTURES_NATIVE APPEND "-real") else() if(NOT _CUDA_ARCHS_RESULT MATCHES "[0-9]+") set(_CUDA_ARCHS_STATUS " (${_CUDA_ARCHS_RESULT})") diff --git a/Modules/CUDA/architectures.cmake b/Modules/CUDA/architectures.cmake index fa3a5a1..79c1252 100644 --- a/Modules/CUDA/architectures.cmake +++ b/Modules/CUDA/architectures.cmake @@ -44,3 +44,14 @@ if(CMAKE_CUDA_COMPILER_TOOLKIT_VERSION VERSION_GREATER_EQUAL 11.4 AND (NOT CMAKE_CUDA_COMPILER_ID STREQUAL "Clang")) list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 87) endif() + +# only generate jit code for the newest arch for all/all-major +list(POP_BACK CMAKE_CUDA_ARCHITECTURES_ALL _latest_arch) +list(TRANSFORM CMAKE_CUDA_ARCHITECTURES_ALL APPEND "-real") +list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL ${_latest_arch}) + +list(POP_BACK CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR _latest_arch) +list(TRANSFORM CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR APPEND "-real") +list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR ${_latest_arch}) + +unset(_latest_arch) diff --git a/Tests/CudaOnly/ArchSpecial/CMakeLists.txt b/Tests/CudaOnly/ArchSpecial/CMakeLists.txt index 46f4ada..88eff8a 100644 --- a/Tests/CudaOnly/ArchSpecial/CMakeLists.txt +++ b/Tests/CudaOnly/ArchSpecial/CMakeLists.txt @@ -10,6 +10,7 @@ function(verify_output flag) string(REPLACE "-" "_" architectures "${flag}") string(TOUPPER "${architectures}" architectures) set(architectures "${CMAKE_CUDA_ARCHITECTURES_${architectures}}") + list(TRANSFORM architectures REPLACE "-real" "") if(CMAKE_CUDA_COMPILER_ID STREQUAL "Clang") set(match_regex "-target-cpu sm_([0-9]+)") diff --git a/Tests/RunCMake/CUDA_architectures/architectures-all-major-stdout.txt b/Tests/RunCMake/CUDA_architectures/architectures-all-major-stdout.txt index ee0a5f7..4153699 100644 --- a/Tests/RunCMake/CUDA_architectures/architectures-all-major-stdout.txt +++ b/Tests/RunCMake/CUDA_architectures/architectures-all-major-stdout.txt @@ -1,4 +1,4 @@ -- CMAKE_CUDA_ARCHITECTURES='all-major' --- CMAKE_CUDA_ARCHITECTURES_ALL='[0-9;]+' --- CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR='[0-9;]+' --- CMAKE_CUDA_ARCHITECTURES_NATIVE='[0-9;]+' +-- CMAKE_CUDA_ARCHITECTURES_ALL='([0-9]+-real;)+[0-9]+' +-- CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR='([0-9]+-real;)+[0-9]+' +-- CMAKE_CUDA_ARCHITECTURES_NATIVE='([0-9]+-real;)*[0-9]+-real' diff --git a/Tests/RunCMake/CUDA_architectures/architectures-all-stdout.txt b/Tests/RunCMake/CUDA_architectures/architectures-all-stdout.txt index fd738e4..32c61de0 100644 --- a/Tests/RunCMake/CUDA_architectures/architectures-all-stdout.txt +++ b/Tests/RunCMake/CUDA_architectures/architectures-all-stdout.txt @@ -1,4 +1,4 @@ -- CMAKE_CUDA_ARCHITECTURES='all' --- CMAKE_CUDA_ARCHITECTURES_ALL='[0-9;]+' --- CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR='[0-9;]+' --- CMAKE_CUDA_ARCHITECTURES_NATIVE='[0-9;]+' +-- CMAKE_CUDA_ARCHITECTURES_ALL='([0-9]+-real;)+[0-9]+' +-- CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR='([0-9]+-real;)+[0-9]+' +-- CMAKE_CUDA_ARCHITECTURES_NATIVE='([0-9]+-real;)*[0-9]+-real' diff --git a/Tests/RunCMake/CUDA_architectures/architectures-native-stdout.txt b/Tests/RunCMake/CUDA_architectures/architectures-native-stdout.txt index af49e00..7f6f19e 100644 --- a/Tests/RunCMake/CUDA_architectures/architectures-native-stdout.txt +++ b/Tests/RunCMake/CUDA_architectures/architectures-native-stdout.txt @@ -1,4 +1,4 @@ -- CMAKE_CUDA_ARCHITECTURES='native' --- CMAKE_CUDA_ARCHITECTURES_ALL='[0-9;]+' --- CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR='[0-9;]+' --- CMAKE_CUDA_ARCHITECTURES_NATIVE='[0-9;]+' +-- CMAKE_CUDA_ARCHITECTURES_ALL='([0-9]+-real;)+[0-9]+' +-- CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR='([0-9]+-real;)+[0-9]+' +-- CMAKE_CUDA_ARCHITECTURES_NATIVE='([0-9]+-real;)*[0-9]+-real' diff --git a/Tests/RunCMake/CUDA_architectures/architectures-suffix-stdout.txt b/Tests/RunCMake/CUDA_architectures/architectures-suffix-stdout.txt index 22ed7f6..90b3552 100644 --- a/Tests/RunCMake/CUDA_architectures/architectures-suffix-stdout.txt +++ b/Tests/RunCMake/CUDA_architectures/architectures-suffix-stdout.txt @@ -1,4 +1,4 @@ -- CMAKE_CUDA_ARCHITECTURES='[0-9]+-real;[0-9]+-virtual;' --- CMAKE_CUDA_ARCHITECTURES_ALL='[0-9;]+' --- CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR='[0-9;]+' --- CMAKE_CUDA_ARCHITECTURES_NATIVE='[0-9;]+' +-- CMAKE_CUDA_ARCHITECTURES_ALL='([0-9]+-real;)+[0-9]+' +-- CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR='([0-9]+-real;)+[0-9]+' +-- CMAKE_CUDA_ARCHITECTURES_NATIVE='([0-9]+-real;)*[0-9]+-real' |