CUDA: Lower minimum device architecture check to sm_60. libeigen/eigen!2975
diff --git a/CMakeLists.txt b/CMakeLists.txt index 994f2e2..d5dde5c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -715,7 +715,7 @@ endif() set(EIGEN_CUDA_CXX_FLAGS "" CACHE STRING "Additional flags to pass to the cuda compiler.") - set(EIGEN_CUDA_COMPUTE_ARCH "" CACHE STRING "The CUDA compute architecture(s) to target when compiling CUDA code, as a ;-separated list of sm_XX numbers (e.g. 75;90). Empty selects sm_70, or sm_75 with CUDA 13 and later, which dropped Volta.") + set(EIGEN_CUDA_COMPUTE_ARCH "" CACHE STRING "The CUDA compute architecture(s) to target when compiling CUDA code, as a ;-separated list of sm_XX numbers (e.g. 75;90). Empty selects sm_60, or sm_75 with CUDA 13 and later, which dropped Pascal and Volta.") option(EIGEN_TEST_SYCL "Add Sycl support." OFF) if(EIGEN_TEST_SYCL)
diff --git a/Eigen/src/Core/arch/GPU/PacketMath.h b/Eigen/src/Core/arch/GPU/PacketMath.h index e5a6597..e65bc1f 100644 --- a/Eigen/src/Core/arch/GPU/PacketMath.h +++ b/Eigen/src/Core/arch/GPU/PacketMath.h
@@ -19,7 +19,7 @@ namespace internal { // Read-only data cached load (__ldg) and native FP16 arithmetic are available -// on all supported GPU architectures (sm_70+ for CUDA, GFX906+ for HIP). +// on all supported GPU architectures (sm_60+ for CUDA, GFX906+ for HIP). // We need to distinguish ‘clang as the CUDA compiler’ from ‘clang as the host compiler, // invoked by NVCC’ (e.g. on MacOS). The former needs to see both host and device implementation
diff --git a/Eigen/src/Core/util/Macros.h b/Eigen/src/Core/util/Macros.h index d4a41c0..8e6e0e7 100644 --- a/Eigen/src/Core/util/Macros.h +++ b/Eigen/src/Core/util/Macros.h
@@ -603,11 +603,11 @@ #endif // Native FP16 packet math intrinsics (e.g. __hfma2, h2exp, h2log) are only -// declared by the CUDA headers when __CUDA_ARCH__ >= 530. Eigen's documented -// floor is sm_70, so guard the device pass with a clear error rather than -// surfacing as "identifier `__hfma2` is undefined" deep inside PacketMath.h. -#if defined(EIGEN_CUDA_ARCH) && EIGEN_CUDA_ARCH < 700 -#error "Eigen requires CUDA compute capability >= 7.0 (sm_70). Compile with -arch=sm_70 or higher." +// declared by the CUDA headers when __CUDA_ARCH__ >= 530. Guard the device +// pass with a clear error rather than surfacing as "identifier `__hfma2` is +// undefined" deep inside PacketMath.h. +#if defined(EIGEN_CUDA_ARCH) && EIGEN_CUDA_ARCH < 600 +#error "Eigen requires CUDA compute capability >= 6.0 (sm_60). Compile with -arch=sm_60 or higher." #endif #if defined(__HIPCC__) && !defined(EIGEN_NO_HIP) && !defined(__SYCL_DEVICE_ONLY__)
diff --git a/ci/build.linux.gitlab-ci.yml b/ci/build.linux.gitlab-ci.yml index 28c1032..953787e 100644 --- a/ci/build.linux.gitlab-ci.yml +++ b/ci/build.linux.gitlab-ci.yml
@@ -284,10 +284,11 @@ variables: # Additional flags passed to the cuda compiler. EIGEN_CI_CUDA_CXX_FLAGS: "" - # 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" + # Default architecture coverage spans the minimum supported architecture + # (sm_60) and 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: "60;75;89" EIGEN_CI_BUILD_TARGET: buildtests_gpu EIGEN_CI_TEST_CUDA_CLANG: "off" EIGEN_CI_TEST_CUDA_NVC: "off"
diff --git a/cmake/EigenTesting.cmake b/cmake/EigenTesting.cmake index ae5944b..ed47a68 100644 --- a/cmake/EigenTesting.cmake +++ b/cmake/EigenTesting.cmake
@@ -90,14 +90,14 @@ # ccache does not cache; expect those as misses in the statistics. # Resolve EIGEN_CUDA_COMPUTE_ARCH once find_package(CUDA) has set CUDA_VERSION. # The cache entry defaults to empty, which selects the oldest architecture the -# toolkit still compiles for: sm_70, Eigen's documented floor (see Macros.h), -# or sm_75 from CUDA 13 on, which dropped offline compilation for Volta. Sets -# the directory-scope variable the arch flags are built from; an explicit cache -# value is used as given. +# toolkit still compiles for: sm_60, Eigen's documented floor (see Macros.h), +# or sm_75 from CUDA 13 on, which dropped offline compilation for Pascal and +# Volta. Sets the directory-scope variable the arch flags are built from; an +# explicit cache value is used as given. macro(ei_cuda_resolve_compute_arch) if("${EIGEN_CUDA_COMPUTE_ARCH}" STREQUAL "") if(CUDA_VERSION VERSION_LESS 13.0) - set(EIGEN_CUDA_COMPUTE_ARCH 70) + set(EIGEN_CUDA_COMPUTE_ARCH 60) else() set(EIGEN_CUDA_COMPUTE_ARCH 75) endif()