CI: Run the Linux CUDA jobs on the L4 runner as well as the SaaS T4s

libeigen/eigen!2955

Co-authored-by: Rasmus Munk Larsen <rmlarsen@gmail.com>
diff --git a/ci/build.linux.gitlab-ci.yml b/ci/build.linux.gitlab-ci.yml
index e275dfc..3c8ea48 100644
--- a/ci/build.linux.gitlab-ci.yml
+++ b/ci/build.linux.gitlab-ci.yml
@@ -284,10 +284,10 @@
   variables:
     # Additional flags passed to the cuda compiler.
     EIGEN_CI_CUDA_CXX_FLAGS: ""
-    # Compute architectures present in the GitLab CI runners.
-    # SaaS GPU runners have Tesla T4 (sm_75); the paired test jobs have to
-    # stay on those runners, see .test:linux:cuda.
-    EIGEN_CI_CUDA_COMPUTE_ARCH: "75"
+    # Default architecture coverage spans the GPUs used by CI: GitLab's SaaS
+    # runners are Tesla T4 (sm_75), and eigen-gpu-testing-001.gcloud is an L4
+    # (sm_89). Jobs tied to one runner pool may override this set below.
+    EIGEN_CI_CUDA_COMPUTE_ARCH: "75;89"
     EIGEN_CI_BUILD_TARGET: buildtests_gpu
     EIGEN_CI_TEST_CUDA_CLANG: "off"
     EIGEN_CI_TEST_CUDA_NVC: "off"
@@ -302,14 +302,15 @@
     # Build on regular linux to limit GPU cost.
     - saas-linux-2xlarge-amd64
 
-# ---- CUDA 11.5 + oldest supported compilers ---------------------------------
-# clang-14 fully supports up to CUDA 11.5.  CUDA 11.5 images are Ubuntu 20.04
-# only, which lacks clang-14 and cmake >= 3.17.  EIGEN_CI_BEFORE_SCRIPT adds
-# the LLVM apt repo (for clang-14) and installs cmake via pip.
+# ---- CUDA 11.8 + oldest supported compilers ---------------------------------
+# 11.8 is the oldest toolkit that knows sm_89, so gcc can cover the default
+# T4/L4 architecture set. CUDA 11.x images are Ubuntu 20.04 only, which lacks
+# clang-14 and cmake >= 3.17; the before_scripts add the Kitware and LLVM apt
+# repos.
 
-build:linux:cuda-11.5:gcc-10:
+build:linux:cuda-11.8:gcc-10:
   extends: .build:linux:cuda
-  image: nvidia/cuda:11.5.2-devel-ubuntu20.04
+  image: nvidia/cuda:11.8.0-devel-ubuntu20.04
   before_script:
     # Ubuntu 20.04 has cmake 3.16; Eigen requires 3.17+. Pull a newer
     # cmake from Kitware's official apt repo for focal.
@@ -326,8 +327,8 @@
     EIGEN_CI_C_COMPILER: gcc-10
     EIGEN_CI_CXX_COMPILER: g++-10
 
-build:linux:cuda-11.5:clang-14:
-  extends: build:linux:cuda-11.5:gcc-10
+build:linux:cuda-11.8:clang-14:
+  extends: build:linux:cuda-11.8:gcc-10
   before_script:
     # Ubuntu 20.04 lacks clang-14 and has cmake 3.16. Add both the LLVM
     # apt repo (for clang-14) and Kitware's apt repo (for cmake >= 3.17)
@@ -350,10 +351,15 @@
     EIGEN_CI_C_COMPILER: clang-14
     EIGEN_CI_CXX_COMPILER: clang++-14
     EIGEN_CI_TEST_CUDA_CLANG: "on"
+    # clang-14 predates sm_89 (LLVM 16 added it), so this pair targets sm_75.
+    # The 11.8 toolkit is newer than clang-14 knows; it treats it as 11.5,
+    # which is what the suppressed warning says.
+    EIGEN_CI_CUDA_COMPUTE_ARCH: "75"
+    EIGEN_CI_CUDA_CXX_FLAGS: "-Wno-unknown-cuda-version"
 
-# ---- New: latest CUDA + newest compilers, sm_89;sm_90 ----------------------
-# The CUDA 11.5 jobs cover sm_75 on T4. These jobs run natively on the L4 at
-# sm_89 and retain compile coverage for sm_90.
+# ---- Latest CUDA + newest compilers, sm_89;sm_90 ---------------------------
+# These jobs run natively on the L4 at sm_89 and retain compile-only coverage
+# for sm_90.
 
 # GCC-13, CUDA-12.6 (nvcc)
 # CUDA 12.6 nvcc only supports gcc up to 13.
diff --git a/ci/test.linux.gitlab-ci.yml b/ci/test.linux.gitlab-ci.yml
index ffbc88f..b93edc4 100644
--- a/ci/test.linux.gitlab-ci.yml
+++ b/ci/test.linux.gitlab-ci.yml
@@ -274,16 +274,13 @@
     EIGEN_CI_TEST_CACHE: "off"
   cache: []
   rules: !reference [.rules:libeigen:gpu, rules]
-  # Name the GPU and driver the job landed on before anything else.  The
-  # binaries are built for one architecture (see the tag note below), and the
-  # log is the only place that says which runner pool picked the job up.
+  # Name the GPU and driver the job landed on before anything else; the log is
+  # the record of which tagged runner handled it.
   before_script:
     - nvidia-smi
     - . ci/scripts/common.linux.before_script.sh
-  # The CUDA 11.5 jobs inherit this GitLab SaaS T4 (sm_75) tag. Keep it off
-  # self-hosted runners: their old cuFFT library aborts in cufftPlan1d on the
-  # L4, and allow_failure hides the misplaced job. Newer jobs override the tag
-  # through .test:linux:cuda:l4 below.
+  # The oldest CUDA jobs inherit this GitLab SaaS T4 (sm_75) tag. Newer jobs
+  # override it through .test:linux:cuda:l4 below.
   tags:
     - saas-linux-medium-amd64-gpu-standard
 
@@ -292,23 +289,23 @@
   tags:
     - eigen-linux-cuda-l4
 
-# ---- CUDA 11.5 + oldest supported compilers ---------------------------------
+# ---- CUDA 11.8 + oldest supported compilers ---------------------------------
 
-# GCC-10, CUDA-11.5
-test:linux:cuda-11.5:gcc-10:
+# GCC-10, CUDA-11.8
+test:linux:cuda-11.8:gcc-10:
   extends: .test:linux:cuda
-  image: nvidia/cuda:11.5.2-devel-ubuntu20.04
-  needs: [ build:linux:cuda-11.5:gcc-10 ]
+  image: nvidia/cuda:11.8.0-devel-ubuntu20.04
+  needs: [ build:linux:cuda-11.8:gcc-10 ]
   variables:
     EIGEN_CI_INSTALL: gcc-10 g++-10
     EIGEN_CI_C_COMPILER: gcc-10
     EIGEN_CI_CXX_COMPILER: g++-10
 
-# Clang-14, CUDA-11.5
-test:linux:cuda-11.5:clang-14:
+# Clang-14, CUDA-11.8
+test:linux:cuda-11.8:clang-14:
   extends: .test:linux:cuda
-  image: nvidia/cuda:11.5.2-devel-ubuntu20.04
-  needs: [ build:linux:cuda-11.5:clang-14 ]
+  image: nvidia/cuda:11.8.0-devel-ubuntu20.04
+  needs: [ build:linux:cuda-11.8:clang-14 ]
   before_script:
     # This override replaces the template's before_script, so repeat its
     # first step.
@@ -328,7 +325,7 @@
     EIGEN_CI_CXX_COMPILER: clang++-14
     EIGEN_CI_C_COMPILER: clang-14
 
-# ---- New: latest CUDA -------------------------------------------------------
+# ---- Latest CUDA ------------------------------------------------------------
 
 # GCC-13, CUDA-12.6
 test:linux:cuda-12.6:gcc-13: