summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Maynard <rmaynard@nvidia.com>2022-04-27 18:49:50 (GMT)
committerRobert Maynard <rmaynard@nvidia.com>2022-05-03 15:52:23 (GMT)
commite8591f1516edffe9fc2ef138e5933a1c9914e9e5 (patch)
tree48291e9460af4a2bd6179b18685161ac23757385
parente0dbca93aae6b01f8b239d346a0bc99d2ca2473e (diff)
downloadCMake-e8591f1516edffe9fc2ef138e5933a1c9914e9e5.zip
CMake-e8591f1516edffe9fc2ef138e5933a1c9914e9e5.tar.gz
CMake-e8591f1516edffe9fc2ef138e5933a1c9914e9e5.tar.bz2
CUDA: native/all/all-major generates minimal set of ptx code
Fixes #23459
-rw-r--r--Modules/CMakeTestCUDACompiler.cmake1
-rw-r--r--Modules/CUDA/architectures.cmake11
-rw-r--r--Tests/CudaOnly/ArchSpecial/CMakeLists.txt1
-rw-r--r--Tests/RunCMake/CUDA_architectures/architectures-all-major-stdout.txt6
-rw-r--r--Tests/RunCMake/CUDA_architectures/architectures-all-stdout.txt6
-rw-r--r--Tests/RunCMake/CUDA_architectures/architectures-native-stdout.txt6
-rw-r--r--Tests/RunCMake/CUDA_architectures/architectures-suffix-stdout.txt6
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'