From 63a5460fafb60dbfea500a8345cad2100f43e50e Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 21 Apr 2025 18:03:46 -0400 Subject: ci: Tell CudaOnly.Architecture test what specific architecture to use CUDA 12.8 deprecates architectures below 75. Presumably a future version will remove it. Prepare infrastructure to avoid relying on hard-coded arch 52 in this test. --- .gitlab/ci/configure_cuda10.2_clang.cmake | 1 + .gitlab/ci/configure_cuda10.2_nvidia.cmake | 1 + .gitlab/ci/configure_cuda11.6_clang.cmake | 1 + .gitlab/ci/configure_cuda11.6_nvidia.cmake | 1 + .gitlab/ci/configure_cuda11.8_minimal_nvidia.cmake | 1 + .gitlab/ci/configure_cuda11.8_splayed_nvidia.cmake | 1 + .gitlab/ci/configure_cuda12.2_clang.cmake | 1 + .gitlab/ci/configure_cuda12.2_nvidia_common.cmake | 1 + .gitlab/ci/configure_cuda9.2_nvidia.cmake | 1 + .gitlab/ci/configure_nvhpc_ninja.cmake | 1 + Tests/CudaOnly/Architecture/CMakeLists.txt | 13 ++++++++++--- Tests/CudaOnly/Architecture/main.cu | 8 ++++++-- Tests/CudaOnly/CMakeLists.txt | 1 + 13 files changed, 27 insertions(+), 5 deletions(-) diff --git a/.gitlab/ci/configure_cuda10.2_clang.cmake b/.gitlab/ci/configure_cuda10.2_clang.cmake index e2d5a9c..686e783 100644 --- a/.gitlab/ci/configure_cuda10.2_clang.cmake +++ b/.gitlab/ci/configure_cuda10.2_clang.cmake @@ -1,4 +1,5 @@ set(CMake_TEST_CUDA "Clang" CACHE STRING "") +set(CMake_TEST_CUDA_ARCH "52" CACHE STRING "") set(CMake_TEST_CUDA_CUPTI "ON" CACHE STRING "") include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake") diff --git a/.gitlab/ci/configure_cuda10.2_nvidia.cmake b/.gitlab/ci/configure_cuda10.2_nvidia.cmake index 2cb2950..a6c6fdb 100644 --- a/.gitlab/ci/configure_cuda10.2_nvidia.cmake +++ b/.gitlab/ci/configure_cuda10.2_nvidia.cmake @@ -1,4 +1,5 @@ set(CMake_TEST_CUDA "NVIDIA" CACHE STRING "") +set(CMake_TEST_CUDA_ARCH "52" CACHE STRING "") set(CMake_TEST_CUDA_CUPTI "ON" CACHE STRING "") include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake") diff --git a/.gitlab/ci/configure_cuda11.6_clang.cmake b/.gitlab/ci/configure_cuda11.6_clang.cmake index e13ca88..f9490c7 100644 --- a/.gitlab/ci/configure_cuda11.6_clang.cmake +++ b/.gitlab/ci/configure_cuda11.6_clang.cmake @@ -1,3 +1,4 @@ set(CMake_TEST_CUDA "Clang" CACHE STRING "") +set(CMake_TEST_CUDA_ARCH "52" CACHE STRING "") include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake") diff --git a/.gitlab/ci/configure_cuda11.6_nvidia.cmake b/.gitlab/ci/configure_cuda11.6_nvidia.cmake index 2cb2950..a6c6fdb 100644 --- a/.gitlab/ci/configure_cuda11.6_nvidia.cmake +++ b/.gitlab/ci/configure_cuda11.6_nvidia.cmake @@ -1,4 +1,5 @@ set(CMake_TEST_CUDA "NVIDIA" CACHE STRING "") +set(CMake_TEST_CUDA_ARCH "52" CACHE STRING "") set(CMake_TEST_CUDA_CUPTI "ON" CACHE STRING "") include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake") diff --git a/.gitlab/ci/configure_cuda11.8_minimal_nvidia.cmake b/.gitlab/ci/configure_cuda11.8_minimal_nvidia.cmake index 519699b..b25bc1f 100644 --- a/.gitlab/ci/configure_cuda11.8_minimal_nvidia.cmake +++ b/.gitlab/ci/configure_cuda11.8_minimal_nvidia.cmake @@ -1,3 +1,4 @@ set(CMake_TEST_CUDA "NVIDIA" CACHE STRING "") +set(CMake_TEST_CUDA_ARCH "52" CACHE STRING "") include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake") diff --git a/.gitlab/ci/configure_cuda11.8_splayed_nvidia.cmake b/.gitlab/ci/configure_cuda11.8_splayed_nvidia.cmake index 519699b..b25bc1f 100644 --- a/.gitlab/ci/configure_cuda11.8_splayed_nvidia.cmake +++ b/.gitlab/ci/configure_cuda11.8_splayed_nvidia.cmake @@ -1,3 +1,4 @@ set(CMake_TEST_CUDA "NVIDIA" CACHE STRING "") +set(CMake_TEST_CUDA_ARCH "52" CACHE STRING "") include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake") diff --git a/.gitlab/ci/configure_cuda12.2_clang.cmake b/.gitlab/ci/configure_cuda12.2_clang.cmake index ce4afaa..ed53d1b 100644 --- a/.gitlab/ci/configure_cuda12.2_clang.cmake +++ b/.gitlab/ci/configure_cuda12.2_clang.cmake @@ -1,4 +1,5 @@ set(CMake_TEST_CUDA "Clang" CACHE STRING "") +set(CMake_TEST_CUDA_ARCH "52" CACHE STRING "") set(CMake_TEST_CUDA_STANDARDS "03;11;14;17;20;23" CACHE STRING "") set(CMake_TEST_FindOpenMP "ON" CACHE BOOL "") set(CMake_TEST_FindOpenMP_CUDA "ON" CACHE BOOL "") diff --git a/.gitlab/ci/configure_cuda12.2_nvidia_common.cmake b/.gitlab/ci/configure_cuda12.2_nvidia_common.cmake index 5dc1788..392d669 100644 --- a/.gitlab/ci/configure_cuda12.2_nvidia_common.cmake +++ b/.gitlab/ci/configure_cuda12.2_nvidia_common.cmake @@ -1,4 +1,5 @@ set(CMake_TEST_CUDA "NVIDIA" CACHE STRING "") +set(CMake_TEST_CUDA_ARCH "52" CACHE STRING "") set(CMake_TEST_CUDA_CUPTI "ON" CACHE STRING "") set(CMake_TEST_CUDA_STANDARDS "03;11;14;17;20" CACHE STRING "") set(CMake_TEST_FindOpenMP "ON" CACHE BOOL "") diff --git a/.gitlab/ci/configure_cuda9.2_nvidia.cmake b/.gitlab/ci/configure_cuda9.2_nvidia.cmake index 519699b..68e73b6 100644 --- a/.gitlab/ci/configure_cuda9.2_nvidia.cmake +++ b/.gitlab/ci/configure_cuda9.2_nvidia.cmake @@ -1,3 +1,4 @@ set(CMake_TEST_CUDA "NVIDIA" CACHE STRING "") +set(CMake_TEST_CUDA_ARCH "30" CACHE STRING "") include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake") diff --git a/.gitlab/ci/configure_nvhpc_ninja.cmake b/.gitlab/ci/configure_nvhpc_ninja.cmake index 07e47c4..ebbafcb 100644 --- a/.gitlab/ci/configure_nvhpc_ninja.cmake +++ b/.gitlab/ci/configure_nvhpc_ninja.cmake @@ -1,4 +1,5 @@ set(CMake_TEST_CUDA "NVIDIA" CACHE STRING "") +set(CMake_TEST_CUDA_ARCH "52" CACHE STRING "") set(CMake_TEST_CUDA_CUPTI "ON" CACHE STRING "") set(configure_no_sccache 1) diff --git a/Tests/CudaOnly/Architecture/CMakeLists.txt b/Tests/CudaOnly/Architecture/CMakeLists.txt index 03e972f..379b11a 100644 --- a/Tests/CudaOnly/Architecture/CMakeLists.txt +++ b/Tests/CudaOnly/Architecture/CMakeLists.txt @@ -1,14 +1,21 @@ cmake_minimum_required(VERSION 3.18) project(Architecture CUDA) +if(CMake_TEST_CUDA_ARCH) + set(arch ${CMake_TEST_CUDA_ARCH}) +else() + set(arch 52) +endif() +add_compile_definitions(EXPECT_CUDA_ARCH=${arch}) + add_executable(Architecture main.cu) -set_property(TARGET Architecture PROPERTY CUDA_ARCHITECTURES 52) +set_property(TARGET Architecture PROPERTY CUDA_ARCHITECTURES ${arch}) # Make sure CMake doesn't pass architectures if CUDA_ARCHITECTURES is OFF. if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA") - set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -arch=sm_52") + set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -arch=sm_${arch}") elseif(CMAKE_CUDA_COMPILER_ID STREQUAL "Clang") - set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --cuda-gpu-arch=sm_52") + set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --cuda-gpu-arch=sm_${arch}") endif() add_executable(ArchitectureOff main.cu) diff --git a/Tests/CudaOnly/Architecture/main.cu b/Tests/CudaOnly/Architecture/main.cu index 8c817d5..f685890 100644 --- a/Tests/CudaOnly/Architecture/main.cu +++ b/Tests/CudaOnly/Architecture/main.cu @@ -1,9 +1,13 @@ +#ifndef EXPECT_CUDA_ARCH +# error "EXPECT_CUDA_ARCH not defined!" +#endif #ifdef __CUDA_ARCH__ -# if __CUDA_ARCH__ != 520 -# error "Passed architecture 52, but got something else." +# if __CUDA_ARCH__ != (EXPECT_CUDA_ARCH * 10) +# error "__CUDA_ARCH__ does not match CUDA_ARCHITECTURES" # endif #endif int main() { + return 0; } diff --git a/Tests/CudaOnly/CMakeLists.txt b/Tests/CudaOnly/CMakeLists.txt index 77061a9..ba31fd5 100644 --- a/Tests/CudaOnly/CMakeLists.txt +++ b/Tests/CudaOnly/CMakeLists.txt @@ -4,6 +4,7 @@ macro (add_cuda_test_macro name) PROPERTY LABELS "CUDA") endmacro () +set(CudaOnly.Architecture_BUILD_OPTIONS -DCMake_TEST_CUDA_ARCH=${CMake_TEST_CUDA_ARCH}) add_cuda_test_macro(CudaOnly.Architecture Architecture) add_cuda_test_macro(CudaOnly.ArchSpecial CudaOnlyArchSpecial) add_cuda_test_macro(CudaOnly.CompileFlags CudaOnlyCompileFlags) -- cgit v0.12 From 4f2178c4a8585f90d7c3f5546aebf100dfe675ff Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 21 Apr 2025 17:13:39 -0400 Subject: ci: add tags to tie CUDA jobs to runners with hardware supporting them CUDA 12.8 deprecated support for compute architectures below 75. Presumably support will be removed from a future version of the CUDA Toolkit. Jobs using such a future version of CUDA will not be able to compile support for CUDA architectures below 75, so they will not be able to run on older hardware. In preparation, our CI runners now have `cuda-arch-#` tags for the architectures they support. Jobs may then be tagged with the minimum architecture on which they can run. Tag each job with the highest of the following requirements: * Most of CMake's tests use the CUDA compiler's default architecture, which is based on the version the CUDA toolkit. * For Clang we currently select architecture 52 if supported by the CUDA toolkit, even if that toolkit's NVCC defaults to an older arch. * The `CudaOnly.Architecture` test uses a specific architecture configured by each CI job. --- .gitlab-ci.yml | 24 ++++++++++++------------ .gitlab/os-linux.yml | 15 +++++++++++---- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3fc137e..dce1ad1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -304,7 +304,7 @@ t:nvhpc22.11-ninja: extends: - .nvhpc_ninja - .cmake_test_linux_release - - .linux_x86_64_v3_tags_cuda + - .linux_x86_64_v3_tags_cuda_arch_52 - .run_dependent - .needs_centos7_x86_64 variables: @@ -314,7 +314,7 @@ t:cuda9.2-nvidia: extends: - .cuda9.2_nvidia - .cmake_test_linux_release - - .linux_x86_64_tags_cuda + - .linux_x86_64_tags_cuda_arch_30 - .run_dependent - .needs_centos7_x86_64 variables: @@ -324,7 +324,7 @@ t:cuda10.2-nvidia: extends: - .cuda10.2_nvidia - .cmake_test_linux_release - - .linux_x86_64_tags_cuda + - .linux_x86_64_tags_cuda_arch_52 - .cmake_junit_artifacts - .run_dependent - .needs_centos7_x86_64 @@ -335,7 +335,7 @@ t:cuda10.2-clang: extends: - .cuda10.2_clang - .cmake_test_linux_release - - .linux_x86_64_tags_cuda + - .linux_x86_64_tags_cuda_arch_52 - .run_dependent - .needs_centos7_x86_64 variables: @@ -345,7 +345,7 @@ t:cuda11.6-nvidia: extends: - .cuda11.6_nvidia - .cmake_test_linux_release - - .linux_x86_64_tags_cuda + - .linux_x86_64_tags_cuda_arch_52 - .cmake_junit_artifacts - .run_dependent - .needs_centos7_x86_64 @@ -356,7 +356,7 @@ t:cuda11.6-clang: extends: - .cuda11.6_clang - .cmake_test_linux_release - - .linux_x86_64_tags_cuda + - .linux_x86_64_tags_cuda_arch_52 - .run_dependent - .needs_centos7_x86_64 variables: @@ -366,7 +366,7 @@ t:cuda11.8-minimal-ninja: extends: - .cuda11.8_minimal_nvidia - .cmake_test_linux_release - - .linux_x86_64_tags_cuda + - .linux_x86_64_tags_cuda_arch_52 - .run_dependent - .needs_centos7_x86_64 variables: @@ -376,7 +376,7 @@ t:cuda11.8-minimal-splayed-ninja: extends: - .cuda11.8_splayed_nvidia - .cmake_test_linux_release - - .linux_x86_64_tags_cuda + - .linux_x86_64_tags_cuda_arch_52 - .run_dependent - .needs_centos7_x86_64 variables: @@ -386,7 +386,7 @@ t:cuda12.2-nvidia: extends: - .cuda12.2_nvidia - .cmake_test_linux_release - - .linux_x86_64_tags_cuda + - .linux_x86_64_tags_cuda_arch_52 - .cmake_junit_artifacts - .run_dependent - .needs_centos7_x86_64 @@ -395,7 +395,7 @@ t:cuda12.2-nvidia-clang: extends: - .cuda12.2_nvidia_clang - .cmake_test_linux_release - - .linux_x86_64_tags_cuda + - .linux_x86_64_tags_cuda_arch_52 - .cmake_junit_artifacts - .run_dependent - .needs_centos7_x86_64 @@ -406,7 +406,7 @@ t:cuda12.2-clang: extends: - .cuda12.2_clang - .cmake_test_linux_release - - .linux_x86_64_tags_cuda + - .linux_x86_64_tags_cuda_arch_52 - .run_dependent - .needs_centos7_x86_64 variables: @@ -416,7 +416,7 @@ t:hip5.5-nvidia: extends: - .hip5.5_nvidia - .cmake_test_linux_release - - .linux_x86_64_tags_cuda + - .linux_x86_64_tags_cuda_arch_52 - .run_dependent - .needs_centos7_x86_64 variables: diff --git a/.gitlab/os-linux.yml b/.gitlab/os-linux.yml index 6b8c2d0..e9d8ed9 100644 --- a/.gitlab/os-linux.yml +++ b/.gitlab/os-linux.yml @@ -491,17 +491,24 @@ - linux-x86_64 - x11 -.linux_x86_64_tags_cuda: +.linux_x86_64_tags_cuda_arch_30: tags: - cmake - - cuda-rt + - cuda-arch-30 - docker - linux-x86_64 -.linux_x86_64_v3_tags_cuda: +.linux_x86_64_tags_cuda_arch_52: tags: - cmake - - cuda-rt + - cuda-arch-52 + - docker + - linux-x86_64 + +.linux_x86_64_v3_tags_cuda_arch_52: + tags: + - cmake + - cuda-arch-52 - docker - linux-x86_64-v3 -- cgit v0.12